Метод является абстрактным (в том смысле, в каком его понимают Java или C ++), если он выглядит следующим образом:
myMethod
self subclassResponsibility.
Так что все, что вам нужно сделать, чтобы ответить «это MyObject>>#myMethod
abstract?»это ответить "is MyObject>>#myMethod
отправитель #subclassResponsibility
?"
Вы можете ответить на этот вопрос, добавив этот метод в Object:
isMethodAbstract: aSelector on: aClass
^ (self systemNavigation allCallsOn: #subclassResponsibility)
anySatisfy: [:each | each selector == aSelector
and: [each classSymbol == aClass name]]
илипросто оценивая это в рабочей области (с подходящими заменами для #samplesPerFrame
и SoundCodec
, конечно):
(SystemNavigation default allCallsOn: #subclassResponsibility)
anySatisfy: [:each | each selector == #samplesPerFrame
and: [each classSymbol == SoundCodec name]]