Книга: Основы объектно-ориентированного программирования
Проблема
Проблема
Рассмотрим пример стека, но уже не как АТД, а как класс. Мы знаем, как написать класс INTEGER_STACK, задающий стек объектов типа INTEGER. Компоненты будут включать count (число элементов), put (вталкивание элемента), item (элемент в вершине), remove (выталкивание элемента), empty (пустой ли стек?).
Тип INTEGER будет часто использоваться в объявлениях этого класса. Например, это тип аргумента для put и результата для item:
put (element: INTEGER) is
-- Втолкнуть элемент (в вершину стека).
do ... end
item: INTEGER is
-- Элемент в вершине стека
do ... end
Эти появления типа INTEGER следуют из правила явного объявления, используемого при разработке нотации: всякий раз при введении сущности, обозначающей возможные объекты времени выполнения, необходимо явное указание ее типа, такое как element: INTEGER. Здесь это означает, что необходимо указать тип для запроса item, для аргумента element процедуры put и для других сущностей, обозначающих возможные элементы стека.
Как следствие, придется писать различные классы для каждого сорта стека: INTEGER_STACK, REAL_STACK, POINT_STACK, BOOK_STACK... Все эти стековые классы будут одинаковыми за исключением объявления типов item, element и некоторых других сущностей. Основные операции над стеком не зависят от типа элементов стека и реализуются одинаково. Для всех, заинтересованных в повторном использовании, такое дублирование классов представляется мало привлекательным.
Проблема возникает из-за противоречия двух основных требований, предъявляемых к классам и сформулированных в начале этой книги.
[x]. Надежность: сохранение преимуществ безопасности типов с помощью явного объявления типа.
[x]. Повторное использование: возможность написать один программный элемент, покрывающий многие варианты одного понятия.
- 9.1. Проблема синтаксического анализа
- Проблема с измерениями в секторе B2B
- Я переписал ISO-образ загрузочного диска на CD-RW и выставил в BIOS загрузку с CD-ROM. Но при перезапуске компьютера нач...
- Проблема с переключением языков. Значок есть, но не работает. Если через Панель управления удалить все языки и тут же сн...
- «В какую сумму эта проблема обходится вам или вашей компании?»
- Проблема с загрузкой системы
- 5.1.8. Проблема выбора
- 3.3.1. Основная проблема юристов
- Проблема четвертая – отсутствие развития
- Проблема пятая – кустарничество
- 15.3. Проблема стартовой страницы
- Часть 1.Проблема