Программное обеспечение
<<  Программная инженерия Программная инженерия  >>
Программная инженерия
Программная инженерия
Подходы к созданию ПО
Подходы к созданию ПО
Этапы разработки программы
Этапы разработки программы
Критерии оценивания
Критерии оценивания
Оптимизация работы программы
Оптимизация работы программы
Линейное программирование
Линейное программирование
Структурное программирование
Структурное программирование
Ветвление
Ветвление
Ветвление
Ветвление
Запись логических условий
Запись логических условий
Циклы
Циклы
Оформление цикла по ГОСТ 19
Оформление цикла по ГОСТ 19
Цикл-счетчик
Цикл-счетчик
Сравнение циклов
Сравнение циклов
Математические операции
Математические операции
Массивы
Массивы
Динамические массивы
Динамические массивы
Работа с файлами
Работа с файлами
Указатели
Указатели
Динамическое выделение памяти
Динамическое выделение памяти
Присваивание указателей
Присваивание указателей
Указатель как параметр
Указатель как параметр
Списки
Списки
Объявление списков
Объявление списков
Добавление элемента в массив
Добавление элемента в массив
Удаление элемента из массива
Удаление элемента из массива
Добавление элементов в начало списка
Добавление элементов в начало списка
Добавление элементов в начало списка
Добавление элементов в начало списка
Добавление элементов в список
Добавление элементов в список
Добавление элементов в список после другого элемента
Добавление элементов в список после другого элемента
Удаление элемента в начале списка
Удаление элемента в начале списка
Удаление первого элемента из списка
Удаление первого элемента из списка
Удаление элемента из середины списка
Удаление элемента из середины списка
Удаление элемента из середины списка
Удаление элемента из середины списка
Поиск последнего элемента в списке
Поиск последнего элемента в списке
Просмотр списка целиком
Просмотр списка целиком
Поиск элемента в списке
Поиск элемента в списке
Очистка списка
Очистка списка
Специальные типы списков
Специальные типы списков
Стек
Стек
Стек
Стек
Очередь
Очередь
Очередь
Очередь
Очередь без указателя на хвост
Очередь без указателя на хвост
Упорядоченный список
Упорядоченный список
Добавление элемента в упорядоченный по возрастанию список
Добавление элемента в упорядоченный по возрастанию список
Добавление элемента в упорядоченный по возрастанию список
Добавление элемента в упорядоченный по возрастанию список
Зацикленный список
Зацикленный список
Двусвязный список
Двусвязный список
Объявление двусвязного списка
Объявление двусвязного списка
Добавление элемента в двусвязный список
Добавление элемента в двусвязный список
Добавление элемента в двусвязный список
Добавление элемента в двусвязный список
Добавление элемента в двусвязный список после другого элемента
Добавление элемента в двусвязный список после другого элемента
Добавление элемента в начало двусвязного списка
Добавление элемента в начало двусвязного списка
Добавление элемента в двусвязный список перед другим элементом
Добавление элемента в двусвязный список перед другим элементом
Удаление элемента из двусвязного списка
Удаление элемента из двусвязного списка
Удаление элемента из двусвязного списка
Удаление элемента из двусвязного списка
Удаление первого элемента из двусвязного списка
Удаление первого элемента из двусвязного списка
Процедурное программирование
Процедурное программирование
Глобальные переменные или параметры
Глобальные переменные или параметры
Модульное программирование
Модульное программирование
Объектно-ориентированное программирование
Объектно-ориентированное программирование
Принципы ООП
Принципы ООП

Презентация: «Программная инженерия». Автор: Анастасия. Файл: «Программная инженерия.pptx». Размер zip-архива: 186 КБ.

Программная инженерия

содержание презентации «Программная инженерия.pptx»
СлайдТекст
1 Программная инженерия

Программная инженерия

Дополнительные материалы по программированию

1

2 Подходы к созданию ПО

Подходы к созданию ПО

2

Линейное программирование

Модульное программирование

Процедурное программирование

Структурное программирование

Объектно-ориентированное программирование

3 Этапы разработки программы

