Spoiler alert: there's no code in this post, and it ends with a link to an IGG campaign.
Here's a bit of code, ranting against the same problems, but coming up with different solutions: http://berniesumption.com/software/inheritance-is-evil-and-m...
Here's a nice quote:
> I once attended a Java user group meeting where James Gosling (Java's inventor) was the featured speaker. During the memorable Q&A session, someone asked him: "If you could do Java over again, what would you change?" "I'd leave out classes," he replied. After the laughter died down, he explained that the real problem wasn't classes per se, but rather implementation inheritance (the extends relationship). Interface inheritance (the implements relationship) is preferable. You should avoid implementation inheritance whenever possible.
Link (with code samples): http://www.javaworld.com/article/2073649/core-java/why-exten...
More ranting: http://sebastiansylvan.com/2010/12/03/implementation-inherit...
Fairly decent list of rants, with some pointed quotes from software development luminaries:
http://harmful.cat-v.org/software/OO_programming/
As for the IGG campaign, yes, I'm selling something. I make a living writing software, and teaching other developers how to write software better.
That has nothing to do with the validity of my arguments, except to underscore the fact that there is plenty of real experience behind the words.
"The way to be a 10x engineer is to teach 5 other developers how to be 2x engineers."