insbesondere: nicht offensichtliche Abstraktionen
unterscheide zwischen Klasse (konkreter Typ) und Typ (abstrakter Typ).
programmiere auf eine Schnittstelle hin, nicht auf eine Implementierung!
ziehe Objektkomposition der Klassenvererbung vor