Тема 3. Структурное программирование
На заре программирования...
Что такое хорошая программа?
Проблема "блюда спагетти"
Разработка программ подчиняется законам Мэрфи
Предпосылки структурного программирования
Структурный подход к программированию
Нисходящая разработка
Свойства модуля
Модульность в среде Borland C++ Builder
Пример нисходящей разработки приложения
Структурное программирование
Комбинирование трёх конструкций
Псевдокод
Использование псевдокода
Пошаговая детализация
От пошаговой детализации к псевдокоду
От псевдокода к программе на С++
Оптимизация кода С++
Некоторые приемы структурного программирования на С++
Некоторые приемы структурного программирования на С++
Некоторые приемы структурного программирования на С++
Некоторые приемы структурного программирования на С++
Сквозной структурный контроль
Верификация программного обеспечения
586.50K
Category: programmingprogramming

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

1. Тема 3. Структурное программирование

Программирование и основы алгоритмизации
Тема 3. Структурное
программирование
Шевченко А. В.
Тема 3. Структурное программирование
1

2. На заре программирования...

Программирование и основы алгоритмизации
На заре программирования...
QTRAN::
1$:
2$:
Шевченко А. В.
.IRPC
MOV
.ENDR
MOV
MOV
CLR
ADD
SOB
MOV
MOV
MUL
CLRB
SOB
Тема 3. Структурное программирование
X,<1234>
R’X,-(SP)
Q.RTBA(R5),R0
Q.RTBS(R5),R1
TR.RLC(R0)
#TR.SIZ,R0
R1,1$
Q.ATBA(R5),R0
Q.ATBS(R5),R1
#TA.SIZ,R1
(R0)+
R1,2$
2

3. Что такое хорошая программа?

Программирование и основы алгоритмизации
Что такое хорошая программа?
Раньше хорошими программистами считали тех, кто писал весьма
хитроумные программы, которые занимали минимум оперативной памяти
и выполнялись за кратчайшее время. Это было естественно, потому что в
"старое доброе время" размер оперативной памяти был сильно ограничен,
а машины были намного медленнее, чем сегодня. Результатом
хитроумного кодирования оказывались программы, которые было трудно
понять другим лицам. Программисты зачастую сами признавали, что
свою собственную программу они с трудом понимают уже через полгода, а
то и через месяц.
Дж. Хьюз, Дж. Мичтом. Структурный подход к программированию
Шевченко А. В.
Тема 3. Структурное программирование
3

4. Проблема "блюда спагетти"

Программирование и основы алгоритмизации
Проблема "блюда спагетти"
Шевченко А. В.
Тема 3. Структурное программирование
4

5. Разработка программ подчиняется законам Мэрфи

Программирование и основы алгоритмизации
Разработка программ подчиняется законам Мэрфи
Законы Мэрфи
Всё сложнее чем кажется.
Всё тянется дольше, чем можно ожидать.
Всё оказывается дороже, чем планировалось.
Если что-то может испортиться, оно обязательно портится.
Комментарий Каллагана к законам Мэрфи
Мэрфи был оптимистом.
Шевченко А. В.
Тема 3. Структурное программирование
5

6. Предпосылки структурного программирования

Программирование и основы алгоритмизации
Предпосылки структурного программирования
"На протяжении многих лет я очень хорошо знал, что квалификация
программистов - убывающая функция от плотности операторов GOTO в
создаваемых ими программах. Но лишь совсем недавно я обнаружил,
почему использование оператора GOTO имеет такие гибельные
последствия. Я пришел к убеждению, что этот оператор должен быть
исключён из всех языков программирования высокого уровня.
Эдсгер Дейкстра, март 1968
Структурное программирование программирование без GOTO
Шевченко А. В.
Тема 3. Структурное программирование
6

7. Структурный подход к программированию

Программирование и основы алгоритмизации
Структурный подход к программированию
Нисходящая
разработка
Структурное
программирование
Сквозной структурный
контроль
Цель - разработка понятных, правильных,
легко сопровождаемых программ
Шевченко А. В.
Тема 3. Структурное программирование
7

