Eiffel:有没有办法禁止使用任何特别继承的创建方法?
Posted
技术标签:
【中文标题】Eiffel:有没有办法禁止使用任何特别继承的创建方法?【英文标题】:Eiffel: is there a way to prohibit the use of any particularly inherited creation method? 【发布时间】: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
【问题讨论】:
【参考方案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
总结:
-
没有创建子句:使用了
default_create
。
空创建子句:无法创建实例。
非空创建子句:只能使用列出的过程进行创建。
【讨论】:
Thx,我想指出的是,如果 A 类想要忘记 default_create 过程并避免使用它,您可以通过 NONE 导出限制它作为客户端的使用,但不能避免将其用作任何后代的创建方法?我这样清楚吗?我不希望任何后代能够使用 default_create 作为创建过程是可能的,还是后代继承其父母@“任何”意思的行为的想法的一部分? @Pipo 在 Eiffel 中没有“私有”方法、字段等概念。父母的所有功能都由孩子继承并且可以使用。 我想,和我们一样,我们必须处理继承的行为 ;-)以上是关于Eiffel:有没有办法禁止使用任何特别继承的创建方法?的主要内容,如果未能解决你的问题,请参考以下文章
Burnikel 和 Ziegler 算法 2 的 Eiffel 实现中的错误