Этапы разработки программы

3

Словесное описание задачи. Что должна выполнять программа? Какие могут быть результаты работы? Какие ограничения на исходные данные? Какие могут быть ошибки, внештатные ситуации? Как осуществлять ввод-вывод данных? Язык и среда программирования? Системные требования? Блок-схема решения (одна или несколько для подпрограмм). Исходный код с комментариями. Комментарий на человеческом языке поясняет, что делает данный фрагмент программы. Программа должна «читаться» по комментариям. Исходный код должен быть визуально структурирован. Тестирование по заранее составленному набору тестов. Необходимо продемонстрировать все возможные состояния программы.

4 Критерии оценивания

Критерии оценивания

4

Полнота и ясность словесного описания. Правильность и ясность блок-схемы. Качество декомпозиции. Правильность основного кода. Оптимальность основного кода. Комментарии и разметка кода. Пользовательский интерфейс. Обработка исключительных ситуаций. Полнота тестов.

К сдаче предоставляются: Файл отчета с полным описанием. Исходный код программы. Блок-схема, если она большая и не умещается на листе в отчете. Dia, yEd Graph Editor

5 Оптимизация работы программы

Оптимизация работы программы

5

Ускорение выполнения программы. Ускорение написания программы. Уменьшение объема исходного кода и размера исполняемого файла. Улучшение понятности исходного кода даже без комментариев. Обеспечение отказоустойчивости.

6 Линейное программирование

Линейное программирование

6

На низшем уровне все программы линейны, т.к. процессор последовательно (пошагово) выполняет команды, расположенные в памяти.

Нелинейность и псевдопараллельность достигаются с помощью прерываний и команд перехода (jump, goto).

Реализуется при программировании в виде машинных команд или на языке низкого уровня (assembler). Используется для повышения эффективности отдельных участков кода, контроля за работой программы, а также в для взлома. При компиляции программа на любом ЯП переводится в машинный код.

7 Структурное программирование

Структурное программирование

7

Любая программа строится из трех базовых управляющих структур: последовательность, ветвление, цикл. Очень важно для стандартизации программ. Программу можно разбить на типовые блоки и описать в виде блок-схемы.

8 Ветвление

Ветвление

8

Неполное

Полное

Да

Нет

Да

Нет

Нет

Да

Да

Нет

9 Ветвление

Ветвление

9

Бинарное (дихотомическое)

Переключатель (множественный выбор)

Да

Нет

x

1

2

3

10 Запись логических условий

Запись логических условий

10

Можно применять булевы переменные, особенно для длинных и сложных условий.

По правилам логики False and X = 0 X and False = 0 True or X = 0 X or True = 1 В левом столбце, программа не проверяет значение X. Поэтому имеет значение, в каком порядке писать условия. Ускоряет работу, помогает избежать ошибок.

if True then Writeln('Всегда');

if False then Writeln('Никогда');

If assigned(file) then if not eof(file) then... //A – массив if (i < length(a)) and (a[i] < 0) then a := 0;

11 Циклы

Циклы

11

С предусловием

С постусловием

Нет

Да

Нет

Да

12 Оформление цикла по ГОСТ 19

Оформление цикла по ГОСТ 19

701-90

12

13 Цикл-счетчик

Цикл-счетчик

13

for i := 1 to n do

for i := n downto 1 do

14 Сравнение циклов

Сравнение циклов

14

Цикл-счетчик

Цикл с предусловием

Цикл с постусловием

Низкоуровневая реализация

Через специальный регистр-счетчик

Через условный переход

Через условный переход

Скорость работы

Быстрее

Медленнее

Медленнее

Число итераций

0 и более, максимум ограничен разрядностью регистра

0 и более, неограниченно

1 и более, неограниченно

Зацикливание (бесконечный цикл)

Невозможно, если запрещено редактировать переменную цикла (зависит от ЯП)

Возможно

Возможно

Условие выхода из цикла

По числу итераций (может редактироваться в теле цикла)

Произвольное логическое

Произвольное логическое

15 Математические операции

Математические операции

15

