Отношение между объектами: использование, включение.



Типы отношений

Отношения двух любых объектов основываются на предположениях, которыми один обладает относительно другого: об операциях, которые можно выполнять, и об ожидаемом поведении. Особый интерес для объектно-ориентированного анализа и проектирования представляют два типа иерархических соотношений объектов:

· связи (отношение использования);

· агрегация (отношение включения);

Связи

Связь – физическое или концептуальное соединение между объектами.

Связь - это специфическое сопоставление, через которое клиент запрашивает услугу у объекта-сервера или через которое один объект находит путь к другому.

Связи обозначаются линиями и означают пути прохождения сообщений. Сами сообщения отображаются стрелками с пометкой имени операции.

Связь между объектами и передача сообщений обычно односторонняя (хотя технически она может быть и взаимной). Подобное разделение прав и обязанностей типично для хорошо структурированных объектных систем.

Участвуя в связи, объект может выполнять одну из следующих трех ролей:

Актер. Объект может воздействовать на другие объекты, но сам никогда не подвергается воздействию других объектов; в определенном смысле это соответствует понятию активный объект.

Сервер. Объект может только подвергаться воздействию со стороны других объектов, но он никогда не выступает в роли воздействующего объекта.

Агент. Такой объект может выступать как в активной, так и в пассивной роли; как правило, объект-агент создается для выполнения операций в интересах какого-либо объекта-актера или агента.

Агрегация (включение)

Агрегация описывает отношения целого и части, приводящие к соответствующей иерархии объектов, причем, идя от целого (агрегата), мы можем придти к его частям (атрибутам), но не наоборот (нельзя найти агрегирующий объект (контейнер), если только сведения о нем не являются случайно частью состояния агрегируемого объекта.).

Объект, являющийся атрибутом другого объекта (агрегата), имеет связь со своим агрегатом. Через эту связь агрегат может посылать ему сообщения. 

Агрегация может означать физическое вхождение одного объекта в другой, но не обязательно.

Выбирая одно из двух - связь или агрегацию - надо иметь в виду следующее. Агрегация иногда предпочтительнее, поскольку позволяет скрыть части в целом. Иногда наоборот предпочтительнее связи, поскольку они слабее и менее ограничительны.

 

Отношение простого наследования классов.

Класс – это описание структуры и поведения объектов, имеющих одинаковые свойства, поведение и семантику.

Наследование – отношение при котором один класс разделяет структуру и поведение другого класса. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.

Отношение наследования классов - это особый механизм в ООП, который позволяется выполнять конкретизацию свойств объектов сверху вниз. То есть производить определение от более общего к более конкретному. По сути, это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. На практике отношение наследования часто дает еще некоторые преимущества, такие как устранение дублирования кода.

Простое наследование используется, когда существует одно отношение «родитель-потомок». То есть один потомок наследуется от одного родителя.

Принцип подстановки: экземпляр класса, порожденного от некоторого класса X, может использоваться без нарушения семантики объявления X везде, где используется экземпляр класса X.

Различие понятий класс и тип: класс описывает структуру объектов, тип описывает протокол объектов. Класс может соответствовать нескольким типам (реализовать различные интерфейсы). Различные классы могут иметь один и тот же тип (реализовать один и тот же интерфейс).

Что происходит в порожденном классе:

- Поля данных и методы– члены классанаследуются от базового класса.Можно считать, что они описаны в порожденном классе. Однако, возможность доступа к ним из методов производного класса и извне этого класса определяется спецификатором доступа (private, protected, public) к членам в базовом классе и спецификатором доступа к базовому классу, задаваемому при описании производного класса.

- В производном классе можно добавлять свои поля – члены класса.

- В производном классе можно добавлять свои методы – члены класса.

- В производном классе можно переопределять методыбазового класса (сохраняя точное совпадение с исходным прототипом, то есть количество и типы аргументов и возвращаемый тип). Исключение: если возвращаемый тип является указателем или ссылкой на базовый класс, он может быть заменен указателем или ссылкой на порождаемый класс.

- Если Вы в производном классе переопределили метод, доступиз него к родительскому методуможно получить, используя оператор ::

- Если в классе-наследнике имя метода и его прототип совпадают с именем метода базового класса, то метод производного класса скрываетметод базового класса.

- Статические полянаследуются. Все потомки разделяют единственную копию статического поля. Статические методынаследуются.

- Ограничений в наследовании вложенных классов нет: внешний класс может наследовать от вложенного и наоборот.

 


Дата добавления: 2018-06-01; просмотров: 443; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!