Eiffel:Creator指令应用于延迟类型的目标 甲级 B类

Eiffel:Creator指令应用于延迟类型的目标 甲级 B类,eiffel,Eiffel,我想在同一个类中创建一个属性,该属性将在子类中定义,并获得一个创建者指令,该指令应用于延迟类型的目标错误,该错误以减少上下文的方式产生意义,但不是在我希望它这样做的上下文中 对我来说,能够在当前延迟类中创建对象是有意义的,我不必在所有子类中实现它!这将是一个错误的设计。。。大概是这样的: deferred Class A feature -- item: X -- X is deferred set_item_for_some_reason (param: N)

我想在同一个类中创建一个属性,该属性将在子类中定义,并获得一个
创建者指令,该指令应用于延迟类型的目标
错误,该错误以减少上下文的方式产生意义,但不是在我希望它这样做的上下文中

对我来说,能够在当前延迟类中创建对象是有意义的,我不必在所有子类中实现它!这将是一个错误的设计。。。大概是这样的:

deferred Class A

feature -- 

    item: X -- X is deferred

    set_item_for_some_reason (param: N)
        do
            set_item_from_param (param)
        end

    set_item_from_param (param: N)
        deferred
        end

end -- class


Class B inherit

    A

feature -- 

    item: Y -- Y not deferred


    set_item_from_param(param: N)
        do
            create item.make_from_param (param)
        end

end -- class

我的设计有错吗?或者这是一个限制,关于埃菲尔编译器的讨论还在继续?如果是,最佳实践解决方案是什么?

一个可能的解决方案是使用泛型类。在类
A
中,形式泛型参数具有创建约束,即对应的实际泛型参数应具有特定的创建过程:

class A [G -> X create make_from_param end] feature
    item: detachable G
    set_item_for_some_reason (param: N)
        do
            create item.make_from_param (param)
        end
end
class B inherit
    A [Y]
end
子类可以指定具有以下创建过程的实际泛型:

class A [G -> X create make_from_param end] feature
    item: detachable G
    set_item_for_some_reason (param: N)
        do
            create item.make_from_param (param)
        end
end
class B inherit
    A [Y]
end
为了确保我们在同一页上,这里是类的代码
X
Y

deferred class X feature
    make_from_param (param: N)
        deferred
        end
end

class Y inherit
    X
create
    make_from_param
feature
    make_from_param (param: N)
        do
        end
end
您可以添加任意数量的子体。主要限制是,每当使用class
A
时,其实际泛型参数应具有指定的特性作为创建特性。例如,可以声明类型
a[Y]
。但是
A[X]
会触发错误

如果在子体中,
的类型还不应该固定,则可以传播它,在形式泛型上重复约束:

class C [G -> X create make_from_param end] inherit
    A [G]
end

你是老板!当我可以使用继承时,我倾向于不使用泛型,但你是对的,我必须回顾我的泛型理论和应用案例。。。我希望更多地在语言上使用它,作为实现有更多的限制,没有多态性作为解决办法。。。