Similar presentations:
Структурное программирование. Тема 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