Встроенные: + - * / div mod abs sqr, sqrt exp, ln cos, sin, arctan round, trunc, int, frac

Модуль Math: Power(число, степень), intpower tan, arcsin, arccos, atctan2, ... log10, log2, logn RoundTo(число, знаков после запятой) max, min sign

16 Массивы

Массивы

16

Массив – область памяти, содержащая несколько подряд идущих однотипных элементов.

Статический массив: память под весь массив целиком выделяется сразу, при запуске программы (как для переменных). Размер статического массива не меняется.

var A: array [0..10, 0..5] of Integer;

A[0]

var Letters: array ['a'..'z'] of Real;

A[1]

type TButtons = (btTab, btCtrl, btAlt, btShift, btDelete); var ArrButtons: array [TButtons] of Boolean;

A[2]

Адрес

Байты памяти

Байты памяти

Байты памяти

Байты памяти

Байты памяти

Байты памяти

Байты памяти

Байты памяти

0x0099CA17

1

0

0

0

0

1

1

0

0x0099CA18

0

0

0

0

1

1

0

1

0x0099CA19

1

0

1

1

1

1

0

0

0x0099CA1A

1

1

0

0

0

1

0

1

0x0099CA1B

1

0

1

0

1

1

1

1

0x0099CA1C

1

1

1

1

1

0

0

1

0x0099CA1D

1

1

0

1

0

1

1

1

0x0099CA1E

0

0

0

0

1

1

1

0

0x0099CA1F

0

1

1

1

0

1

0

1

0x0099CA20

1

0

1

1

1

0

1

1

0x0099CA21

0

0

1

1

1

0

0

1

0x0099CA22

1

1

1

0

1

0

1

0

17 Динамические массивы

Динамические массивы

17

Динамический массив: память для массивы выделяется в ходе выполнения программы с помощью специальной команды. Длина массива произвольна. В переменной массива хранится указатель на начало массива.

Var A: array of array of byte; //буфер для произвольных данных ... BEGIN setlength(a, 1024); //выделение памяти B := A; finalize(a); //освобождение памяти B[1] := 0; END.

Отсутствуют в «классическом» Pascal. Появились в Object Pascal, присутствуют во Free Pascal.

18 Работа с файлами

Работа с файлами

18

Типы файлов: нетипизированные типизированные текстовые Ini-файлы (Delphi)

Команды прямого доступа к файлам

Assign(f, filename); //подключение файла с именем filename к переменной F close(f);//закрытие файла rewrite(f);//очистить файл и открыть для записи reset(f);//открыть файл для чтения append(f);//открыть файл для записи в конец write(f, X);//записать в файл данные в переменную X read(f, X);//считать из файла данные в переменную X eof(f) //достигнут ли конец файла? Eol(f) //достигнут ли конец строки в текстовом файле fileexists(filename)//существует ли файл (модуль sysutils)

19 Указатели

Указатели

19

Указатель (Pointer) – переменная, длиной 4 байта, содержащая адрес какого-либо объекта в виртуальной памяти.

Объект в памяти

Нетипизированный указатель содержит произвольный адрес.

var P: Pointer;

Типизированный указатель подразумевает, что по указанному в нем адресу находятся данные определенного типа. Неверный тип данных может привести к ошибкам.

Var P: ^integer; //указатель на целое число type tpoint = record //объект – точка на плоскости X, Y: integer; //координаты точки end; ppoint = ^tpoint; //указатель на tpoint

Указатель

20 Динамическое выделение памяти

Динамическое выделение памяти

20

При объявлении обычных переменных память для них выделяется автоматически при запуске программы (глобальные переменные) или вызове процедуры/функции (локальные переменные). Глобальные переменные удаляются из памяти после завершения работы программы, локальные – после завершения процедуры/функции. При использовании указателей память нужно выделять и освобождать в ходе работы программы.

Dispose(<тип. Указатель>);

New(<тип. Указатель>);

Var p: ^integer; BEGIN new(p); //выделить память, адрес записать в p p^ := 12; //присвоить объекту по адресу p значение 12 p^ := p^ + 5; //прибавить 5 к объекту по адресу p dispose(p); //освободить память END.

