Е.И. Большакова - Задания практикума по объектно-ориентированному программированию (1162571), страница 13
Текст из файла (страница 13)
Заметим, что впрограммном коде агрегация превращается либо во включение по значению, прикотором один объект является атрибутом другого, либо во включение по ссылке,при котором один объект содержит ссылку на другой.При связи использования метод одного класса или вызывает операциюдругого класса, или порождает экземпляр другого класса, или использует объектдругого класса как параметр, или же возвращает его в качестве своего значения.Отношения использования слабее и менее ограничительны, в то же времяагрегация часто предпочтительнее, т.к.
позволяет скрыть части в целом.Для более полного описания проектных решений, касающихсяответственности классов, необходимо составить текстовые спецификацииклассов – они должны содержать то, что не отображено в диаграмме, но удобнеезаписать в текстовом виде. Спецификация класса есть по сути описание егоинтерфейса, т.е. его видимых извне операций (методов).
Текстовыеспецификации могут быть записаны на используемом объектноориентированном языке программирования с добавлением комментариев,содержащих дополнительную информацию об атрибутах и операциях классов(например: статический, виртуальный, чисто виртуальный и т.п.).Диаграмма классов должна быть дополнена диаграммой объектов,показывающей взаимодействие основных объектов программной системы.Классы статичны, т.е.
их содержание определено в процессе компиляциипрограммного кода, и диаграмма классов описывает структуру программнойсистемы. Напротив, объекты динамичны – они создаются и уничтожаются впроцессе выполнения программы, и диаграмма объектов характеризует ееповедение, т.е. совместное функционирование объектов.Объекты на диаграмме изображаются прямоугольниками с закругленнымиуглами, внутри которых указывается имя объекта (а нередко и его класс).
Связиобъектов на диаграмме показывают пути передачи сообщений между ними(вызовов операций), направление сообщения (вызова) обозначается стрелкой,указывающей на объект, который предоставляет операцию. Связи целесообразнопомечать именем вызываемой операции.Важно, что диаграммы классов и объектов должны быть согласованы:если объект X посылает объекту Y сообщение, то в соответствующей диаграммеклассов должна быть надлежащая связь между классами этих объектов.Отметим, что объектное проектирование – итеративный процесс. Напрактике очень часто невозможно завершить проектирование, не закончивпрограммирование классов – таким образом, эти процессы выполняютсяпоследовательно и итеративно.
В итоге логический класс превращается впрограммный класс, т.е. объявление класса в конкретном языкепрограммирования.45Особенность всех описанных вариантов задания практикума в том, чтоони допускают несколько различных способов проектирования, равноприемлемых и отображаемых в разных итоговых диаграммах и спецификациях.Проектирование файловой структуры системыВ ходе проектирования и программирования решается также вопрос ораспределении классов по модулям (файлам) программной системы.Ряд объектных языков и интегрированных сред разработки приложенийнавязывают определенный способ разбиения программного кода на модулифайлы.
В тех же случаях, когда остается свобода выбора, разумно сгруппироватьв отдельные файлы внутренне (логически) связанные классы, например,выделить в отдельные модули: основную расчетную часть (математическуюмодель процесса или явления), процедуры визуализации моделируемогопроцесса или явления, процедуры организации интерфейса с пользователем.В больших проектах следует избегать вариантов модульной структуры,при которых каждый класс помещен в отдельном файле. В то же времянежелательна и другая крайность, когда все спроектированные классыобъединяются в одном файле – такое решение допустимо для небольших задач.Отчет о выполнении задания практикумаТекст отчета должен включать следующие разделы:1. Уточнение постановки задачи для выбранного варианта задания, принеобходимости – описание математической модели процесса или явления.Например: Демонстрационная модель солнечной системы.Смоделировать на основе законов Кеплера движение планет Солнечнойсистемы и пролет кометы через нее с заданной скоростью.2.
Диаграмма классов, показывающая выделенные классы и связи между ними.Например:SolarSystem1nCelestialBodySunНаследованиеАгрегацияИспользованиеPlanetSatelliteCometSolarPlanet3. Текстовые спецификации интерфейса основных классов системы.Например, для одного из классов://Интерфейс класса, представляющего Солнечную системуclass CSolarSystem{ public:46//итераторы для объектов системыtypedef TBodies::iterator TIterator;TIterator begin();TIterator end();//конструктор и деструкторCSolarSystem(void);~CSolarSystem(void);//пересчет положения объектов системыvoid nextFrame(double days_per_frame);//добавление тела p в системуvoid addBody(CCelestialBody * p);//удаление тела p из системыvoid removeBody(CCelestialBody * p);};4.
Диаграмма объектов, показывающая основные объекты и их связи.Например, для модели Солнечной системы (для наглядности на стрелках неуказываются названия вызываемых методов):mercuryvenusmoonearthphobosdeimosmarsjupitersolarsaturnganymede...europauranustitanneptunesuncomet5. Инструментальные средства, использованные при выполнении задания: языкпрограммирования, интегрированная среда, библиотеки.Например:Язык разработки – С++Среда разработки – Microsoft Visual Studio .NET 2003Используемые библиотеки – OpenGL, glut.6. Описание файловой структуры системы: перечень всех файлов программы суказанием классов, описанных в каждом из них.Например:solar.cpp – главный файл, интерфейс;47Planets.h и Planets.cpp – объявление и описание классов CPlanets,CSolarPlanet и CSatellite;Comet.h и Comet.cpp – объявление и описание класса CComet;Sun.h – описание класса CSun;CelestialBody.h – объявление класса CCelestialBody;CelestialBody.cpp – описание класса CCelestialBody;SolarSystem.h – объявление класса CSolarSystem;SolarSystem.cpp – описание класса CSolarSystem.7.
Пользовательский интерфейс: вид диалоговых окон для ввода параметровмоделирования и для визуализации моделируемого процесса или явления;описание функций основных элементов управления этих окон.Например: клавиши управления визуализацией Солнечной системы:W – увеличение масштаба изображения;S – уменьшение масштаба изображения;A – движение налево, D – движение направо области просмотра;Мышью при зажатой левой кнопке – повороты тел;+ и - – увеличение и уменьшение скорости движения тел;O – отображение/скрытие орбит;N – отображение/скрытие названий тел Солнечной системы;1..9 – инициирует пролет кометы со скоростью от 1 до 9 скоростейЗемли в точке восхождения;Е – выход из системы.4. Литература1. Буч Г. Объектно-ориентированное проектирование с примерами применения.– М.: Конкорд, 1992.2.
Буч Г. Объектно-ориентированный анализ и проектирование с примерамиприложений на С++. – М.: Бином, 1998.3. Буч Г., Максимчук Р., Энгл М. и др. Объектно-ориентированный анализ ипроектирование с примерами приложений. – М.: Изд. дом «Вильямс», 2008.4. Буч Г., Якобсон И., Рамбо Дж. UML. Классика CS. 2-е изд. - СПб.: Питер,2006.5.
Гамма Э., Хэлм Р., Джонсон Р., Влиссидес Дж. Приемы объектноориентированного проектирования. Паттерны проектирования. – СПб.:Питер, 2010.6. Гультяев А.К., Машин В.А. Проектирование и дизайн пользовательскогоинтерфейса. – СПб.: КОРОНА, 2000.7. Рамбо Дж., Блаха М. UML 2.0. Объектно-ориентированное моделирование иразработка. 2-е изд. – СПб.: Питер, 2006.48.