8. Нисходящая разработка

Программирование и основы алгоритмизации
Нисходящая разработка
Модуль
Модуль
Модуль
Модуль
Шевченко А. В.
Заглушка
Модуль
Заглушка
Модуль
Заглушка
Разработка «сверху-вниз» по
модульному принципу
Тема 3. Структурное программирование
8

9. Свойства модуля

Программирование и основы алгоритмизации
Свойства модуля
1. Модуль может быть отдельной программой или подпрограммой (функцией).
2. На модуль можно ссылаться с помощью имени, называемого именем модуля.
3. Модуль должен возвращать управление тому, кто его вызвал.
4. Модуль может обращаться к другим модулям.
5. Модуль должен иметь один вход и один выход.
6. Модуль должен быть сравнительно небольшим (20 - 200 строк кода).
7. Модуль не должен быть зависим от истории своих вызовов.
8. В идеале модуль должен реализовывать одну функцию, причём целиком.
Шевченко А. В.
Тема 3. Структурное программирование
9

10. Модульность в среде Borland C++ Builder

Программирование и основы алгоритмизации
Модульность в среде Borland C++ Builder
Система
Приложение 1
Форма 1
Приложение 2
Форма 2
Функция 1
Шевченко А. В.
...
Приложение N
Форма 3
Функция 2
Функция 3
Тема 3. Структурное программирование
10

11. Пример нисходящей разработки приложения

Программирование и основы алгоритмизации
Пример нисходящей разработки приложения
Управление
заказами
Загрузка
данных
Создание
Шевченко А. В.
Продукция
Редактирование
Клиенты
Поиск
Отображение
Тема 3. Структурное программирование
Заказы
Сохранение
данных
Удаление
11

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

Программирование и основы алгоритмизации
Структурное программирование
Следование
Развилка (условие)
Цикл
Логическая структура программы может быть
выражена комбинацией трех базовых структур
Шевченко А. В.
Тема 3. Структурное программирование
12

13. Комбинирование трёх конструкций

Программирование и основы алгоритмизации
Комбинирование трёх конструкций
Построение модулей по
принципу «один вход - один
выход», комбинируя три
основные
конструкции:
следования, развилки и
цикла
Шевченко А. В.
Тема 3. Структурное программирование
13

14. Псевдокод

Программирование и основы алгоритмизации
Псевдокод
Следование
Действие 1
Действие 2
Действие 3
Шевченко А. В.
Развилка (условие)
ЕСЛИ условие
ТО
Действия
ИНАЧЕ
Действия
ВСЁ-ЕСЛИ
Тема 3. Структурное программирование
Цикл
ЦИКЛ ПОКА условие
Действия
ВСЁ-ЦИКЛ
14

15. Использование псевдокода

Программирование и основы алгоритмизации
Использование псевдокода
1
2
6
3
7
8
4
9
5
10
Шевченко А. В.
Тема 3. Структурное программирование
ЕСЛИ условие 1
ТО
Действие 2
Действие 3
ЕСЛИ условие 4
ТО
ИНАЧЕ
Действие 5
ВСЁ-ЕСЛИ
ИНАЧЕ
Действие 6
ЦИКЛ-ПОКА условие 7
Действие 8
Действие 9
ВСЁ-ЦИКЛ
Действие 10
ВСЁ-ЕСЛИ
15

16. Пошаговая детализация

Программирование и основы алгоритмизации
Пошаговая детализация
Загрузка данных о продукции
Открыть файл "Продукция"
Читать данные
Закрыть файл
Загрузка данных
Загрузка данных о клиентах
Загрузка данных о заказах
Шевченко А. В.
Тема 3. Структурное программирование
16

17. От пошаговой детализации к псевдокоду

Программирование и основы алгоритмизации
От пошаговой детализации к псевдокоду
Открыть файл "Продукция"
ЕСЛИ успешно
ТО
Сбросить счетчик элементов массива "Продукция"
ЦИКЛ-ПОКА не встречен конец файла
Читать очередную запись в массив
Увеличить счетчик на 1
ВСЁ-ЦИКЛ
Закрыть файл "Продукция"
ИНАЧЕ
Сообщение об ошибке "Файл не найден"
ВСЁ-ЕСЛИ
Шевченко А. В.
Тема 3. Структурное программирование
17

