Principios y Patrones de Diseño de Software: Guía Completa
Clasificado en Informática
Escrito el en español con un tamaño de 3,65 KB
Principios de Diseño SOLID
Principio de Responsabilidad Única
Objetivo: Evitar que el cambio de una responsabilidad en una clase pueda provocar fallos en las demás responsabilidades de la clase. Evitar que los clientes de una clase carguen con elementos que no utilizan.
Principio Abierto/Cerrado
Objetivo: Las entidades software deben estar abiertas para su extensión, pero cerradas para su modificación.
- Sistema funcionando (cerrado), pero ampliable (abierto).
- Conseguir cambios añadiendo nuevo código sin afectar al resto de elementos del diseño.
- La dependencia "uno a uno" se transforma en una dependencia de "uno a muchos".
Principio de Sustitución de Liskov
Objetivo: Facilitar la modificación del diseño y la reutilización del código a través del uso adecuado de la herencia.
- Los programas no saben si trabajan con objetos de supertipos o de subtipos.
- Se puede cargar una variable de tipo hijo en el padre pero no al revés / siempre ir hacia arriba.
Principio de Segregación de Interfaces
Objetivo: Conseguir que los cambios en los módulos de bajo nivel no afecten a los módulos de alto nivel. Facilitar la reutilización de los módulos de alto nivel.
Patrones de Diseño
Patrón Singleton
Objetivo: Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.
Patrón Strategy
Objetivo: Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.
- Cuando quiero encapsular un algoritmo que puede variar.
- Permitir diferentes implementaciones.
Patrón Template Method
Objetivo: Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Esto permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
Patrón Proxy
Objetivo: El patrón Proxy se utiliza como intermediario para acceder a un objeto, permitiendo controlar el acceso a él. Mantiene un representante de un objeto.
Patrón Observer
Objetivo: Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.
- Mantener las dependencias entre objetos, sin necesidad de conocer al otro objeto.
Patrón Visitor
Objetivo: Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.
- Sería introducir nuevas implementaciones sin tener que modificar.
Patrón Facade
Objetivo: Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.
- Es una clase simplificadora, no es de dominio.
Patrón Factory Method
Objetivo: Consiste en utilizar una clase constructora (al estilo del Abstract Factory) abstracta con unos cuantos métodos definidos y otro(s) abstracto(s): el dedicado a la construcción de objetos de un subtipo de un tipo determinado. Es una simplificación del Abstract Factory, en la que la clase abstracta tiene métodos concretos que usan algunos de los abstractos; según usemos una u otra hija de esta clase abstracta, tendremos uno u otro comportamiento.