|
Программирование >> Структурное программирование
2.22. Размышления об объектах: идентификация объектов задачи Настало время поговорить об этой удивительной технологии, называемой объектной ориентацией. Специальные разделы в конце этой и нескольких следующих глав призваны облегчить вам проникновение в объектную ориентацию путем решения интересной и сложной задачи, взятой из реальной жизни - построение программы, моделирующей лифт. В главах 2-5 вы пройдете различные этапы объектно-ориентированного проектирования (00D). Начиная с главы 6 вы осуществите программу, моделирующую лифт, используя технологию объектно-ориентированного программирования (ООН) на С++. Пока такое задание может показаться вам несколько сложным. Не беспокойтесь. В данной главе мы рассмотрим только малую часть этой проблемы. Постановка задачи Некоторая компания намерена построить двухэтажный офис и оборудовать его лифтом по последнему слову техники. Компания предлагает вам разработать объектно-ориентированное программное обеспечение для моделирования работы этого лифта, чтобы определить, удовлетворяет ли он своему назначению. Лифт, предназначенный для одного человека, должен быть спроектирован так, чтобы сберегать энергию, так что он должен перемещаться только когда это необходимо. Он начинает день ожиданием с закрытыми дверьми на первом этаже здания. Лифт, конечно, может изменять направление движения - сначала вверх, потом вниз. Ваша моделирующая программа должна включать часы, которые в начале дня устанавливаются на О, а затем отсчитывают время с тактами в одну секунду. Компонент планировщик программы случайным образом планирует появление первого пассажира на любом этаже (в главе 3 вы поймете, как планировать случайное появление). Когда время на часах совпадет со временем первого появления пассажира, моделирующая программа создаст нового пассажира и поместит его на указанном этаже. Затем этот пассажир нажмет кнопку вверх или вниз . Этаж, требуемый пассажиру, никогда не равен тому, на котором он появился. Если первый пассажир появился в этот день на первом этаже, он немедленно войдет в лифт (конечно, пойле того, как нажмет кнопку вверх и подождет, пока откроются двери лифта). Если первый пассажир появился на втором этаже, то лифт отправится на этот этаж чтобы забрать пассажира. Лифту требуется пять тактов на перемещение между этажами. Лифт сигнализирует о своем появлении на этаже включением световой панели над дверью на данном этаже и звуковым сигналом. Кнопки на этаже и кнопки этого этажа в лифте возвращаются в исходное состояние. Лифт открывает дверь. Если в лифте есть пассажир, цель которого - данный этаж, то он выходит из лифта. Другой пассажир, если он ожидает у дверей, входит в лифт и нажимает кнопку нужного ему этажа. Лифт закрывает двери. Если лифт должен двигаться, то он определяет направление движения (несложная задача для лифта на 2 этажа!) и начинает перемещаться к следующему этажу. Для упрощения предположим, что все эти события происходят мгновенно и интервал времени с того момента, как лифт достиг нужного этажа, до момента закрывания дверей равен нулю. Лифт всегда знает, на каком он этаже в данный момент и на какой этаж он должен переместиться. Не более одного человека может ожидать лифт на любом этаже в любой момент времени, так что если этаж занят, когда на нем должен появиться новый пассажир (не тот, который уже вызвал лифт), то его появление перепланируется на одну секунду позже. Для упрощения примем, что в моделирующей программе в любой момент времени может создаваться только один человек, так что время появления очередного человека в здании никогда не повторяется. Предположим, что человек случайно появляется на каждом этаже каждые 5-10 секунд - в главе 3 мы изучим, как использовать генерацию случайных чисел для такого моделирования. Ваша цель в рамках этих специальных разделов глав 2-8 - создать работающую программу моделирования, функционирующую в соответствии с описанной постановкой задачи. Ваша программа должна промоделировать несколько минут работы лифта и определить, удовлетворяет ли лифт ожидаемым требованиям к перевозкам в этом офисном здании. Лабораторное задание 1 по лифту В этом и нескольких следующих заданиях вы должны осуществить отдельные этапа объектно-ориентированного проектирования. Первый этап - выявление (идентификация) объектов в вашей задаче. В конечном итоге вы должны будете дать формальное описание этих объектов и представить его ни С++. В данном задании вы дол5Кны: 1. Выявить объекты задачи моделирования лифта. В постановке задачи указано много совместно функционирующих объектов при моделировании лифта и его взаимодействия с различными людьми, этажами здания, кнопками и т.д. Выделите имена существительные в постановке задачи; с большой вероятностью они представят большинство объектов, необходимых для создания программы, моделирующей лифт. 2. Для каждого идентифицированного вами объекта запишите один точно сформулированный абзац, который бы охватил все факты в постановке задачи, относящиеся к данному объекту. Замечания 1. Это неплохое задание для группы. В идеале вы должны бы работать в группе из двух - четырех человек. Это поможет вам и вашим товарищам по группе подкрепить усилия друг друга, обсудить и усовершенствовать каждый проект и подход к его реализации. 2. Ваша группа должна состязаться с другой группой вашего класса в разработке наилучшего проекта и его реализации. 3. Вы научитесь реализовывать случайности в следующей главе, когда мы изучим генерацию случайных чисел. Генерация случайных чисел поможет вам осуществить моделирование таких процессов, как случайное бросание монетки или игральных костей. Это также поможет вам реализовать случайное появление пассажиров лифта. 4. Мы сделали ряд упрощающих предположений. Вы можете решиться возместить некоторые утраченные при этом дополнительные детали работы лифта. 5. Поскольку реальный мир также объектно ориентирован, для вас совершенно естественно заниматься этим проектом, хотя формально вы епце не изучали объектную ориентацию. 6. Не беспокойтесь по поводу совершенства. Проектирование системы не является каким-то полностью завершенным идеальным процессом, так что вы должны смотреть на ваш проект только как на возможно лучшее приближение. Вопросы 1. Какое решение вы примете, если лифт окажется в состоянии осуществить запланированный объем перевозок? 2. Почему намного сложнее сделать проект для здания с тремя и более этажами. 3. В дальнейшем цы увидим, что когда мы создадим один объект лифта, нам будет легко создать их сколько угодно. Какие проблемы вы предвидите в наличии нескольких лифтов, которые могут принимать и выгружать пассажиров на каждом этаже здания? 4. Для упрощения мы предположили, что емкость нашего лифта и каждого этажа - только один человек. Какие проблемы вы предвидите, если увеличить эти емкости? Резюме Процедура решения задачи в терминах операций, которые должны выполняться, и последовательности, в которой эти операции должны выполняться, называется алгоритмом. Определение последовательности, в которой должны выполняться операторы в компьютерной программе, называется программным управлением. Псевдокод помогает программисту обдумать программу прежде, чем попытаться написать ее на таком языке программирования, как С-Н-. Объявления - это сообщения компилятору, которые определяют имена и атрибуты переменных и дают указание компилятору зарезервировать для них место в памяти. Структуры выбора используются для поиска среди альтернативных способов действий. Структура выбора if осуществляет указанное действие только, если ее условие истинно. Структура выбора if/else определяет различные действия, выполняемые, если условие истинно, и если оно ложно. Везде, где нормально ожидается один оператор, а должна выполняться группа операторов, эти операторы должны заключаться в фигурные скобки, образуя составной оператор. Составной оператор может быть помещен в любом месте программы, в котором может размещаться единичный оператор.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |