Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I completely agree with your point. The way inheritance is always taught is through the "is-a" rule of thumb and I think that's so detrimental to the students that they'd be better off if they didn't know inheritance existed. The phrase "X is-a Y" often appears to make sense because of the real world (e.g. "Cat is-an Animal"), but it makes people forget that it may not make sense in the world they are trying to model. It may be that the relationship between a Cat object and an Animal object is completely different in your system than in the real world. If it is, then you run into the problems with future changes you already mentioned.

I also second your point on code reuse. Code reuse/removal of duplication is the main reason behind all programming languages and paradigms. Inheritance is a tool provided by OOP languages. Therefore, to say that it enables code reuse is basically trivial.



I have discovered a truly marvellous follow-up to your comment, which this box is too small to contain.

http://github.com/raganwald/homoiconic/blob/master/2010/12/o...


Yes, absolutely. Thinking about design in terms of defining an ontology is a great insight. Every object has a name and is therefore a part of some sort of semantics. However, what it does (it's meaning) is up to the designer. Therefore, words are naturally overloaded - they represent what we they do in reality, and their analog in our system.

As an example, let's assume we're developing a game where cats battle all sorts of other animals for survival. Certainly, the designer has good reason to call the object representing the protagonists in the game Cat. The programmer also has good reasons to call the enemies of the cat Animals, since they will all do the same thing (e.g. attack the cat). However, in this case a Cat is definitely not an Animal. Cat is an overloaded word - it no longer means "feline". Similarly, Animal means something completely different - it's more akin to "enemy". If we could substitute the "natural" ontology of these words with the one our objects define, we would be able to tell that the statement "A Cat is an Animal" is senseless.

I think OOP actually tries to take advantage of the "natural" ontologies we have constructed through experience. This is why this is such a subtle design issue. I'm not quite ready to say it "gets it backwards", but it certainly doesn't mirror the way we naturally look at the world.

I hope I'm mirroring and expanding on what's been said here. I'd love to read your thoughts.


Just FYI, you can resize the box. Drag the little icon in the bottom right-hand corner.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: