I would agree, along with most object-oriented designers (I hope), that Java's use of inheritance between the Vector and Stack classes is Bad. It's a perfect example of when *not* to use inheritance: a Stack IS NOT a Vector, since there are Vector operations which are not appropriate to the Stack.
However, again, just because inheritance can be abused doesn't mean that it's wrong in all instances. Just about any aspect of any programming language is open for abuse by inexperienced programmers. Experienced programmers learn the pitfalls and move on. We learn that inheritance should be used only when absolutely necessary, and when the problem domain calls for it, and we learn that the inheritance hierarchy should be shallow and wide, not narrow and deep.
It's also not clear to me how exactly limbo is "OO in the deeper sense" without inheritance. The fact is that there are inheritance ("is-a") relationships in most problem domains, and if your language can't model this, then the language can't be OO in *any* sense, deep or shallow.
Well, yes, inheritance when misused, or overused, is a Bad Thing. However, the solution to this is NOT to remove inheritance (can you say, "throwing the baby out with the bathwater"?).
Inheritance is a powerful tool that can actually increase code readability and maintainability if used correctly. Consider how you would implement an "is-a" relationship in the problem domain with a language that doesn't have inheritance...
I guess the big question is: Do you want a language which prevents you from doing something in all instances simply because *sometimes* doing that thing is the wrong thing? If that were the case, we should rid ourselves of gotos as well.
The fact is, poor developers can write bad code in *any* language.
Uhh, this is hardly a reasonable response. Microsoft's intention was to make their VM not interoperable, which is why Sun sued them.
Just a tad ingenuous.
I would agree, along with most object-oriented designers (I hope), that Java's use of inheritance between the Vector and Stack classes is Bad. It's a perfect example of when *not* to use inheritance: a Stack IS NOT a Vector, since there are Vector operations which are not appropriate to the Stack.
However, again, just because inheritance can be abused doesn't mean that it's wrong in all instances. Just about any aspect of any programming language is open for abuse by inexperienced programmers. Experienced programmers learn the pitfalls and move on. We learn that inheritance should be used only when absolutely necessary, and when the problem domain calls for it, and we learn that the inheritance hierarchy should be shallow and wide, not narrow and deep.
It's also not clear to me how exactly limbo is "OO in the deeper sense" without inheritance. The fact is that there are inheritance ("is-a") relationships in most problem domains, and if your language can't model this, then the language can't be OO in *any* sense, deep or shallow.
Well, yes, inheritance when misused, or overused, is a Bad Thing. However, the solution to this is NOT to remove inheritance (can you say, "throwing the baby out with the bathwater"?).
Inheritance is a powerful tool that can actually increase code readability and maintainability if used correctly. Consider how you would implement an "is-a" relationship in the problem domain with a language that doesn't have inheritance...
I guess the big question is: Do you want a language which prevents you from doing something in all instances simply because *sometimes* doing that thing is the wrong thing? If that were the case, we should rid ourselves of gotos as well.
The fact is, poor developers can write bad code in *any* language.