
- •Ход лабораторной работы:
- •Метод crc-карточек:
- •Спецификация структуры классов:
- •На данном этапе можно остановиться, если устраивает оценка “удовлетворительно”. Для получения более высокой оценки следует выполнить остальные задания.
- •Формирование тестовой программы, подтверждающей работоспособность модели:
- •Пример простейшей объектной модели
- •Пример тестовой программы
- •Процедура защиты лабораторной работы:
Лабораторная работа №3.
Объектная модель: проектирование структуры и реализация ключевых классов
Цели лабораторной работы:
Понятийный анализ предметной области, выявление ключевых информационных сущностей. Предполагается выявить основные классы, описательные атрибуты классов, а также связи между классами исходя из ранее проанализированных и специфицированных требований.
Создание статического ракурса модели информационной системы в виде иерархии взаимосвязанных классов. Предполагается спецификация иерархии классов в виде UML-диаграмм.
Отображение модели ключевых классов системы в виде программных конструкций на языке С++ и проверка работоспособности реализации при помощи тестовой программы.
Ход лабораторной работы:
Выявление кандидатов в классы, описывающие предметную область:
Выписать часто встречающиеся существительные в описании требований.
Выделить в отдельный список те из выписанных существительных, которые имеют явное четко очерченное значение количественного или качественного характера – такие существительные являются кандидатами в атрибуты.
Выделить в отдельный список те из выписанных существительных, которые можно отнести к одной из следующих смысловых групп – такие существительные являются явными кандидатами в классы:
понятие, концепция;
предмет;
событие;
организация;
роль;
местоположение;
взаимодействие.
По остальным существительным решение может быть принято позже.
Метод crc-карточек:
Для оценки корректности выявления каждого конкретного класса следует дать ответы на следующие вопросы:
Каковы обязанности класса?
Идеальным случаем является наличие у каждого класса ровно 1 четкой обязанности.
Если обязанности сформулировать не получается, возможно существительное не является классом.
Если обязанностей несколько, возможно класс слишком большой и его следует разбить на несколько более мелких с 1 четкой обязанностью.
С какими другими классами сотрудничает класс?
Наличие других классов, с которыми взаимодействует класс, свидетельствует о правильном выявлении, т.к. атрибуты связей с другими классами не имеют.
Если класс не взаимодействует ни с кем, маловероятно, что класс представляет собой объект-сущность. Отсутствие связей вполне допустимо для классов-значений.
Спецификация структуры классов:
Используя программу StarUML, создать новую модель, содержащую диаграмму классов
Добавить пустые классы-заготовки для всех выявленных классов.
Выявить и специфицировать на диаграмме описательные атрибуты классов:
Атрибут должен иметь имя и тип данных.
Рекомендуется всем атрибутам назначить закрытую видимость.
Тип данных описательного атрибута наиболее часто является элементарным (число, строка, перечисление).
Во многих задачах встречаются атрибуты неэлементарных типов, представляющие собой объекты-значения, т.е. объекты, не имеющие индивидуальности, равенство между которыми определяется равенством всех атрибутов. Для распространенных случаев, таких как адрес, дата, деньги, новые классы на диаграмме вводить смысла не имеет, т.к. их структура очевидна.
Выявить и обозначить на диаграмме отношения агрегации между классами:
агрегация – это отношение целое-часть: если нельзя сказать, что объект класса является частью объекта другого класса, то отношение не является агрегацией;
символ агрегации – ромбик – отображается на стороне объекта-контейнера;
подвиды агрегации ExclusiveOwns (безраздельное владение) и Owns (владение) обозначаются закрашенным ромбиком, а Has и Member – незакрашенным;
конкретный вид агрегации можно подчеркнуть при помощи стереотипов (дополнительный текст на соединительных стрелках);
обязательно указать кратность агрегации ( 1..1, 1..*, *..*, … );
допускается отношение циклической агрегации, если один из объектов класса может содержать объекты того же самого класса;
если между классами существует более чем одно отношение агрегации, следует уточнить отношение при помощи явного имени либо комментария;
Выявить и обозначить на диаграмме отношения ассоциации между классами:
простая ассоциация существует между классами, объекты которых либо взаимодействуют между собой во время выполнения какого-либо сценария, либо логически связаны, однако нельзя отнести отношение к агрегации;
ассоциация может быть:
двунаправленной, если оба объекта инициируют взаимодействие друг с другом;
однонаправленной, если только один из объектов инициирует взаимодействие;
без направления, если смысл ассоциации акцентируется не на взаимодействии, а на некоторой логической связи;
обязательно указать кратность ассоциации ( 1..1, 1..*, *..*, … );
аналогично агрегациям, допускается циклическая ассоциация, и более чем одна ассоциация между двумя классами, что также следует уточнить именем ( где уместно – именами ассоциативных ролей на концах стрелок );
если между двумя классами существует ассоциация с кратностью *..*, следует задуматься о возможных ассоциативных классах – т.е., вспомогательных классах, моделирующих конкретную пару объектов ( типичный признак: конкретная пара объектов имеет характерные атрибуты )
Выявить и обозначить на диаграмме отношения обобщения между классами:
правильный случай: можно сказать, что подкласс является подвидом суперкласса;
правильный случай: объект суперкласса можно заменить объектом подкласса;
правильный случай: подкласс расширяет обязанности суперкласса;
неправильный случай: наследование похожих атрибутов без наличия связи между обязанностями классов;
неправильный случай: классы отличаются лишь малым набором свойств, не существенным для рассматриваемой задачи.