SlideShare una empresa de Scribd logo
Solid Principles
Principios SOLIDMartín Salías
Decadencia del softwareRigidezFragilidadInmovilidadViscosidadComplejidad innecesariaRepetición innecesariaOpacidad
Newsgroups: comp.objectFrom: rmar...@rcmcon.com (Robert Martin)Date: Thu, 16 Mar 1995 15:12:00 GMTSubject: Re: The Ten Commandments of OO Programming---If I had to write commandments, these would be candidates.   1. Software entities (classes, modules, etc) should be open for extension, but closed for modification. (The open/closed principle -- Bertrand Meyer)   2. Derived classes must usable through the base class interface without the need for the user to know the difference. (The Liskov Substitution Principle)   3. Details should depend upon abstractions.  Abstractions should not depend upon details. (Principle of Dependency Inversion)   4. The granule of reuse is the same as the granule of release. Only components that are released through a tracking system can be effectively reused.   5. Classes within a released component should share common closure. That is, if one needs to be changed, they all are likely to need to be changed.  What affects one, affects all.   6. Classes within a released component should be reused together. That is, it is impossible to separate the components from each other in order to reuse less than the total.   7. The dependency structure for released components must be a DAG. There can be no cycles.     8. Dependencies between released components must run in the direction of stability. The dependee must be more stable than the depender.   9. The more stable a released component is, the more it must consist of abstract classes. A completely stable component should consist of nothing but abstract classes.  10. Where possible, use proven patterns to solve design problems.  11. When crossing between two different paradigms, build an interface layer that separates the two. Don't pollute one side with the paradigm of the other.
Single ResponsibilityOpen-ClosedLiskov SubstitutionInterface SegregationDependency Inversion
Responsabilidad únicaAbierto-CerradoSubstitución de LiskovSegregación de InterfazInversión de Dependencia
Unaclasedebetener un únicoeje de cambio.
Responsabilidad únicaUna clase debe tener una única razón para ser cambiada.Responsabilidad = Eje de cambios(SI el cambio sucede)Recibir el primer golpe
Dos responsabilidadesMyRectangleAplicaciónGeométricaAplicaciónGráfica+ Draw()+ Area() : doubleGUI
Deslindando responsabilidadesAplicaciónGráficaAplicaciónGráficaAplicaciónGeométricaAplicaciónGeométricaAplicaciónGeométricaAplicaciónGeométricaGeoRectangleGraphRectangle+ Area() : double+ Draw()GUI
Se debepoder extender el comportamiento sin modificarlo.
Abierto-CerradoLas entidades de software (clases, módulos, funciones, etc) deben estar abiertas a extensión, pero cerradas a modificación.Acercarse a un idealLos cambios deben generar código nuevo,no modificar el código viejo.
Cerrando a modificacionesEl cliente está abierto a modificaciones.ServidorCliente<<Interfaz>>IClienteClientePatrón Strategy: El cliente está abiertoy cerrado.Servidor
Cerrando a modificacionesPolíticaPatrón Template Method:La clase base está cerradaa modificaciones.+ ReglaPolitica()- Servicio()ImplementaciónLa implementación delmétodo lo abre a cuantasextensiones se necesiten.- Servicio()
Las clasesderivadasdebenpodersustituírseporsus bases.
Substitución de LiskovLos subtipos deben ser substituiblespor sus tipos base.     Si para cada objeto o1 de tipo S hay un objeto o2 de tipo T tal que para todo programa P definido en términos de T, el comportamiento de P no varía cuando o1 es sustitido por o2, entonces S es un subtipo de T.Es la base de poder del polimorfismo.Cuidarse de GetType() y otros datos de tipo en runtime.
Implicancias del LSPLa validez depende del contextoNo podemos validar un modelo aisladamenteDiseñar basándose en comportamientosPresunciones razonables (¿cómo acotarlas?)
Diseño por contratoPreservar las invariantesPre y pos-condicionesLa redeclaración de una rutina (en una derivación) debe solamente reemplazar la precondición original con una igual o más débil, y la poscondición original con una igual o más fuerte.Eiffel soporta nativamente DBCEn .NET ó Java usamos Unit TestsSoporte incipiente en .NET 4
Un ejemplo más complejo (1)ListaLibreríaListailimitadaListailimitadaListalimitadaListalimitada
Un ejemplo más complejo (2)ListaLibreríaListapersistenteListapersistenteListapersistente
Un ejemplo más complejo (3)ContenedorLibreríaQuitar(T)Existe(T)ListapersistenteListapersistenteListaListaPersistenteAgregar(T)Agregar(T)
Produzca interfaces de granofinoespecíficaspara un cliente.
Segregación de Interfaz   Los clientes no deben ser forzados a depender de métodos que no usan.Apunta a evitar las interfaces “gordas”.No importa la cantidad de métodos, sino que todos sus clientes las utilicen.Inadvertidamente podemos acoplar clientes que usan ciertos métodos con otros clientes que no los usan.
Una interfaz engordaTimer<<interface>>Cliente Timer+ TimeOut()Puerta+ Trabar()+ Destrabar()+ Abierta()PuertaPuerta temporizada
Separación por delegaciónTimer<<interface>>Cliente Timer+ TimeOut()PuertaPuerta temporizadaAdapter Puerta Temporizada+ TimeOut()+ TimeOutPuerta()<<instancia>>
Separación por herencia múltipleTimer<<interface>>Cliente TimerPuerta+ TimeOut()Puerta Temporizada+ TimeOut()
Dependa de abstracciones, no de concreciones.
Inversión de dependenciaLos módulos de alto nivel no deben depender de los módulos de bajo nivel. Ambos deben depender de abstracciones.Las abstracciones no deben depender de detalles. Los detalles deben depender de las abstracciones.	Es el principio general detrás del concepto de Layers o Capas.
Capas acopladasCapaPolíticaCapaMecanismoCapaUtilidad
Capas desacopladasPolíticaCapaPolítica<<interface>>Servicio depolíticasMecanismoCapaMecanismo<<interface>>Servicio demecanismosUtilidadCapaUtilidad
RecursosArtículo del Tío Bob sobrediseño OOhttp://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
BibliografíaadicionalMatt Weisfeld Bertrand MeyerRebecca Wirfs-Brock Scott AmblerJohn HuntDavid West
martin@salias.com.ar@MartinSaliashttp://CodeAndBeyond.org