Освободить память :

Выделить память:

21 Присваивание указателей

Присваивание указателей

21

Значение nil – никуда не указывает. Можно присвоить любому указателю и сравнивать указатель с nil.

p := nil;

If p <> nil then //если указатель куда-то ведет

Значение другого указателя, если они имеют одинаковый тип.

Var p1,p2: ^integer; p3: ^real; begin new(p1); p2 := p1; //верно p3 := p1; //ошибка!!!

Адрес созданного объекта правильного типа:

Var a: tcircle; p: ^ tcircle; begin p := @a; //присвоить p адрес a p := addr(a); //то же самое

22 Указатель как параметр

Указатель как параметр

22

var С: TCircle; //круг //площадь круга C function S(C: TCircle): Real; begin S := PI * C.R * C.R; end; BEGIN Readln(C.R); Writeln(S(C)); END.

type PCircle = ^TCircle; var С: TCircle; //круг //площадь круга C function S(C: PCircle): Real; begin S := PI * C^.R * C^.R; end; BEGIN Readln(C.R); Writeln(S(@C)); END.

23 Списки

Списки

23

Списки (list) используются как альтернатива массивов. Список тоже состоит из элементов. Они по-другому располагаются в памяти, доступ к списку возможен только через указатели. Списки сложнее массивов, но более гибкие.

Список – динамический объект. Память под каждый его элемент выделяется, когда он нужен, и освобождается, когда не нужен.

Элемент1

Элемент2

Элемент3

Голова

Указатель на начало списка

Хвост

nil

24 Объявление списков

Объявление списков

24

Каждый элемент списка содержит указатель на следующий (Next) элемент в списке. Если Next = nil, то это последний элемент.

Type plist = ^tlist; //указатель на элемент списка tlist = record //элемент списка data: integer; //данные произвольного типа next: plist; //указатель на следующий элемент списка end; var head: plist; //указатель на начало списка

25 Добавление элемента в массив

Добавление элемента в массив

25

1

5

2

121

3

-6

8

4

13

5

16

6

14

1

5

1

5

1

5

1

5

1

5

2

121

2

121

2

121

2

121

2

121

3

-6

3

-6

3

-6

3

-6

3

-6

4

13

4

13

4

13

4

4

8

5

16

5

16

5

5

13

5

13

6

14

6

6

16

6

16

6

16

7

7

14

7

14

7

14

7

14

26 Удаление элемента из массива

Удаление элемента из массива

26

1

5

2

121

3

-6

4

13

5

16

6

14

1

5

1

5

1

5

1

5

1

5

2

121

2

121

2

121

2

121

2

121

3

-6

3

13

3

13

3

13

3

13

4

13

4

13

4

16

4

16

4

16

5

16

5

16

5

16

5

14

5

14

6

14

6

14

6

14

6

14

27 Добавление элементов в начало списка

Добавление элементов в начало списка

27

1. Список пуст Head = nil

p^

p

2. Новый элемент создан, но еще не добавлен в список

1

p^.Data

p^.Next

3. Новый элемент добавлен в список

1

4. Новый элемент создан, но еще не добавлен в список

1

2

p

5. Новый элемент добавлен в список

p^.Data

p^.Next

1

2

Вспомогательный указатель

28 Добавление элементов в начало списка

Добавление элементов в начало списка

28

Procedure addfirst(var head: plist); var p: plist; //новый элемент begin //выделить память new(p); p^.Data := 0; //добавить элемент в список p^.Next := head; head := p; end;

29 Добавление элементов в список

Добавление элементов в список

29

1. Новый элемент создан, но еще не добавлен в список

1

2

2. Новый элемент добавлен в конец списка (после 1)

1

2

3. Новый элемент создан, но еще не добавлен в список

1

2

3

4. Новый элемент добавлен в список после 1

1

2

3

30 Добавление элементов в список после другого элемента

Добавление элементов в список после другого элемента

30

Procedure addafter(q: plist); var p: plist; //новый элемент begin //выделить память new(p); p^.Data := 0; //добавить элемент в список p^.Next := q^.Next; q^.Next := p; end;

31 Удаление элемента в начале списка

Удаление элемента в начале списка

31

1. Поставить дополнительный указатель на удаляемый элемент

1

2

2. Исключить элемент из списка

2

1

3. Освободить память

2

1

32 Удаление первого элемента из списка

Удаление первого элемента из списка

32

Procedure delfirst(var head: plist); var p: plist; //удаляемый элемент begin if head <> nil then //если список не пуст begin // исключить из списка p := head; head := p^.Next; //освободить память dispose(p); p := nil; //необязательно end; end;

33 Удаление элемента из середины списка

Удаление элемента из середины списка

33

1. Поставить временный указатель на удаляемый элемент

1

2

3

p

2. Исключить элемент из списка

1

2

3

p

3. Удалить элемент

1

2

3

p

34 Удаление элемента из середины списка

Удаление элемента из середины списка

34

Procedure delafter(q: plist); var p: plist; //удаляемый элемент begin if q^.Next <> nil then //если элемент существует begin // исключить из списка p := q^.Next; q := p^.Next; //освободить память dispose(p); p := nil; //необязательно end; end;

35 Поиск последнего элемента в списке

Поиск последнего элемента в списке

35

//Возвращает указатель на хвост списка //если список пуст, то nil function tail(head: plist): plist; begin tail := head; //в начало списка //пока не дошли до последнего элемента while (tail <> nil) and (tail^.Next <> nil) do tail := tail^.Next; //перейти к следующему end;

36 Просмотр списка целиком

Просмотр списка целиком

36

//Вывод списка на экран в столбик procedure printlist(head: plist); var p: plist; //текущий элемент begin p := head;//в начало списка while p <> nil do //пока список не закончился begin writeln(p^.Data); //вывести элемент p := p^.Next; //перейти к следующему end; end;

37 Поиск элемента в списке

Поиск элемента в списке

37

//Поиск элемента со значением value в списке //возвращает указатель на найденный элемент function find(head: plist; value: integer): plist; var p: plist; //текущий элемент begin p := head; while (p <> nil) and (p^.Data <> value) do p := p^.Next; find := p; end;

38 Очистка списка

Очистка списка

38

//Удаляет все элементы в списке procedure clear(var head: plist); var p: plist; //удаляемый элемент begin while head <> nil do //пока список не пуст begin //исключить 1-й элемент p := head; head := p^.Next; //очистить dispose(p); end; end;

39 Специальные типы списков

Специальные типы списков

39

Стек Очередь Упорядоченный список Зацикленный список Двунаправленный список

40 Стек

Стек

40

Стек (stack = стопка, читается «стэк») – список, в котором доступен только первый элемент (вершина стека).

1. Добавлять элемент можно только в начало списка (push - протолкнуть элемент в стек)

2. Удалять и просматривать можно только вершину списка (pop – извлечь элемент из стека). Остальные элементы скрыты от пользователя.

Вершина стека видна и доступна

Остальной стек скрыт

41 Стек

Стек

41

//Протолкнуть в стек procedure push(var head: pstack; value: integer); var p: pstack; begin new(p); p^.Data := value; p^.Next := head; head := p; end;

//Извлечь из стека function pop(var head: pstack): integer; var p: pstack; begin if head <> nil then begin p := head; head := p^.Next; pop := p^.Data; dispose(p); end else pop := 0; end;

42 Очередь

Очередь

42

Очередь (магазин, queue, читается «кю») – список, в котором доступен только первый элемент (голова), но добавление новых элементов происходит в конец списка.

1. Добавлять элемент можно только в конец списка (хвост очереди)

2. Удалять и просматривать можно только вершину списка (голову очереди)

Голова очереди доступна пользователю

Середина очереди скрыта

Сюда добавляются новые элементы

Вспомогательный указатель на хвост

43 Очередь

Очередь

43

//Поставить в очередь procedure enqueue(var head, tail: penqueue; value: integer); var p: penqueue; begin new(p); p^.Data := value; p^.Next := nil; tail^.Next := p; tail := p; if head = nil then head := p; end;

