Объектно-ориентированное программирование



Объектно-ориентированное программирование - стр. 53


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

Использование делегирования операций можно пояснить на следующем примере (рисунок ). Класс стек близок классу список, причем операциям стека push и pop соответствуют очевидные частные случаи операций списка add и remove. Если реализовать класс стек как подкласс класса список, то придется применять вместо операций push и pop более общие операции add и remove, следя за их параметрами, чтобы избежать записи или чтения из середины стека; это неудобно и чревато ошибками. Гораздо лучше объявить класс список телом класса стек (делегирование), обращаясь к операциям списка через операции стека. При этом, не меняя класса список, мы заменяем его интерфейс интерфейсом класса стек.

Рис. 5.16.  Реализация стека с использованием наследования (а)

                               и делегирования (б)

Разработка зависимостей

 

Зависимости - это "клей" объектной модели: именно они позволяют рассматривать модель как нечто целое, а не просто как множество классов.

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

Рис. 5.17. Реализация односторонней зависимости

На следующем рисунке показан способ реализации двусторонней зависимости с помощью указателей.

Рис. 5.18. Реализация двусторонней зависимости

Далее представлен способ реализации зависимости с помощью таблицы (как в реляционных базах данных).

Рис. 5.19. Реализация зависимости с помощью таблицы

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




Содержание  Назад  Вперед