S: jedna odpowiedzialność na klasę (jeden powód zmiany); O: rozszerzaj zachowanie bez modyfikacji istniejącego kodu; L: podtyp ma dotrzymać kontraktu typu bazowego; I: małe, wyspecjalizowane interfejsy; D: zależ od abstrakcji, nie od konkretów (DI).