On 22 July 2013 16:52, Florin Mateoc <fmat...@gmail.com> wrote: > Forget about quaternions! Are you really saying: specialization good, > generalization bad?!!! Well, at least in this case, your generalization is > indeed a bad one :) > > Generalization and specialization are duals of each other. We can do stupid > specializations just as easily as we can do stupid generalizations. Let's > take you example. Postman subclass: > PostmanWhoAlsoDeliversPizzasAndFliesToTheMoon is a specialization, not a > generalization. How is it any better? > > uh? Generalization is good. but you don't achieving it by subclassing. And that's exactly what i was pointing out: subclassing is intended for specialization, but not for generalization. And when you subclass for generalization you doing exactly what i am against.
> > > On Mon, Jul 22, 2013 at 10:38 AM, Igor Stasenko <siguc...@gmail.com> wrote: >> >> On 22 July 2013 16:23, Nicolas Cellier >> <nicolas.cellier.aka.n...@gmail.com> wrote: >> > Because the quaternion (ar + ai * i + 0 * j + 0 * k) will behave exactly >> > like a complex (ar + ai * i) with respect to arithmetic (+ - * /) and >> > elementary functions (exp sin cos etc...). >> > >> all i know is that >> >> i*i = -1 >> >> that's what makes complex numbers quite different from other >> n-dimensional vector(s). >> and i never seen that you can mix complex algebra and linear algebra.. >> hence, i can imagine that you can subclass both from some abstract >> NDimensionalVector >> but not subclass one from another, because it makes no sense. >> >> >> > >> > 2013/7/22 Igor Stasenko <siguc...@gmail.com> >> >> >> >> 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. >> >> >> > >> >> >> >> -- >> Best regards, >> Igor Stasenko. >> > -- Best regards, Igor Stasenko.