I just stumbled upon this:

Announcer subclass: #TxEditor
        ....

This is just plain wrong, as wrong as:

Shampoo subclass: #Shower

because every time you treat inheritance as something else as
_specialization_ you doing it wrong.
Inheritance is not about importing needed functionality, it should be
about specialization and only about it:
 - a superclass provides generic functionality, while subclasses
providing more and more specialized forms of it.

Because if we don't follow that, then it is really hard to see and
follow a structure in design.. it is just random.

And here's why:

so since shower uses shampoo, as we concluded, then why not including
it via inheritance:

Shampoo subclass: #Shower

but then, Shower also uses Soap, so maybe it should be like that:

Soap subclass: #Shower

so, which superclass you prefer most? And how do you pick/prioritize
which element should be a superclass of Shower?

To solve this dilemma, i think we will need multiple inheritance:

(Shampoo, Soap) subclass: #Shower

but thankfully, we don't have it in classic smalltalk model :)

So, then maybe it should be something like that:

Object subclass: #Shower
instanceVariableNames: 'soap shampoo'
...

Anyways, despite the obvious abuses, i'd like to ask community, in
what cases , you think (ab)using inheritance in a way
like above is justified?
Because maybe it is i, who doing it wrong?


--
Best regards,
Igor Stasenko.

Reply via email to