D - more power than (really) needed !

Don Clugston dac at nospam.com.au
Mon Mar 13 00:49:09 PST 2006


Hasan Aljudy wrote:
> David Medlock wrote:
> <snip>
>> see:
>> http://okmij.org/ftp/Computation/Subtyping/#Problem
>>
>> -DavidM
> 
> A nice example of not understanding OOP :)
> 
> WOW .. I think I'm beginning to understand what Schock means when he 
> says everyone out there thinks they are doing object oriented 
> programming, but only very few of them really are.
> 
> There's no "book" that you can follow literally to produce good code. 
> It's a matter of trial and error. You try to subclass CSet from CBag, 
> and disvocer that it doesn't work, or produce more problem than it 
> solves, then don't whine about it, just implement CSet differently. It's 
> not OOP's fault, nor is it inheritance's fault.

I disagree, I think this is absolutely OOP's fault. 'Trial and error' 
seems to be a fundamental feature of OOP. If you use OOP, you are 
committing yourself to continually restructuring your code. (OOP is the 
worst thing that ever happenned to code reuse!)

> If you try to open a door with a screw-driver and it doesn't work, 
> should you blame the screw-driver, or blame yourself for not 
> understanding how doors work?
> 
> Apparently subclassing CSet from CBag wasn't such a good idea. Don't 
> blame the object oriented paradigm for it. No where in the paradigm does 
> it say that you should sublcass CSet from CBag!

And this is the problem. It gives no guidance for when you should use 
subclassing. That turns out to be a fantastically difficult problem, and 
OOP just glossed over it.

Fundamentally, I think the fatal flaw in OOP is that "is-a" 
relationships do not exist. (Well, _maybe_ for abstract geometrical 
shapes, but definitely not for anything useful). The text book examples 
are wrong: a 'Manager' is NOT a type of 'Employee'. An 'Employee' is NOT 
a type of 'Person'. Actually, 'Object' works as a base class, because 
every object really IS-A block of bytes in RAM, some of which are 
organised into a virtual function table. But note that it's not some 
kind of abstract Platonic entity. It's a bunch of transistors.

In OOP, you spend your time trying to find Is-A relationships, but they 
don't exist. Unsurprisingly, hardly anyone is "really" doing OOP. It 
seems to be unimplementable.



More information about the Digitalmars-d mailing list