Эйфелева: есть ли способ запретить использование какого-либо особенно унаследованного метода создания?
Как default_create
всегда является примером метода создания, который может быть использован для создания экземпляра как create some_instance
если я не хочу позволить потомкам класса использовать его как метод создания, есть ли способ сделать это?
deferred class A
feature
make (a_db_connection: DB_CONNECTION)
do
default_create
db_connection := a_db_connection
end
В
class B
inherit
A
create
make
-- default_create -- I'd be able to do that and want to avoid it
1 ответ
Поскольку процедура не указана как созданная, ее нельзя использовать для создания объекта. В исходном примере экземпляр класса B
может быть создан с использованием make
, но нет default_create
инструкция создания create b
будет помечен как ошибка (при условии, что b
имеет тип B
).
С другой стороны, если нет create
предложение вообще, а класс не откладывается, то процедура default_create
используется для создания объекта. Это может быть запрещено наличием пустого предложения создания:
class C
inherit
A
create -- There are no creation procedures, no instance of the class can be created.
feature
...
end
Резюме:
- Нет условия создания:
default_create
используется. - Пустое предложение создания: ни один экземпляр не может быть создан.
- Непустое условие создания: для создания могут использоваться только перечисленные процедуры.