Возможность переименования наследуемого компонента небезынтересна и при отсутствии конфликта имен. Она позволяет разработчику класса подбирать подходящие имена для всех компонентов, как описанных в самом классе, так и унаследованных от предков.
Имя, под которым класс наследует компонент предка, может ничего не говорить клиентам класса. Его выбор определялся интересами клиентов предка, в то время как новый класс вписан в новый контекст и представляет иную абстракцию с собственной системой понятий. Смена имен позволяет решить возникающие проблемы, разделяя компоненты и их имена.
Хорошим примером является класс
class WINDOW inherit
TREE [WINDOW]
rename
child as subwindow, is_leaf as is_terminal, root as screen,
arity as child_count, ...
end
RECTANGLE
feature
... Характерные компоненты window ...
end
Аналогично, класс
Играем в имена
Смена имен подчеркивает важность именования - как компонентов, так и классов - в практике ОО- разработки ПО. Формально, класс - это отображение имен компонентов в сами компоненты. Компоненты известны остальному миру благодаря именам.
В последней лекции будет дан ряд правил выбора имен компонентов. Заметим, что предпочтение следует отдавать общеизвестным именам:
Использование родительской процедуры создания
Еще один пример иллюстрирует типичный случай переименования процедуры создания класса. Вспомните класс
make (minb, maxb: INTEGER) is
-- создать массив с границами minb и maxb
-- (пустой если minb > maxb)
do ... end
Для создания стека необходимо создать массив, позволяющий вместить заданное число элементов. Реализация основана на процедуре создания
class ARRAYED_STACK [G] inherit
STACK [G]
redefine change_top end
ARRAY [G]
rename
count as capacity, put as array_put, make as array_make
end
creation
make
feature -- Initialization
make (n: INTEGER) is
-- Создать стек, допускающий размещение n элементов.
require
non_negative_size: n >= 0
do
array_make (1, n)
ensure
capacity_set: capacity = n
empty: count = 0
end
... Другие компоненты ...
invariant
count >= 0; count <= capacity
end
Заметим, что выполнение соглашений об именах - выбор
Плоские структуры
