- •22. Объектно-ориентированные анализ и проектирование программных систем. Основные определения.
- •23. Основные принципы объектно-ориентированной разработки программ.
- •24. Обязанности объектов. Разложение системы на объекты. Crc-карты.
- •25. Инкапсуляция. Связность внутри классов и зацепление между классами.
24. Обязанности объектов. Разложение системы на объекты. Crc-карты.
Обязанностями объекта называются атрибуты, объектные связи и методы. При этом объектная связь представляет собой обязанность знать другой объект; атрибут – обязанность знания чего-либо; метод – обязанность выполнения (кого я знаю? что я знаю? что я делаю?). Каждый объект в системе имеет уникальное имя, необязательно понятное человеку; каждая обязанность внутри объекта также имеет уникальное имя.
Самая трудная задача в объектно-ориентированной методологии (ООМ) – правильно разложить систему на объекты и классы. Рекомендуется определять объекты по кругу выполняемых ими обязанностей.
CRC-карточки (Class-responsibility-collaboration card) – метод мозгового штурма, предназначенный для проектирования объектно-ориентированного программного обеспечения. CRC-карты были предложены Уордом Каннингемом и Кентом Беком. Как правило, CRC-карты используются в тех случаях, когда сначала в процессе проектирования ПО определяются классы и способы их взаимодействий.
Вверху карточки пишется название класса, в левой половине – за что он отвечает, в правой – с кем сотрудничает. Проходя по техническому заданию или любому другому документу описывающему задачу, на каждую нужную сущность заводиться класс, имя которого записывается в шапке карточки.
Слева в карточке записывается ответственность класса – что класс должен делать? Выделенные ответственности будут в будущем методами класса. После анализа ответственности класса, возможно, часть ответственностей с одного большого класса передадутся другому классу, или выделятся новые, более детальные классы.
Часто существительные технического задания выделяют в классы, а глаголы в ответственности класса.
Справа карточки отмечается связи класса – что другие классы делают при взаимодействии с ними? Связи определяет область сотрудничества этого класса. Карточки можно раскладывать так, чтобы представить формы сотрудничества объектов.
С точки зрения динамики моделируемой задачи, расположение карточек показывает поток сообщений между объектами, с точки зрения статики они представляют иерархии классов.
Для этого метода анализа есть специальные бумажные карточки, размера 3х5, иногда разноцветные – для большей наглядности.
Имя класса |
|
Ответственность |
Взаимодействие |
Пример карточки
25. Инкапсуляция. Связность внутри классов и зацепление между классами.
В языках программирования инкапсуляция имеет одно из следующих значений, либо их комбинацию:
языковой механизм ограничения доступа к определённым компонентам объекта;
языковая конструкция, способствующая объединению данных с методами (или другими функциями), обрабатывающими этими данные.
Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, полиморфизмом и наследованием).
В то же время, в языках поддерживающих замыкания, инкапсуляция рассматривается как понятие не присущее исключительно объектно-ориентированному программированию. Также, реализации абстрактных типов данных (например, модули) предлагают схожую модель инкапсуляции.
Инкапсуляция (encapsulation) - это механизм, который объединяет данные и код, манипулирующий этими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования.
Зацепление – это степень глубины связей между отдельными модулями, классами и объектами. Систему с сильной зависимостью между модулями гораздо сложнее воспринимать и модифицировать. Сложность системы может быть уменьшена путем уменьшения зацепления между отдельными модулями. Существует определенное противоречие между явлениями зацепления и наследования. С одной стороны, желательно избегать сильного зацепления классов; с другой стороны, механизм наследования, тесно связывающий подклассы с суперклассами, помогает выгодно использовать сходство абстракций.
Связность – это степень взаимодействия между элементами отдельного модуля, класса или объекта, характеристика его насыщенности. Наименее желательной является связность по случайному принципу, когда в одном классе или модуле собираются совершенно независимые абстракции. Наиболее желательной является функциональная связность, при которой все элементы класса или модуля тесно взаимодействуют в достижении определенной цели.