- •Типы отношений между объектами. Интерфейс и реализация класса. Наследование. Простой полиморфизм. Сложный полиморфизм. Композиция. Наполнение.
- •2. Если объект является результатом декомпозиции более сложного объекта, то говорят, что между этими объектами существует отношение включения - первый объект включает второй (иерархия целое/часть).
- •Простой полиморфизм.
- •2) При работе с указателями, когда указателю на объект класса-родителя присваивается адрес объекта класса-потомка.
- •Композиция.
- •Пример Композиции (класс Сообщение )
- •Конец описания.
- •Наполнение
- •Делегирование методов.
операция проверки принадлежности объекта заданному классу или его потомкам;
операция уточнения класса объекта - отличается от операции явного переопределения типа тем, что перед переопределением определяется, принадлежит ли объект данному классу или его потомкам;
специальные операции определения, модификации или проверки свойств класса (как типа) - для реализации этих операций язык программирования должен предоставлять возможность описания полей и методов класса, обращение к которым возможно при отсутствии объектов класса.
Делегирование методов.
Делегирование - способ заимствования методов у объектов других классов. Оно представляет собой альтернативу переопределению методов, используемому полиморфными объектами. В отличие от переопределения, делегирование позволяет определять различное поведение объектов, принадлежащих одному классу. Заимствование методов возможно как в пределах класса или иерархии классов, так и у объектов классов других иерархий.
Метод при этом вызывается косвенно, через указатель на него. Язык, в котором возможна реализация делегирования, должен обеспечивать возможность определения указателей на методы. Назначение или замена метода осуществляется присваиванием соответственного значения специальному указателю (рис. 19).
Рис. 19. Делегирование метода
Следует различать статическое и динамическое делегирование. При статическом делегировании соответствующий указатель инициализируется в процессе компиляции программы и при выполнении программы не меняется. При динамическом делегировании значение указателю присваивается в процессе выполнения программы и может изменяться в зависимости от ситуации.
Статическое делегирование используется в двух случаях:
если требуемое поведение объекта уже описывалось для объектов другого класса - в этом случае делегирование позволяет избавиться от повторов в программе;
В C++ в аналогичных случаях возможно использование множественного наследования, но оно может оказаться неэффективным, поскольку вместе с желаемым поведением придется унаследовать и все остальные элементы класса.
2. если класс объявлен с не полностью определенным поведением объектов (обычно так описываются некоторые библиотечные классы) и его поведение уточняется для конкретных экземпляров объектов.
Динамическое делегирование используется при создании объектов с изменяемым поведением, когда конкретный вариант поведения определяется некоторыми внешними обстоятельствами.
