SOLID - Tensho97/Aprende-a-Aprender GitHub Wiki

¿Qué es?

Single responsibility, Open-closed, Liskov substitution, Interface segragation y Dependecia inversion.

Representa 5 principios básicos de la programación orientada a objetos y el diseño.

Si estos principios se aplican en conjunto es mas probable que el desarrolador cree un sistemas que sea facil de mantener y ampliar

S –> SSR –> Principio de Responsabilidad Única.

En ingenería de software establece que cada módulo o clase debe tener responsabilidad sobre una sola parta de la funcionalidad proporcionada por software y esta responsabilidad debe estar encapsulada.

O –> OCP –> Principio de Abierto y Cerrado

Dentro de la POO, OCP, establece que una entidad (clase, módulo, función , etc) debe quedarse abierta para su extensión y cerrado para su modificación.

Debe poder extender sy comportamiento sin modificar su código fuente

Principio de Abierto - Cerrado de Meyer

Bertrand Meyer fue quien utilizo por primera vez la expresión de abierto/cerrado

* Un módulo esta abierto su si se puede extender (añadir campos a la estructura que contiene dicho módulo).
* Un módulo esta cerrado si queda utilizablr para otros módulos (el módulo goza de una descripción estable y bien definida.

Principio de Abierto/Cerrado polimórfico

Al uso de interfaces abstractas , en las implementaciones podian cambiar incluso podría haber multiples implementaciones y ser polimorficamente susbtituidos unas por otras.

L –> LSP –> Principio sustitución de Liskov

Es un principio de la programación orientada a objetos. Y puede definirse como: Cada clase que hereda de otra puede usarse como su padre sin necesidad de conocer las diferencias entre ellas.

Se considera la interacción de subtipos con precondiciones, postcondiciones e invariantes:

  • Las precondiciones no pueden ser reforzadas por un subtipo.
  • Las postcondiciones no pueden ser debilitadas por un subtipo.
  • Las invariantes establecidas por el supertipo deben ser mantenidas por los subtipos.
  • La Restricción histórica (O Regla histórica). Se acepta normalmente que los objetos deben ser modificados unicamente a través de sus métodos (Encapsulamiento). Como los subtipos pueden introducir nuevos métodos, ausentes en el supertipo, estos podrían cambiar el estado interno del objeto en formas que serían imposibles o inadmisibles en el supertipo. La restricción histórica impide este tipo de modificaciones. Este fue el elemento novedoso introducido por Liskov y Wing. Se puede ejemplificar una violación de este principio definiendo un subtipo PuntoMutable como descendiente de un supertipo PuntoInmutable. Esto resulta en una violación del principio histórico, porque en la historia de un objeto de tipo PuntoInmutable, el estado es siempre el mismo desde su creación, por lo que no puede incluir la historia de un PuntoMutable. Sin embargo, campos extra añadidos en un subtipo podrían ser modificables sin problema, porque estos campos no son observables desde los métodos del supertipo. Así que se podría, por ejemplo, derivar un tipo Círculo con un centro fijo pero un radio variable a partir de un tipo PuntoInmutable sin violar LSP.

I –> ISP –> Principio de segregación de la interfaz

Establece que los clientes de un programa dado sólo deberían conocer de éste aquellos métodos que realmente usan, y no aquellos que no necesitan usar.

El ISP fue concebido para mantener a un sistema desacoplado respecto a los sistemas de los que depende, y así resulte más fácil refactorizarlo, modificarlo y redesplegarlo.

D –> DIP –> Principio de Inversión de dependecia

Básicamente lo que nos dice este principio es que

  • Las clases de alto nivel no deberían depender de las clases de bajo nivel. Ambas deberían depender de las abstracciones.
  • Las abstracciones no deberían depender de los detalles. Los detalles deberían depender de las abstracciones.

En Informática, Inyección de Dependencias (en inglés Dependency Injection, DI) es un patrón de diseño orientado a objetos, en el que se suministran objetos a una clase en lugar de ser la propia clase quien cree el objeto. Es una herramienta comúnmente utilizada en varios patrones de diseño orientado a objetos, consiste en inyectar comportamientos a componentes. El término fue acuñado por primera vez por Martin Fowler.

Esto no es más que extraer responsabilidades a un componente para delegarlas en otro, estableciendo un mecanismo a través del cual el nuevo componente pueda ser cambiado en tiempo de ejecución. Es conveniente no confundir Inyección de dependencias (DIP) con Inversión de Control (IoC).



Autor : Julián