Más contenido relacionado

PDF
Paradigma orientado a objetos
PPTX
Serialización de objetos en java
PPTX
Serialización de Objetos Java
PPTX
Diapositivas grupo 1 ESTRUCTURAS
PPTX
Serializacion Java
PPT
Semana 8 excepciones definidas por el usuario
PPTX
Programacion I
Paradigma orientado a objetos
Serialización de objetos en java
Serialización de Objetos Java
Diapositivas grupo 1 ESTRUCTURAS
Serializacion Java
Semana 8 excepciones definidas por el usuario
Programacion I

La actualidad más candente (20)

PPT
Manejo De Excepciones
ODP
Actividad 3_Impress
PPTX
Ipchains emilio cano
PPT
Excepciones
PPTX
Mecanismos de semaforo
DOCX
Las sentencias de_control[1]
PPTX
09 Clases Abstractas E Interfaces
PPTX
Las estructuras de control en la programación
DOC
Operadores C SHARP
DOC
Las variables y constantes
PDF
Slides sesion8 matlab - IF y bucles
PPTX
PDF
Autómata de Pila
DOCX
Práctica de flip flops
PPT
Variables y constantes
DOC
Las estructuras de control
PPTX
Certificación java 6 cap 5
PPTX
Estructuras de control
DOC
Ámbito de las variables resumen de la clase
PPTX
Estructuras secuencial
Manejo De Excepciones
Actividad 3_Impress
Ipchains emilio cano
Excepciones
Mecanismos de semaforo
Las sentencias de_control[1]
09 Clases Abstractas E Interfaces
Las estructuras de control en la programación
Operadores C SHARP
Las variables y constantes
Slides sesion8 matlab - IF y bucles
Autómata de Pila
Práctica de flip flops
Variables y constantes
Las estructuras de control
Certificación java 6 cap 5
Estructuras de control
Ámbito de las variables resumen de la clase
Estructuras secuencial
Publicidad

Similar a Solid Principles (20)

