Přístup k údajům vždy v rámci třídy zapouzdřete a poskytněte metody, pomocí nichž lze dané údaje získat.
Svá rozhraní navrhujte tak, aby je bylo možné později rozšířit.
V metodách tříd nezapouzdřujte jen údaje, ale také algoritmy, díky čemuž budou komplexní operace implementované centrálně na jednom místě.
Znovupoužitelnost kódu je lepší než duplicitní kód.
Vyvarujte se monolitickým strukturám a rozložte je na co nejmenší části, které mohou být implementované nezávisle na sobě. Pokud používáte rozsáhlé příkazy if/elseif/else nebo switch, popřemýšlejte, zda by se nedaly nahradit zaměnitelnými třídami.
Dědění vede k neflexibilním strukturám. Na kombinaci různých funkcí používejte raději kompozice objektů.
Vždy programujte vůči rozhraní, a nikdy ne vůči konkrétní implementaci.
Vyhýbejte se těsným závislostem mezi jednotlivými třídami aplikace a vždy upřednostnujte volné vazby tříd.