【问题标题】:Eiffel: is there a way to prohibit the use of any particularly inherited creation method?Eiffel:有没有办法禁止使用任何特别继承的创建方法?
【发布时间】:2018-10-30 14:43:23
【问题描述】:

由于default_create 始终是创建方法的示例,如果我不想让类的后代将其用作创建方法,则可以将其用作create some_instance 的实例创建方法有没有办法这样做?

一个

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

【问题讨论】:

    标签: inheritance createprocess eiffel


    【解决方案1】:

    只要一个过程未被列为创建过程,它就不能用于创建对象。在原始示例中,可以使用make 创建类B 的实例,但不能使用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. 非空创建子句:只能使用列出的过程进行创建。

    【讨论】:

    • Thx,我想指出的是,如果 A 类想要忘记 default_create 过程并避免使用它,您可以通过 {NONE} 导出限制它作为客户端的使用,但不能避免将其用作任何后代的创建方法?我这样清楚吗?我不希望任何后代能够使用 default_create 作为创建过程是可能的,还是后代继承其父母@“任何”意思的行为的想法的一部分?
    • @Pipo 在 Eiffel 中没有“私有”方法、字段等概念。父母的所有功能都由孩子继承并且可以使用。
    • 我想,和我们一样,我们必须处理继承的行为 ;-)
    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 2022-11-09
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多