Книга: Основы объектно-ориентированного программирования
Горизонтальное и вертикальное обобщение типа
Горизонтальное и вертикальное обобщение типа
Рис. 10.1. Размерности обобщения
Уже изученные механизмы позволяют написать класс, помещенный в центр рисунка - LIST_OF_BOOKS, экземпляр которого представляет список книг. У класса следующие компоненты: put для вставки элемента, remove для удаления элемента, count для подсчета числа элементов и т.д. Очевидны два пути обобщения понятия LIST_OF_BOOKS.
[x]. Списки являются специальным видом структур, представляющих контейнеры. Из многих других примеров контейнеров отметим деревья, стеки и массивы. В сравнение со списком LIST_OF_BOOKS, более абстрактным вариантом контейнера является класс SET_OF_BOOKS (множество книг). Более специализированным вариантом является класс LINKED_LIST_OF_BOOKS, определяющий связный список книг - специализированный вариант списка. Три класса задают вертикальную размерность на рисунке - размерность наследования.
[x]. Списки книг являются, с другой стороны, специальным случаем списков объектов некоторого вида. Из многих других видов отметим списки журналов, списки людей, списки целых чисел. Это горизонтальная размерность на нашем рисунке - размерность универсализации, тема нашего изучения в последующей части этой лекции. Если задать параметр класса, представляющий произвольный тип, то можно не создавать почти идентичные классы, такие как LIST_OF_BOOKS и LIST_OF_PEOPLE, не жертвуя при этом безопасностью, вносимой статической типизацией.
Отношение между двумя этими механизмами - трудный вопрос для изучающих ОО-концепции. Как рассматривать наследование и параметризацию, как соперников или как соратников, когда целью является построение более гибкого ПО?10.1)
Данная лекция посвящена универсализации, кроме того, мы подробно рассмотрим один из наиболее общих примеров родовых структур: массивы. Заметьте, термины универсальный класс, родовой класс, параметризованный класс являются синонимами. Во всех случаях речь идет о классе с параметрами, задающими некоторый тип (класс).
- Использование CAST() с типами дата
- Перегрузка методов с несколькими параметрами типа
- Создание столбцов и работа с типами содержимого
- Пропуск параметров типа
- 3.2. Ключи типа key_t и функция ftok
- Отношения типа многие-ко-многим
- Отношения типа один-ко-многим
- Эксперименты с числовыми типами данных
- Атаки типа «отказ в обслуживании» (DoS) и «распределенный отказ в обслуживании» (DDoS)
- Отношения типа один-к-одному
- 15.2.1. Объединенные продукты типа Suite
- Подробнее о психологических типах