How to write an object oriented program that doesn’t suck