//Извлечь из очереди function dequeue(var head, tail: penqueue): integer; var p: penqueue; begin if head <> nil then begin p := head; head := p^.Next; if head = nil then tail := nil; dequeue := p^.Data; dispose(p); end else dequeue := 0; end;

44 Очередь без указателя на хвост

Очередь без указателя на хвост

44

//Поставить в очередь procedure enqueue(var head: penqueue; value: integer); var p, tail: penqueue; begin new(p); p^.Data := value; p^.Next := nil; if head = nil then head := p else begin tail := head; while tail^.Next <> nil do tail := tail^.Next; tail^.Next := p; end; end;

//Извлечь из очереди function dequeue(var head: penqueue): integer; var p: penqueue; begin if head <> nil then begin p := head; head := p^.Next; dequeue := p^.Data; dispose(p); end else dequeue := 0; end;

45 Упорядоченный список

Упорядоченный список

45

В упорядоченный список (sorted list) все элементы сразу добавляются на правильную позицию (по возрастанию, по убыванию, по алфавиту или другому правилу). Запрещено добавлять элементы в произвольную позицию. Удалять и просматривать можно любые элементы. Необходимо задать правило сортировки.

А1

А2

А3

A1 >= A2 >= A3

46 Добавление элемента в упорядоченный по возрастанию список

Добавление элемента в упорядоченный по возрастанию список

46

5

28

33

Head

30

p

5

28

33

Head

q^.Data < p^.Data q^.Next^.Data >= p^.Data

q

5

28

33

Head

30

q

p

47 Добавление элемента в упорядоченный по возрастанию список

Добавление элемента в упорядоченный по возрастанию список

47

procedure Add(var Head: PSortList; Value: Integer); var p, q: PSortList; begin New(p); p^.Data := Value; if (Head = nil) or (Head^.Data >= Value) then begin Head := p; p^.Next := nil; end else begin q := Head; while (q^.Next<>nil) and (q^.^Next^.Data < Value) do q := q^.Next; p^.Next := q^.Next; q^.Next := p; end; end;

48 Зацикленный список

Зацикленный список

48

Элемент1

Элемент2

Элемент3

Признак конца списка:

p^.Next = Head

49 Двусвязный список

Двусвязный список

49

Двунаправленный (двусвязный) список позволяет перемещаться по списку не только от головы к хвосту, но и в обратном направлении. Для этого у каждого элемента есть 2 указателя: следующий (Next) и предыдущий (Prev).

Next

Prev

Элемент1

Элемент2

Элемент3

50 Объявление двусвязного списка

Объявление двусвязного списка

50

Type pdlist = ^tdlist; //указатель на элемент списка tdlist = record //элемент списка data: integer; //данные произвольного типа next: pdlist; //указатель на следующий элемент prev: pdlist; //указатель на предыдущий элемент end; var head: pdlist; //указатель на начало списка

51 Добавление элемента в двусвязный список

Добавление элемента в двусвязный список

51

q

p

q^.Next

q

q^.Next

52 Добавление элемента в двусвязный список

Добавление элемента в двусвязный список

52

p

p

53 Добавление элемента в двусвязный список после другого элемента

Добавление элемента в двусвязный список после другого элемента

53

Procedure addafter(q: pdlist); var p: pdlist; //новый элемент begin //выделить память new(p); p^.Data := 0; //добавить элемент в список p^.Next := q^.Next; p^.Prev := q; if q^.Next <> nil then q^.Next^.Prev := p; q^.Next := p; end;

54 Добавление элемента в начало двусвязного списка

Добавление элемента в начало двусвязного списка

54

Procedure addfirst(var head: pdlist); var p: pdlist; //новый элемент begin //выделить память new(p); p^.Data := 0; //добавить элемент в список head^.Prev := p; p^.Next := head; p^.Prev := nil; head := p; end;

55 Добавление элемента в двусвязный список перед другим элементом

Добавление элемента в двусвязный список перед другим элементом

55