PPTX
Principios SOLID
PPTX
Principios SOLID de Diseño Orientado a Objetos
PDF
Principios de diseño
PPTX
Deconstrucción de SOLID
PPTX
PPT
Diseño Agile
PPTX
SOLID - ¿Cómo lo aplico a mi código?
PDF
Técnicas de programación
PDF
Elementos avanzados de poo
 
PPSX
Conceptos avanzados oo (presentación 4)
PPTX
PDF
Clean code 10-11
PDF
Metodología de la programación orientada a objetos con c++ prev
PDF
Anon metodologia de la programacion orientada a objetos con c++
PPT
Prog oo con_java
ODP
Taller SOLID Refactor
PPTX
2019 commit solid typescript
PDF
Is Uncle Bob Wrong?
Principios SOLID
Principios SOLID de Diseño Orientado a Objetos
Principios de diseño
Deconstrucción de SOLID
Diseño Agile
SOLID - ¿Cómo lo aplico a mi código?
Técnicas de programación
Elementos avanzados de poo
 
Conceptos avanzados oo (presentación 4)
Clean code 10-11
Metodología de la programación orientada a objetos con c++ prev
Anon metodologia de la programacion orientada a objetos con c++
Prog oo con_java
Taller SOLID Refactor
2019 commit solid typescript
Is Uncle Bob Wrong?
Publicidad

Más de Martin Salias (17)

PPTX
Restricciones para la Creatividad
PPTX
LeSS Intro
PDF
Arquitectura Ágil
PPTX
Arquitectura de Software en el Ciclo de Vida Ágil
PPTX
Organizaciones y Liderazgo Ágiles
PPTX
Implementation Patterns
PPTX
Why JavaScript
PPTX
Building Hybrid Applications
PPTX
Jas 2012 keynote
PPT
Antipatrones de Software
PPTX
Introduccion a la Arquitectura de Software
PPTX
Refactoring
PPTX
Cloud Computing
PPTX
Arquitectura y ciclo de vida ágil en la práctica
PPTX
TDD Workshop
PPT
High Maturity Agile Practice
PPT
Explosión de Lenguajes
Restricciones para la Creatividad
LeSS Intro
Arquitectura Ágil
Arquitectura de Software en el Ciclo de Vida Ágil
Organizaciones y Liderazgo Ágiles
Implementation Patterns
Why JavaScript
Building Hybrid Applications
Jas 2012 keynote
Antipatrones de Software
Introduccion a la Arquitectura de Software
Refactoring
Cloud Computing
Arquitectura y ciclo de vida ágil en la práctica
TDD Workshop
High Maturity Agile Practice
Explosión de Lenguajes

Último (20)

PPTX
modulo seguimiento 1 para iniciantes del
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PPTX
Curso de generación de energía mediante sistemas solares
PDF
MANUAL de recursos humanos para ODOO.pdf
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
CyberOps Associate - Cisco Networking Academy
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
PPTX
Presentación de Redes de Datos modelo osi
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
modulo seguimiento 1 para iniciantes del
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
historia_web de la creacion de un navegador_presentacion.pptx
capacitación de aire acondicionado Bgh r 410
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
Curso de generación de energía mediante sistemas solares
MANUAL de recursos humanos para ODOO.pdf
informe_fichas1y2_corregido.docx (2) (1).pdf
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
SAP Transportation Management para LSP, TM140 Col18
CyberOps Associate - Cisco Networking Academy
El-Gobierno-Electrónico-En-El-Estado-Bolivia
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Influencia-del-uso-de-redes-sociales.pdf
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
Presentación de Redes de Datos modelo osi
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...

Solid Principles

Notas del editor

  • #3: SOLID principles5 principios rectores de OOD; la base de los patrones de diseño¿una novedad? -&gt; NO
  • #4: Rigidez: difícil de cambiarFragilidad: fácil de romperInmovilidad: difícil de reutilizarViscosidad: difícil de modificar correctamenteEn el diseño mismoEn el ambiente (compilación, control de fuentes, herramientas que no favorecen una buena manera de hacer las cosas; o la carencia de aquellas que la facilitan).Complejidad: sobre-diseño ó sobre-arquitectura; exceso de especulaciónRepetición: exceso de “copy/paste development”Opacidad: falta total de expresividad= Sample: TheCopyProgram