18. От псевдокода к программе на С++

Программирование и основы алгоритмизации
От псевдокода к программе на С++
Открыть файл "Продукция"
FILE* pf = fopen("product.dat", "rb");
ЕСЛИ успешно
if(pf)
{
ТО
prod_count = 0;
Сбросить счетчик элементов
while(!feof(pf))
ЦИКЛ-ПОКА до конца файла
{
Читать очередную запись
fread(&prod[prod_count],
sizeof(PROD), 1, pf);
Увеличить счетчик на 1
prod_count++;
ВСЁ-ЦИКЛ
}
Закрыть файл "Продукция"
ИНАЧЕ
Сообщение об ошибке
ВСЁ-ЕСЛИ
Шевченко А. В.
fclose(pf);
}
else
ShowMessage("Файл не найден");
Тема 3. Структурное программирование
18

19. Оптимизация кода С++

Программирование и основы алгоритмизации
Оптимизация кода С++
if(FILE* pf = fopen("product.dat", "rb"))
{
for(prod_count = 0; !feof(pf); prod_count++)
fread(&prod[prod_count], sizeof(PROD), 1, pf);
fclose(pf);
}
else
ShowMessage("Файл не найден");
Шевченко А. В.
Тема 3. Структурное программирование
19

20. Некоторые приемы структурного программирования на С++

Программирование и основы алгоритмизации
Некоторые приемы структурного программирования на С++
Макросы
Функции
Шаблоны
#define MODULE(a, b) \
...
void MODULE(int a, int b)
{ ... }
template<class x>
MODULE(x a, x b)
{ ... }
Однократное описание повторяющегося кода
Шевченко А. В.
Тема 3. Структурное программирование
20

21. Некоторые приемы структурного программирования на С++

Программирование и основы алгоритмизации
Некоторые приемы структурного программирования на С++
int a;
void main()
int b;
{
int c;
int a;
int b;
void main()
int c;
{
a = StrToInt(...);
a = StrToInt(...);
b = StrToInt(...);
b = StrToInt(...);
c = a+b;
c = a+b;
}
}
Отказ от глобальных переменных в пользу локальных
Шевченко А. В.
Тема 3. Структурное программирование
21

22. Некоторые приемы структурного программирования на С++

Программирование и основы алгоритмизации
Некоторые приемы структурного программирования на С++
void main()
void main()
{
{
int a;
int a = ...;
int b;
int b = ...;
int c;
int c = a+b;
}
a = ...;
b = ...;
c = a+b;
}
Возможно более позднее определение переменных
Шевченко А. В.
Тема 3. Структурное программирование
22

23. Некоторые приемы структурного программирования на С++

Программирование и основы алгоритмизации
Некоторые приемы структурного программирования на С++
int i;
for(int i = 0; i < N; i++)
a += b[i];
for(i = 0; i < N; i++)
a += b[i];
for(int i = 0; i < M; i++)
a -= c[i];
for(i = 0; i < M; i++)
a -= c[i];
FILE* inp;
if(FILE* inp = fopen(...))
if(inp = fopen(...))
{
{
...
...
}
}
Сокращение области видимости переменных
Шевченко А. В.
Тема 3. Структурное программирование
23

24. Сквозной структурный контроль

Программирование и основы алгоритмизации
Сквозной структурный контроль
Обнаружение и исправление ошибок
на ранних стадиях проекта, пока
стоимость исправления минимальна,
а последствия наименее значительны
Шевченко А. В.
Тема 3. Структурное программирование
24

25. Верификация программного обеспечения

Программирование и основы алгоритмизации
Верификация программного обеспечения
Проверка правильности
работы программ
Peer review
(проверка кода)
Шевченко А. В.
Тема 3. Структурное программирование
Тестирование
(проверка результатов)
25
English     Русский Rules