Отношения между классами
n Агрегация
n Композиция
n Ассоциация
Ассоциация
Особенности
n Семантическая связь классов
n Мощность
l Один к одному
l Один ко многим
l Многие к одному
l Многие ко многим
Реализация на практике
n У класса есть поле типа другого класса
n Мощность
l «К одному» – поле имеет просто тип класса
l «Ко многим» – поле имеет тип массива или коллекции класса
Агрегация
Особенности
n Можно считать частным случаем ассоциации
n Образуется отношение «целое-часть» между объектами
n Агрегат (контейнер) – большой внешний объект
n Строгая направленность
Реализация на практике
n Всё почти так же, как и в случае ассоциации
n Ссылки между объектами не могут образовывать циклы
Композиция
Особенности
n Можно считать частным случаем агрегации
n Время жизни объектов-частей определяется объектом-контейнером и не может превышать время жизни объекта-контейнера
n Объект-часть не существует самостоятельно
Реализация на практике
n Всё почти так же, как в случае агрегации
n Создание и уничтожение объектов-частей происходит только в ходе выполнения операций объекта-контейнера
Вопрос 27 Дизайн в ООП и его характеристики. 9-11, 18-19 Отношения между типами и особенности разработки
Ещё одна проблема разработки программ в ООП
n Этапы разработки (условно)
l Определение модели данных
l Определение алгоритма в виде последовательности операций
l Реализация на языке программирования
n Проблема
l Структурной единицей программы является класс
l Из-за инкапсуляции модель данных связана с алгоритмом
l Разделить данные и алгоритмы между классами можно далеко не единственным способом…
Object-oriented design
n Объектно-ориентированное проектирование – планирование системы как совокупности взаимодействующих объектов с целью решения программной задачи
n Для решения задачи необходимо разделить её на части и выбрать ответственных за них
n Инкапсуляция разделяет ответственности (responsibility) между классами
n Результат проектирования – распределение ответственностей и активностей по классам
Характеристики дизайна
n Coupling (связанность, зависимость)
l Характеристика взаимосвязи модулей
l Степень того, насколько модуль зависит от других модулей
l Мера ресурсов, требующихся при внесении изменений
n Cohesion (связность, сцепленность, сфокусированность, сосредоточенность)
l Степень того, насколько модуль сфокусирован на решение одной задачи
l Степень того, насколько элементы модуля гармонизированы, подходят друг другу
Плохой дизайн
n Высокая связанность
l Эффект кругов по воде (или снежной лавины) при внесении изменений
l Сборка модулей требует большего времени и/или затрат из-за связей между модулями
l Конкретный модуль может быть тяжело тестировать и/или повторно использовать
n Слабая сфокусированность
l Сложности с пониманием модулей
l Сложности с поддержкой системы, т.к. логически согласованные изменения могут потребовать изменения многих модулей
l Сложности с повторным использованием модуля, поскольку большинству приложений именно такой модуль не нужен
Хороший дизайн
Loose coupling
High cohesion
n Правда, эти требования друг другу противоречат
n И следует это из самой природы ООП
n Так что придётся искать компромисс
Вопрос 28 Связанность в ООП и её виды. 12-15
Виды связанности
n Связанность содержимого (content coupling)-
l Один модуль изменяет или полагается на внутренние особенности другого модуля (например, используются локальные данные другого модуля)
l Изменение работы второго модуля приведёт к переписыванию первого
n Связанность через общее (common coupling)-
l Два модуля работают с общими данными (например, глобальной переменной)
l Изменение разделяемого ресурса приведёт к изменению всех работающих с ним модулей
Виды связанности
n Связанность через внешнее
(external coupling)
l Два модуля используют навязанный извне формат данных, протокол связи и т.д.
l Обычно возникает из-за внешних сущностей (инструментов, устройств и т.д.)
n Связанность по управлению (control coupling)+
l Один модуль управляет поведением другого
l Присутствует передача информации о том, что и как делать
Виды связанности
n Связанность по структурированным данным
(data-structured coupling, stamp coupling)
l Модули используют одну и ту же структуру, но каждый использует только её часть (части могут и не совпадать)
l Изменение структуры может привести к изменению модуля, который изменённую часть даже не использует
n Связанность через данные (data coupling)+
l Модули совместно используют данные, например, через параметры
l Элементарные фрагменты маленькие и только они используются модулями совместно
Виды связанности
n Связанность по сообщениям
(message coupling)
l Модули общаются только через передачу параметров или сообщений
l Состояние децентрализовано
n Отсутствие связанности (no coupling)
l Модули вообще никак не взаимодействуют
Дата: 2019-07-30, просмотров: 235.