Эйфелева: есть ли способ запретить использование какого-либо особенно унаследованного метода создания?

Как 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

Резюме:

  1. Нет условия создания: default_create используется.
  2. Пустое предложение создания: ни один экземпляр не может быть создан.
  3. Непустое условие создания: для создания могут использоваться только перечисленные процедуры.
Другие вопросы по тегам