una singola causa (responsabilità). Ogni nuova responsabilità è una nuova potenziale causa di cambiamento. Un cambiamento può danneggiare o inficiare le altre responsabilità.
aperto/chiuso Ereditarità dell’implementazione class Rectangle: public Shape { public: int getArea() { return (width * height); } }; Classe base (o superclasse) Estensione Estensione
Classe astratta (o interfaccia) Implementazione Implementazione class Shape { public: int width; int height; virtual int getArea() = 0; }; class Rectangle: public Shape { public: int getArea() { return (width * height); } };
eat() = 0; }; class Worker: public IWorker { void work() { // ... } void eat() { // ... } }; Principio di segregazione delle interfacce class Manager { void manage(IWorker *w) { worker->work(); } }; Manager non usa il metodo eat() di IWorker.
non devono dipendere da quelli di basso livello. Entrambi devono dipendere da astrazioni. Le astrazioni non devono dipendere dai dettagli; sono i dettagli che dipendono dalle astrazioni.