Procedure addbefore(q: pdlist); var p: pdlist; //новый элемент begin //выделить память new(p); p^.Data := 0; //добавить элемент в список p^.Next := q; p^.Prev := q^.Prev; if q^.Prev <> nil then //! должен быть первым q^.Prev^.Next := p; q^.Prev := p; end;

56 Удаление элемента из двусвязного списка

Удаление элемента из двусвязного списка

56

p

p^.Prev

p^.Next

57 Удаление элемента из двусвязного списка

Удаление элемента из двусвязного списка

57

Procedure del(p: pdlist); begin //исключение из списка if p^.Prev <> nil then p^.Prev^.Next := p^.Next; if p^.Next <> nil then p^.Next^.Prev = p^.Prev; //очистка памяти dispose(p); end;

58 Удаление первого элемента из двусвязного списка

Удаление первого элемента из двусвязного списка

58

Procedure delfirst(var head: pdlist); var p: pdlist; begin p := head; //исключение из списка head := p^.Next; if p^.Next <> nil then p^.Next^.Prev := nil; //очистка памяти dispose(p); end;

59 Процедурное программирование

Процедурное программирование

59

Программа разбивается на отдельные функциональные блоки – процедуры или функции. Связано с декомпозицией (разбивкой) большой задачи на более мелкие. Процедура (функция) выполняется как отдельная независимая программа. Она может использоваться многократно и вызывать другие процедуры и функции, в том числе и себя (рекурсия). Связь с основной программой или вышестоящей процедурой: Аргументы. Возвращаемое значение. Глобальные переменные. Точка вызова.

Правило: Если три или более строк кода встречаются в программе хотя бы дважды – их нужно выделить в процедуру (функцию).

60 Глобальные переменные или параметры

Глобальные переменные или параметры

60

var a, b, S: Integer; procedure Sum; begin S := a + b; end; BEGIN Readln(a); Readln(b); Sum; Writeln(S); END.

var a, b, S: Integer; function Sum(a, b: Integer): Integer; begin Result := a + b; end; BEGIN Readln(a); Readln(b); S := Sum(a, b); Writeln(S); END.

Для больших программ, нескольких разработчиков, программа может изменяться

Для маленьких программ, один разработчик, программа не будет изменяться

61 Модульное программирование

Модульное программирование

61

Наиболее типичные и часто встречающиеся фрагменты кода не нужно программировать заново в каждой задаче. Они выносятся в отдельные модули. Модуль – это фрагмент программного кода, имеющий интерфейс для использования в других программах. Программисту, использующему модуль нужно знать только интерфейс и назначение, но не нужно знать, как реализован модуль. Модуль может компилироваться и исполняться независимо от основной программы. Обычно модуль сопровождается документацией к интерфейсу, хотя бы в виде комментариев к программному коду. Модуль может содержать процедуры и функции, классы, структуры данных, константы и др.

62 Объектно-ориентированное программирование

Объектно-ориентированное программирование

62

Объект (экземпляр класса) Класс – описание однотипных объектов с выделением существенных свойств и методов поведения. Поля Свойства Методы Прототип – частично или полностью готовый объект, который используется для быстрого создания других объектов.

63 Принципы ООП

Принципы ООП

63

Инкапсуляция – объединение свойств и методов в классе и сокрытие его внутренней структуры. Вы знаете, что на табуретке можно сидеть. Для этого не нужно знать законы механики, из какого дерева сделана табуретка, каким способом ножки прицеплены к сиденью и т.п. Наследование – классы могут строиться на основе уже существующих, частично или полностью наследуя функциональность предков. Из табуретки можно сделать стул, если прикрутить спинку. Из стула можно сделать кресло, если приделать подлокотники. Полиморфизм – разные классы с одинаковым интерфейсом могут свободно заменять друг друга. Вы можете сидеть на табуретке с любой конструкцией, а также стуле или кресле. Вам не нужно для этого переучиваться и менять форму тела.

«Программная инженерия»
http://900igr.net/prezentacija/informatika/programmnaja-inzhenerija-246041.html
cсылка на страницу
Урок

Информатика

130 тем
Слайды