S — Single Responsibility
Una clase debe tener una única responsabilidad
Si una clase tiene muchas responsabilidades, aumenta la posibilidad de errores porque hacer cambios en una de sus responsabilidades podría afectar a las otras sin que lo sepas.
|
|
Goal
Este principio tiene como objetivo separar los comportamientos para que, si surgen errores como resultado de su cambio, no afecten otros comportamientos no relacionados.
|
|
O — Open-Closed
Las clases deben estar abiertas para su extensión, pero cerradas para su modificación
Cambiar el comportamiento actual de una clase afectará a todos los sistemas que utilizan esa clase.
Si desea que la clase realice más funciones, el enfoque ideal es agregar a las funciones que ya existen NO cambiarlas.
|
|
Goal
Este principio tiene como objetivo extender el comportamiento de una clase sin cambiar el comportamiento existente de esa clase. Esto es para evitar causar errores dondequiera que se use la clase.
|
|
L — Liskov Substitution
Si S es un subtipo de T, entonces los objetos de tipo T en un programa pueden reemplazarse con objetos de tipo S sin alterar ninguna de las propiedades deseables de ese programa.
Si tiene una clase y crea otra clase a partir de ella, se convierte en padre y la nueva clase se convierte en hija La clase hija debería poder hacer todo lo que la clase padre puede hacer. Este proceso se llama Herencia.
La clase secundaria debe poder procesar las mismas solicitudes y entregar el mismo resultado que la clase principal o podría entregar un resultado que sea del mismo tipo.
Si la clase child no cumple con estos requisitos, significa que la clase child ha cambiado por completo y viola este principio.
|
|
Goal
Este principio tiene como objetivo hacer cumplir la coherencia para que la clase principal o su clase secundaria se puedan usar de la misma manera sin errores.
|
|
I — Interface Segregation
No se debe obligar a los clientes a depender de métodos que no utilizan.
Cuando se requiere que una clase realice acciones que no son útiles, es un desperdicio y puede producir errores inesperados si la clase no tiene la capacidad de realizar esas acciones.
Una clase debe realizar solo las acciones necesarias para cumplir su función. Cualquier otra acción debe eliminarse por completo o moverse a otro lugar si otra clase podría usarla en el futuro.
|
|
Goal
Este principio tiene como objetivo dividir un conjunto de acciones en conjuntos más pequeños para que una clase ejecute SÓLO el conjunto de acciones que requiere.
|
|
D — Dependency Inversion
Los módulos de alto nivel no deben depender de los módulos de bajo nivel. Ambos deben depender de la abstracción.- Las abstracciones no deben depender de los detalles. Los detalles deben depender de las abstracciones.
En primer lugar, definamos los términos utilizados aquí de forma más sencilla.
Módulo (o clase) de alto nivel: clase que ejecuta una acción con una herramienta.
Módulo (o clase) de bajo nivel: La herramienta que se necesita para ejecutar la acción
Abstracción: Representa una interfaz que conecta las dos clases.
Detalles: Cómo funciona la herramienta
Este principio dice que una clase no debe fusionarse con la herramienta que utiliza para ejecutar una acción. Más bien, debe fusionarse con la interfaz que permitirá que la herramienta se conecte a la dlase.
También dice que tanto la clase como la interfaz no deben saber cómo funciona la herramienta. Sin embargo, la herramienta debe cumplir con las especificaciones de la interfaz.
|
|
Goal
Este principio tiene como objetivo reducir la dependencia de una clase de alto nivel en la clase de bajo nivel mediante la introducción de una interfaz.
|
|