IWETHEY v. 0.3.0 | TODO
1,095 registered users | 0 active users | 0 LpH | Statistics
Login | Create New User
IWETHEY Banner

Welcome to IWETHEY!

New Not quite that simple
But it depends on the language.

For instance, C++ has private inheritance. This means "is implemented in terms of". For your logging thing privately inheriting loggability into stuff might make sense. Especially since your methods want access to the logging but you don't want clients playing with it.

In a dynamic language - inheritance is primarily used to share code - not so much for isa type stuff. Of course here delegation is simpler to implement. The rigidity of interfaces doesn't really exist - you need only implement as much interface as your client requires. Plus, its trivial to put an object in between and forward the messages to different objects. ie you can do something like

doesNotUnderstand: aMessage

delegates do: [:each | (each respondsTo: aMessage selector) ifTrue: [each perform: aMessage selector withArguments: aMessage arguments]]

and to be complete

respondsTo: aSelector

delegates do: [:each | (each respondsTo: aSelector) ifTrue: [^true]].
^false

This gives you the functional equivalent of multiple inheritance using delegation.

I do notice that I use inheritance much less in the dynamic languages than in the static ones. Inheritance is practically the only tool you have in java. Delegation is a pain to implement if the interface is very large at all because you have to write the forwarding messages all yourself.




Smalltalk is dangerous. It is a drug. My advice to you would be don't try it; it could ruin your life. Once you take the time to learn it (to REALLY learn it) you will see that there is nothing out there (yet) to touch it. Of course, like all drugs, how dangerous it is depends on your character. It may be that once you've got to this stage you'll find it difficult (if not impossible) to "go back" to other languages and, if you are forced to, you might become an embittered character constantly muttering ascerbic comments under your breath. Who knows, you may even have to quit the software industry altogether because nothing else lives up to your new expectations.
--AndyBower
Expand Edited by tuberculosis Aug. 21, 2007, 06:36:01 AM EDT
New Thing I love/hate about smalltalk
doesNotUnderstand: aMessage

delegates do: [:each | (each respondsTo: aMessage selector) ifTrue: [each perform: aMessage selector withArguments: aMessage arguments]]

and to be complete

respondsTo: aSelector

delegates do: [:each | (each respondsTo: aSelector) ifTrue: [^true]].
^false

I can never tell if it's pseudo-code or the real thing.
===

Implicitly condoning stupidity since 2001.
New Similar to Python in that fashion
Regards,

-scott anderson

"Welcome to Rivendell, Mr. Anderson..."
New Its real



Smalltalk is dangerous. It is a drug. My advice to you would be don't try it; it could ruin your life. Once you take the time to learn it (to REALLY learn it) you will see that there is nothing out there (yet) to touch it. Of course, like all drugs, how dangerous it is depends on your character. It may be that once you've got to this stage you'll find it difficult (if not impossible) to "go back" to other languages and, if you are forced to, you might become an embittered character constantly muttering ascerbic comments under your breath. Who knows, you may even have to quit the software industry altogether because nothing else lives up to your new expectations.
--AndyBower
Expand Edited by tuberculosis Aug. 21, 2007, 06:36:13 AM EDT
New Forgot to mention: key driver is "substitutability"
isa implies I can provide one of these when it wants one of those.

