한 클래스는 하나의 책임만 가져야 한다. 클래스는 그 책임을 완전히 캡슐화해야 한다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다.
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.