Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_OOP.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
302.59 Кб
Скачать

28 Сравнение иерархий агрегации (is part of) и наследования (is kind of):

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

Двумя важными инструментами иерархической организации в объектно-ориентированных системах являются:

q       структура из классов («is -иерархия);

q       структура из объектов («part of»-иерархия).

Чаще всего «is а»-иерархическая структура строится с помощью наследования. Наследование определяет отношение между классами, где класс разделяет структуру или поведение, определенные в одном другом (единичное наследование) или в нескольких других (множественное наследование) классах.

Другая разновидность иерархической организации — «part of»-иерархическая структура — базируется на отношении агрегации. Агрегация не является понятием, уникальным для объектно-ориентированных систем. Например, любой язык программирования, разрешающий структуры типа «запись», поддерживает агрегацию. И все же агрегация особенно полезна в сочетании с наследованием:

1)      агрегация обеспечивает физическую группировку логически связанной структуры;

2)      наследование позволяет легко и многократно использовать эти общие группы в других абстракциях.

Интересно сравнить элементы иерархий наследования и агрегации с точки зрения уровня сложности. При наследовании нижний элемент иерархии (подкласс) имеет больший уровень сложности (большие возможности), при агрегации — наоборот (агрегат ИзмерительСУ обладает большими возможностями, чем его элементы — датчики и процедура настройки).

Отношения агрегации между классами аналогичны отношениям агрегации между объектами.

29 Делегирование методов (функциональный подход) и паттерн проектирования «Шаблонный метод»:

  • Основан на создании указателей (делегатов) на функции (методы)

Делегирование - это способ заимствования методов у объектов других классов. Оно представляет собой альтернативу переопределения методов используемых полиморфными объектами. В отличие от переопределения делегирование позволяет определить различное поведение объектов, принадлежащих одному классу. Причем заимствование методов возможно как в пределах класса, так и у объектов классов других иерархий.  Метод при этом вызывается косвенно через указатель на него. Язык, в котором возможна реализация делегирования должен обеспечивать возможность определения указателей на методы. Следует различать статическое и динамическое делегирование. При статическом делегировании соответствующий указатель инициализируется при компиляции программы и при выполнении не меняется. При динамическом делегировании значение указателю присваивается в процессе выполнения программы и может изменяться в зависимости от ситуации. Статическое делегирование используется в двух случаях. 1.если требуемое поведение объекта уже описано для объектов другого класса. Делегирование позволяет избавиться от повторов в программе. 2.Если класс определяется не с полностью определенным поведением объектов (библиотечные классы) и его поведение уточняется для конкретных экземпляров объектов. Динамическое делегирование используется при создании объектов с изменяемым поведением. Когда конкретный вариант поведения определяется внешними обстоятельствами. 

В Делфи указатели на методы описываются так же, как процедурные типы. Единственным отличием является указание ключевых слов of object после списка формальных параметров:

type

TMyMethod = procedure (Sender : Object) of object;

Шаблонный метод (Template method) — паттерн поведения классов, шаблон проектирования, определяющий основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]