Глава 2
Рис. 2.38. Неструктурированная блок-схема
Следование тривиально. Выбор осуществляется одним из трех способов
структурой if (единственный выбор)
структурой if/else (двойной выбор)
структурой switch (множественный выбор)
В действительности можно доказать, что для реализации любой формы выбора достаточно одной простой структуры if — все, что можно сделать структурами if/else и switch, можно представить комбинацией структур if (правда, может быть не так удобно).
Повторение обеспечивается одним из трех способов:
структурой while
структурой do/while
структурой for
В действительности можно доказать, что для реализации любой формы повторения достаточно одной структуры while. Все, что можно сделать структурами do/while и for, можно представить структурой while (правда, может быть не так удобно).
В результате можно утверждать, что любую форму управления, которая может потребоваться в программе на С++, можно выразить в терминах
следование
структура if (выбор)
структура while (повторение)
И эти управляющие структуры могут комбинироваться только двумя путями: пакетированием или вложением. Действительно, структурное программирование способствует простоте!
В данной главе мы рассмотрели, как составлять программы из управляющих структур, содержащих только действия и выбор. В главе 3 мы познакомимся с другой структурной единицей программ, называемой функцией. Мы научимся составлять большие программы, комбинируя функции, которые, в свою очередь, состоят из управляющих структур. Мы увидим также, как применение функций способствует повторному использованию программных средств. В главе 6 мы ознакомимся еще с одной структурной единицей программ, называемой классом. В дальнейшем мы будем создавать объекты из классов и возобновим наше исследование объектно-ориентированного программирования. А пока мы продолжим знакомство с объектами, представив на рассмотрение проблему, которую читатель будет решать технологией объектно-ориентированного проектирования.
Управляющие структуры 147
2.22. Размышления об объектах: идентификация
объектов задачи
Настало время поговорить об этой удивительной технологии, называемой объектной ориентацией. Специальные разделы в конце этой и нескольких следующих глав призваны облегчить вам проникновение в объектную ориентацию путем решения интересной и сложной задачи, взятой из реальной жизни — построение программы, моделирующей лифт.
В главах 2—5 вы пройдете различные этапы объектно-ориентированного проектирования (OOD). Начиная с главы 6 вы осуществите программу, моделирующую лифт, используя технологию объектно-ориентированного программирования (ООП) на С++. Пока такое задание может показаться вам несколько сложным. Не беспокойтесь. В данной главе мы рассмотрим только малую часть этой проблемы.
Постановка задачи
Некоторая компания намерена построить двухэтажный офис и оборудовать его лифтом по последнему слову техники. Компания предлагает вам разработать объектно-ориентированное программное обеспечение для моделирования работы этого лифта, чтобы определить, удовлетворяет ли он своему назначению.
Лифт, предназначенный для одного человека, должен быть спроектирован так, чтобы сберегать энергию, так что он должен перемещаться только когда это необходимо. Он начинает день ожиданием с закрытыми дверьми на первом этаже здания. Лифт, конечно, может изменять направление движения — сначала вверх, потом вниз.
Ваша моделирующая программа должна включать часы, которые в начале дня устанавливаются на 0, а затем «отсчитывают» время с тактами в одну секунду. Компонент «планировщик» программы случайным образом планирует появление первого пассажира на любом этаже (в главе 3 вы поймете, как планировать случайное появление). Когда время на часах совпадет со временем первого появления пассажира, моделирующая программа «создаст» нового пассажира и поместит его на указанном этаже. Затем этот пассажир нажмет кнопку «вверх» или «вниз». Этаж, требуемый пассажиру, никогда не равен тому, на котором он появился.
Если первый пассажир появился в этот день на первом этаже, он немедленно войдет в лифт (конечно, пойле того, как нажмет кнопку «вверх» и подождет, пока откроются двери лифта). Если первый пассажир появился на втором этаже, то лифт отправится на этот этаж чтобы забрать пассажира. Лифту требуется пять тактов на перемещение между этажами.
Лифт сигнализирует о своем появлении на этаже включением световой панели над дверью на данном этаже и звуковым сигналом. Кнопки на этаже и кнопки этого этажа в лифте возвращаются в исходное состояние. Лифт открывает дверь. Если в лифте есть пассажир, цель которого — данный этаж, то он выходит из лифта. Другой пассажир, если он ожидает у дверей, входит в лифт и нажимает кнопку нужного ему этажа. Лифт закрывает двери. Если лифт должен двигаться, то он определяет направление движения (несложная задача для лифта на 2 этажа!) и начинает перемещаться к следующему этажу. Для упрощения предположим, что все эти события происходят мгновенно и интервал времени с того момента, как лифт достиг нужного этажа, до момента
- 116 Глава 2
- 2.13. Основы повторения, управляемого счетчиком
- 2.14. Структура повторения for (цикл)
- 120 Глава 2
- 122 Глава 2
- 2.15. Пример использования структуры for
- 124 Глава 2
- 126 Глава 2
- 2.16. Структура множественного выбора switch
- Глава 2
- 130 Глава 2
- 132 Глава 2
- 2.17. Структура повторения do/while
- 134 Глава 2
- 2.18. Операторы break и continue
- Глава 2
- 2.19. Логические операции
- 138 Глава 2
- Глава 2
- 2.21. Заключение по структурному программированию
- IfcrpyKTypa (единственный выбор)
- Глава 2
- Глава 2
- 148 Глава 2
- Глава 2
- Глава 2
- Глава 2
- 156 Глава 2
- 158 Глава 2
- 160 Глава 2
- 2.1. А) следование, выбор и повторение, b) if/else. С) управляемым счет чиком или определенным заранее, d) Метку, сигнал, флаг или лож ный сигнал.
- 162 Глава 2
- 164 Глава 2
- 166 Глава 2
- 168 Глава 2
- 170 Глава 2
- 172 Глава 2
- 174 Глава 2
- 176 Глава 2
- 178 Глава 3
- Глава 3
- 3.3. Математические библиотечные функции
- 3.4. Функции
- Глава 3
- 3.5 Определения функций
- 184 Глава 3
- 186 ГлаваЗ
- 3.6. Прототипы функций
- 188 Глава 3
- 3.7. Заголовочные файлы
- 3.8. Генерация случайных чисел
- Глава 3
- 192 Глава 3
- 194 Глава 3
- 3.9. Пример: азартная игра
- Глава 3
- 198 Глава 3
- 3.10. Классы памяти
- 200 Глава 3
- 3.11. Правила, определяющие область действия
- 202 Глава 3
- 204 Глава 3
- 3.12 Рекурсия
- Глава 3
- 6) Значения, возвращаемые после каждого рекурсивного вызова
- 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
- Глава 3
- 3.14. Рекурсии или итерации
- 212 Глава 3
- Глава 3
- Глава 4
- Глава 5
- Глава 6
- 3.15. Функции с пустыми списками параметров
- 214 Глава 3
- 3.16. Встраиваемые функции