是否有可能在Pharo Smalltalk中实现一个非纯虚拟的抽象方法?

Vit*_*ruz 1 methods inheritance smalltalk pharo

我知道可以通过在具体的方法中调用纯虚方法,使用subclassResponsibility或模板方法来实现纯虚方法.现在,可以创建一个具有默认实现的方法,但必须由子类实现?如果是,如何(在Pharo上)?

示例:假设我想提供一个Collection的子类,它对#add进行一些验证,但是没有实现存储,因此留给它的子类来决定做什么.虽然#add确实有一些实现,但它仍然是完成它的子类责任.

Uko*_*Uko 6

首先,Smalltalk中没有"抽象方法"这样的东西.关键的想法是,如果你运行该方法,它会发送subclassResponsibilityself,所以该类告诉你,如果你试图运行它,这个方法实际上是子类的责任.当然IDE可以subclassResponsibility将方法标记为"抽象".

所以我建议你去模板,即

add: aThing
  (self validate: aThing)
    ifTrue: [ self store: aThing ]
    ifFalse: [ "signal error" ]
Run Code Online (Sandbox Code Playgroud)

哪里store:subclassResponsibility