ie - if the client expects a car - I can give it a Saturn, or a Chevy (a Ford wouldn't quite do I think :-P )



Smalltalk is dangerous. It is a drug. My advice to you would be don't try it; it could ruin your life. Once you take the time to learn it (to REALLY learn it) you will see that there is nothing out there (yet) to touch it. Of course, like all drugs, how dangerous it is depends on your character. It may be that once you've got to this stage you'll find it difficult (if not impossible) to "go back" to other languages and, if you are forced to, you might become an embittered character constantly muttering ascerbic comments under your breath. Who knows, you may even have to quit the software industry altogether because nothing else lives up to your new expectations.
--AndyBower
Expand Edited by tuberculosis Aug. 21, 2007, 06:36:18 AM EDT
New Techies at Hertz
"I know you wanted a Cadillac, but polymorphism dictates that a Chevy Sprint is perfectly substitutable for one."
________________
oop.ismad.com
New And if your Table or Data Structure is...
...not capable of handling a Cadillac, you're also out of luck.
New Mostly
"I know you wanted a Cadillac, but polymorphism dictates that a Chevy Sprint is perfectly substitutable for one."


Sure, unless the client relies on openNorthStarNavigation - then things will go south fast.
Of course, if the client does not rely on that feature, then the substitution is fine.



Smalltalk is dangerous. It is a drug. My advice to you would be don't try it; it could ruin your life. Once you take the time to learn it (to REALLY learn it) you will see that there is nothing out there (yet) to touch it. Of course, like all drugs, how dangerous it is depends on your character. It may be that once you've got to this stage you'll find it difficult (if not impossible) to "go back" to other languages and, if you are forced to, you might become an embittered character constantly muttering ascerbic comments under your breath. Who knows, you may even have to quit the software industry altogether because nothing else lives up to your new expectations.
--AndyBower
Expand Edited by tuberculosis Aug. 21, 2007, 12:45:06 PM EDT
New Or perhaps that ....
MaxCarCapacity which returns 4 (maybe) for the Sprint and 6 for the Cadillac.

Ask the party of 6 driving 2 hours from Tulsa to Bentonville which object they want...

New Code sharing vs. polymorphism
In a dynamic language - inheritance is primarily used to share code - not so much for isa type stuff. Of course here delegation is simpler to implement. The rigidity of interfaces doesn't really exist - you need only implement as much interface as your client requires...I do notice that I use inheritance much less in the dynamic languages than in the static ones. Inheritance is practically the only tool you have in java. Delegation is a pain to implement if the interface is very large at all because you have to write the forwarding messages all yourself.

I think you hit the nail on the head here. Inheritance should be about code sharing, but in a static language it's also how polymorphism is implemented. That overloading of inheritance makes it more difficult to for a beginner to design classes properly. I think the trick in Java is to stick with interfaces for polymorphism and use inheritance only for code sharing.

Plus, its trivial to put an object in between and forward the messages to different objects. ie you can do something like...

It's interesting how the next big thing in Java is AOP while along you could do the same thing in Smalltalk with "doesNotUnderstand".

Regards,
John
     Why extends is evil? - (johnu) - (44)
         Is this just for Java? - (drewk)
         This argument is needlessly pedantic, IMO - (FuManChu)
         Lesson learned from Smalltalk - (ChrisR) - (1)
             sounds like a will -NT - (deSitter)
         Inheritance is a tool. - (admin) - (7)
             Re: Inheritance is a tool. - (deSitter) - (3)
                 There's more to life than implementation inheritance. - (admin)
                 Definitions - (johnu) - (1)
                     I'd ask Alan Kay - (tuberculosis)
             Thank you, Scott! - (jb4) - (1)
                 Another Me Too - (JimWeirich)
             Good example of bad inheritance, java.util.Stack - (bluke)
         This guy cracks me up - (tuberculosis)
         IS A vs HAS A - (gdaustin) - (30)
             Quite. - (static)
             I missed that course - (drewk) - (18)
                 Shorthand for relationships - (admin) - (17)
                     Re: Shorthand for relationships - (deSitter) - (1)
                         snicker - (FuManChu)
                     ISA/HASA are good for a first approximation - (JimWeirich) - (14)
                         So what does it get you? - (drewk) - (10)
                             Specialization vs. Generalization - (gdaustin)
                             Code - (JimWeirich) - (7)
                                 Thanks, but what would HASA look like? -NT - (drewk) - (6)
                                     HASA - (gdaustin) - (5)
                                         See, that's where I always get tripped up - (drewk) - (4)
                                             There is a point to naming the useless stuff - (ben_tilly) - (3)
                                                 Clarification - (drewk) - (2)
                                                     Yes - (ben_tilly) - (1)
                                                         That's why I shouldn't be a teacher - (drewk)
                             The example of a stack (see post above) is a good one - (bluke)
                         My car is a Saturn - (gdaustin)
                         hierarchies and the real world - (tablizer) - (1)
                             Nonsense - (ChrisR)
             Not quite that simple - (tuberculosis) - (9)
                 Thing I love/hate about smalltalk - (drewk) - (2)
                     Similar to Python in that fashion -NT - (admin)
                     Its real -NT - (tuberculosis)
                 Forgot to mention: key driver is "substitutability" - (tuberculosis) - (4)
                     Techies at Hertz - (tablizer) - (3)
                         And if your Table or Data Structure is... - (ChrisR)
                         Mostly - (tuberculosis) - (1)
                             Or perhaps that .... - (gdaustin)
                 Code sharing vs. polymorphism - (johnu)

Un, deux, trois, quatre.
149 ms