Principio de responsabilidad única : una clase debe tener solo una razón para cambiar.
Principio abierto/cerrado: las entidades de software deben estar abiertas a la extensión, pero cerradas a la modificación.
Principio de sustitución de Liskov : las clases secundarias nunca deben romper las definiciones del tipo de clase principal.
Principio de segregación de interfaces : ningún cliente debe verse obligado a depender de métodos que no utiliza. Se debe minimizar el número de miembros en la interfaz que es visible para la clase dependiente. Las clases grandes implementan múltiples interfaces más pequeñas que agrupan funciones según su uso.
Principio de inversión de dependencia : los módulos de alto nivel no deben depender de los módulos de bajo nivel. Ambos deberían depender de abstracciones. Las abstracciones no deberían depender de los detalles.