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? 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. > >