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

Поскольку default_create всегда является примером метода создания, который можно использовать для создания экземпляра как create some_instance, если я не хочу разрешить потомкам класса использовать его в качестве метода создания, есть ли способ сделать это?

A

deferred class A
feature
   make (a_db_connection: DB_CONNECTION)
      do
          default_create
          db_connection := a_db_connection
      end

B

class B
inherit
    A
create
    make
    -- default_create -- I'd be able to do that and want to avoid it

1 Ответ

0 голосов
/ 30 октября 2018

Как только процедура не указана как созданная, ее нельзя использовать для создания объекта. В исходном примере экземпляр класса 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. Непустое условие создания: для создания могут использоваться только перечисленные процедуры.
...