On 22 July 2013 15:13, Florin Mateoc <fmat...@gmail.com> wrote:
> On 7/22/2013 8:44 AM, Igor Stasenko wrote:
>> On 22 July 2013 14:13, Florin Mateoc <fmat...@gmail.com> wrote:
>>> I also liked the debate, so before it closes I want to throw my 2 cents in:
>>>
>>> I don't think this is an issue about inheritance (vs composition), it is one
>>> about multiple inheritance or lack thereof. You may want your object to be
>>> an announcer of events, but almost always you will also want it to be
>>> something else as well. To me this suggests that Announcer should be a
>>> trait, not a class, so in a sense, indeed, you would "compose" your classes
>>> using it, but you would use trait composition instead of class composition.
>>> In VisualAge there is a huge hierarchy underneath AbtObservableObject. Sure,
>>> there are many classes that want to participate in an observable pattern,
>>> but you should not be forced to inherit from a particular class in order to
>>> do that, so that is just another related example that would have benefited
>>> from traits.
>>>
>> Again, announcer of events means event source role.
>> It is distinct from 'delivery service' role.
>>
>> When you write mail, you just drop it into mailbox, and then mr.
>> Postman delivers it to receiver,
>> but not directly yourself.
>> That's what you get from specialization.
>> But if you wanna play as mr. Postman, and also will deliver pizzas,
>> and fly to the moon,
>> this is called generalization, and straightly opposite to specialization.
>>
>>
>
> So what? The thing is, you want to do both. We think in both directions. 
> Sometimes we generalize from the existing
> knowledge, sometimes we specialize from the abstract.

I say you what. If you go to extreme, then your object can do
everything.. and so you end up with code like this everywhere:

self foo: self bar with: self zork.

Because your object knows everything, can do everything and don't
needs anything.
The only question which remains is why you using object-oriented language then?
Why using classes, caring about inheritance, polymorphism , message
passing etc, because
if single object does all you need, you don't need all of above.

My point is that if you don't need such concepts, just don't use
them.. but if you using them,
then please follow the rules.

Same goes to Announcer. It defines the certain way how it should be
used. And how its not.

> A quaternion is a generalization in 4 dimensions, we did not get complex 
> numbers by specializing from quaternions, it
> was the other way around.
>

hmm? how that? i first time hear that they are related.
Can you provide a real example where you can mix both of them interchangeably?
Besides the fact that they both are partial case of n-dimentional
vectors, they not sharing too much,
because of different math and different uses.

But anyways.. it seems like Announcement(s) model, to my thinking
don't really fits well with
observer pattern.
Because in observer pattern you need only 2 roles: observer(s) and subject.
You don't have nor need a mediator or 'event dispatcher', which
represented by announcer.

Implementing an observer pattern using Announcer is an overkill, to my thinking.
Reflecting by your example, is like using quaternions where complex
numbers is sufficient.

I think more and more, in this regard, that Announcements is not a
silver bullet and it has own limits
and intended ways to use.
For that matter, i think we should have more simple and elegant solution.
Because subclassing from Announcer is not a solution.


-- 
Best regards,
Igor Stasenko.

Reply via email to