我是 Pharo 的新手,我无法掌握一些概念,特别是subclassResponsibilty
.
我有以下对象树:
AbstractDictionary
--TreeBasedDictionary (not abstract)
--AbstractArrayDictionary
----SimpleDictionary (not abstract)
----FastDictionary (not abstract)
所有 3 都实现了操作at:put:
和at:
(以及更多)。我今天从课堂上了解到,我可以通过以下实现at:put:
来实现:AbstractDictionary
at: thisKey put: thisValue
"insert new key / value pair"
^self
at: thisKey
put: thisValue
duplicate: [self error:'duplicate key']
然后我在中实现了一个方法at:put:duplicate:
(TreeBasedDictionary and AbstractArrayDictionary
因为后者的子类的实现是相同的)。然后,当我调用at:put:
一个对象时,它不会在任何一个实例中找到它,TreeBasedDictionary , SimpleDictionary or FastDictionary
但是当查找树时,它会在超类(AbstractDictionary)中找到这个方法。这将调用 self at:put:duplicate:
。该方法由前面提到的 3 个类实现,然后将指向进行初始调用的类的实例的 self 发送消息执行at:put:duplicate:
。
现在,AbstractArrayDictionary,SimpleDictionary and FastDictionary
所有人都有一个名为size
. 继承树底部的两个类都实现了这个方法。AbstractArrayDictionary
实现这个方法如下
size
"dictionary size"
self subclassResponsibility
假设我为我的 实现了这个方法TreeBasedDictionary
,我想我应该在我的类中实现 size 方法,AbstractDictionary
如上所示。
我的问题:为什么我需要这样做,而不是这样:
size
"dictionary size"
^self size
如果是这样,我是否要删除该方法AbstractArrayDictionary
,为什么?