logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

Глава 2

Рис. 2.38. Неструктурированная блок-схема

Следование тривиально. Выбор осуществляется одним из трех способов

В действительности можно доказать, что для реализации любой формы выбора достаточно одной простой структуры if — все, что можно сделать структурами if/else и switch, можно представить комбинацией структур if (правда, может быть не так удобно).

Повторение обеспечивается одним из трех способов:

В действительности можно доказать, что для реализации любой формы повторения достаточно одной структуры while. Все, что можно сделать струк­турами do/while и for, можно представить структурой while (правда, может быть не так удобно).

В результате можно утверждать, что любую форму управления, которая может потребоваться в программе на С++, можно выразить в терминах

И эти управляющие структуры могут комбинироваться только двумя пу­тями: пакетированием или вложением. Действительно, структурное програм­мирование способствует простоте!

В данной главе мы рассмотрели, как составлять программы из управля­ющих структур, содержащих только действия и выбор. В главе 3 мы позна­комимся с другой структурной единицей программ, называемой функцией. Мы научимся составлять большие программы, комбинируя функции, кото­рые, в свою очередь, состоят из управляющих структур. Мы увидим также, как применение функций способствует повторному использованию программ­ных средств. В главе 6 мы ознакомимся еще с одной структурной единицей программ, называемой классом. В дальнейшем мы будем создавать объекты из классов и возобновим наше исследование объектно-ориентированного про­граммирования. А пока мы продолжим знакомство с объектами, представив на рассмотрение проблему, которую читатель будет решать технологией объ­ектно-ориентированного проектирования.

Управляющие структуры 147

2.22. Размышления об объектах: идентификация

объектов задачи

Настало время поговорить об этой удивительной технологии, называемой объектной ориентацией. Специальные разделы в конце этой и нескольких следующих глав призваны облегчить вам проникновение в объектную ори­ентацию путем решения интересной и сложной задачи, взятой из реальной жизни — построение программы, моделирующей лифт.

В главах 2—5 вы пройдете различные этапы объектно-ориентированного проектирования (OOD). Начиная с главы 6 вы осуществите программу, мо­делирующую лифт, используя технологию объектно-ориентированного про­граммирования (ООП) на С++. Пока такое задание может показаться вам несколько сложным. Не беспокойтесь. В данной главе мы рассмотрим только малую часть этой проблемы.

Постановка задачи

Некоторая компания намерена построить двухэтажный офис и оборудо­вать его лифтом по последнему слову техники. Компания предлагает вам разработать объектно-ориентированное программное обеспечение для моде­лирования работы этого лифта, чтобы определить, удовлетворяет ли он своему назначению.

Лифт, предназначенный для одного человека, должен быть спроектирован так, чтобы сберегать энергию, так что он должен перемещаться только когда это необходимо. Он начинает день ожиданием с закрытыми дверьми на пер­вом этаже здания. Лифт, конечно, может изменять направление движения — сначала вверх, потом вниз.

Ваша моделирующая программа должна включать часы, которые в на­чале дня устанавливаются на 0, а затем «отсчитывают» время с тактами в одну секунду. Компонент «планировщик» программы случайным образом планирует появление первого пассажира на любом этаже (в главе 3 вы пой­мете, как планировать случайное появление). Когда время на часах совпадет со временем первого появления пассажира, моделирующая программа «со­здаст» нового пассажира и поместит его на указанном этаже. Затем этот пассажир нажмет кнопку «вверх» или «вниз». Этаж, требуемый пассажиру, никогда не равен тому, на котором он появился.

Если первый пассажир появился в этот день на первом этаже, он не­медленно войдет в лифт (конечно, пойле того, как нажмет кнопку «вверх» и подождет, пока откроются двери лифта). Если первый пассажир появился на втором этаже, то лифт отправится на этот этаж чтобы забрать пассажира. Лифту требуется пять тактов на перемещение между этажами.

Лифт сигнализирует о своем появлении на этаже включением световой панели над дверью на данном этаже и звуковым сигналом. Кнопки на этаже и кнопки этого этажа в лифте возвращаются в исходное состояние. Лифт открывает дверь. Если в лифте есть пассажир, цель которого — данный этаж, то он выходит из лифта. Другой пассажир, если он ожидает у дверей, входит в лифт и нажимает кнопку нужного ему этажа. Лифт закрывает двери. Если лифт должен двигаться, то он определяет направление движения (несложная задача для лифта на 2 этажа!) и начинает перемещаться к следующему этажу. Для упрощения предположим, что все эти события происходят мгновенно и интервал времени с того момента, как лифт достиг нужного этажа, до момента