SlideShare uma empresa Scribd logo
1 de 33
Principios SOLID Martín Salías
Decadencia del software Rigidez Fragilidad Inmovilidad Viscosidad Complejidad innecesaria Repetición innecesaria Opacidad
Newsgroups: comp.object From: rmar...@rcmcon.com (Robert Martin) Date: Thu, 16 Mar 1995 15:12:00 GMT Subject: 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 Responsibility Open-Closed Liskov Substitution Interface Segregation Dependency Inversion
Responsabilidad única Abierto-Cerrado Substitución de Liskov Segregación de Interfaz Inversión de Dependencia
Unaclasedebetener un únicoeje de cambio.
Responsabilidad única Una clase debe tener una única razón para ser cambiada. Responsabilidad = Eje de cambios (SI el cambio sucede) Recibir el primer golpe
Dos responsabilidades MyRectangle Aplicación Geométrica Aplicación Gráfica + Draw() + Area() : double GUI
Deslindando responsabilidades Aplicación Gráfica Aplicación Gráfica Aplicación Geométrica Aplicación Geométrica Aplicación Geométrica Aplicación Geométrica GeoRectangle GraphRectangle + Area() : double + Draw() GUI
Se debepoder extender el comportamiento sin modificarlo.
Abierto-Cerrado Las entidades de software (clases, módulos, funciones, etc) deben estar abiertas a extensión, pero cerradas a modificación. Acercarse a un ideal Los cambios deben generar código nuevo,no modificar el código viejo.
Cerrando a modificaciones El cliente está abierto  a modificaciones. Servidor Cliente <<Interfaz>> ICliente Cliente Patrón Strategy:  El cliente está abierto y cerrado. Servidor
Cerrando a modificaciones Política Patrón Template Method: La clase base está cerradaa modificaciones. + ReglaPolitica() - Servicio() Implementación La implementación delmétodo lo abre a cuantasextensiones se necesiten. - Servicio()
Las clasesderivadasdebenpodersustituírseporsus bases.
Substitución de Liskov Los 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 LSP La validez depende del contexto No podemos validar un modelo aisladamente Diseñar basándose en comportamientos Presunciones razonables (¿cómo acotarlas?)
Diseño por contrato Preservar las invariantes Pre y pos-condiciones La 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 DBC En .NET ó Java usamos Unit Tests Soporte incipiente en .NET 4
Un ejemplo más complejo (1) Lista Librería Listailimitada Listailimitada Listalimitada Listalimitada
Un ejemplo más complejo (2) Lista Librería Listapersistente Listapersistente Listapersistente
Un ejemplo más complejo (3) Contenedor Librería Quitar(T) Existe(T) Listapersistente Listapersistente Lista ListaPersistente Agregar(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 engorda Timer <<interface>> Cliente Timer + TimeOut() Puerta + Trabar() + Destrabar() + Abierta() Puerta Puerta temporizada
Separación por delegación Timer <<interface>> Cliente Timer + TimeOut() Puerta Puerta temporizada Adapter Puerta  Temporizada + TimeOut() + TimeOutPuerta() <<instancia>>
Separación por herencia múltiple Timer <<interface>> Cliente Timer Puerta + TimeOut() Puerta  Temporizada + TimeOut()
Dependa de abstracciones, no de concreciones.
Inversión de dependencia Los 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 acopladas CapaPolítica CapaMecanismo CapaUtilidad
Capas desacopladas Política CapaPolítica <<interface>> Servicio depolíticas Mecanismo CapaMecanismo <<interface>> Servicio demecanismos Utilidad CapaUtilidad
Recursos Artículo del Tío Bob sobrediseño OOhttp://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
Bibliografíaadicional Matt Weisfeld  Bertrand Meyer Rebecca Wirfs-Brock  Scott Ambler John Hunt David West
martin@salias.com.ar @MartinSalias http://CodeAndBeyond.org

Mais conteúdo relacionado

Mais procurados

Las sentencias de_control[1]
Las sentencias de_control[1]Las sentencias de_control[1]
Las sentencias de_control[1]
grachika
 
Slides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesSlides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y bucles
matlab_usc
 
Certificación java 6 cap 5
Certificación java 6 cap 5Certificación java 6 cap 5
Certificación java 6 cap 5
srBichoRaro
 
Ámbito de las variables resumen de la clase
Ámbito de las variables resumen de la claseÁmbito de las variables resumen de la clase
Ámbito de las variables resumen de la clase
miguelangelvillelli
 

Mais procurados (20)

Manejo De Excepciones
Manejo De ExcepcionesManejo De Excepciones
Manejo De Excepciones
 
Actividad 3_Impress
Actividad 3_ImpressActividad 3_Impress
Actividad 3_Impress
 
Ipchains emilio cano
Ipchains emilio canoIpchains emilio cano
Ipchains emilio cano
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Mecanismos de semaforo
Mecanismos de semaforoMecanismos de semaforo
Mecanismos de semaforo
 
Las sentencias de_control[1]
Las sentencias de_control[1]Las sentencias de_control[1]
Las sentencias de_control[1]
 
09 Clases Abstractas E Interfaces
09   Clases Abstractas E Interfaces09   Clases Abstractas E Interfaces
09 Clases Abstractas E Interfaces
 
Las estructuras de control en la programación
Las estructuras de control en la programaciónLas estructuras de control en la programación
Las estructuras de control en la programación
 
Operadores C SHARP
Operadores C SHARPOperadores C SHARP
Operadores C SHARP
 
Las variables y constantes
Las variables y constantesLas variables y constantes
Las variables y constantes
 
Slides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesSlides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y bucles
 
SOLID para CatDotNet
SOLID   para CatDotNetSOLID   para CatDotNet
SOLID para CatDotNet
 
Autómata de Pila
Autómata de Pila Autómata de Pila
Autómata de Pila
 
Práctica de flip flops
Práctica de flip flopsPráctica de flip flops
Práctica de flip flops
 
Variables y constantes
Variables  y constantesVariables  y constantes
Variables y constantes
 
Las estructuras de control
Las estructuras de controlLas estructuras de control
Las estructuras de control
 
Certificación java 6 cap 5
Certificación java 6 cap 5Certificación java 6 cap 5
Certificación java 6 cap 5
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Ámbito de las variables resumen de la clase
Ámbito de las variables resumen de la claseÁmbito de las variables resumen de la clase
Ámbito de las variables resumen de la clase
 
Estructuras secuencial
Estructuras secuencialEstructuras secuencial
Estructuras secuencial
 

Semelhante a Solid Principles

Principios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosPrincipios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a Objetos
Jose E. Rodriguez Huerta
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
NachoTValverde
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
jhonJD1
 
Webprendedor 2009 Escalabilidad
Webprendedor 2009 EscalabilidadWebprendedor 2009 Escalabilidad
Webprendedor 2009 Escalabilidad
edavism
 
Metodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevMetodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prev
jtk1
 
Anon metodologia de la programacion orientada a objetos con c++
Anon   metodologia de la programacion orientada a objetos con c++Anon   metodologia de la programacion orientada a objetos con c++
Anon metodologia de la programacion orientada a objetos con c++
ratasquerosaXX
 

Semelhante a Solid Principles (20)

Diseño Agile
Diseño AgileDiseño Agile
Diseño Agile
 
Principios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosPrincipios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a Objetos
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidra
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Informatica
InformaticaInformatica
Informatica
 
Tap04 poo
Tap04 pooTap04 poo
Tap04 poo
 
Tema7 herencia
Tema7 herenciaTema7 herencia
Tema7 herencia
 
Introduccion Programación Orientada a Objetos.ppt
Introduccion Programación Orientada a Objetos.pptIntroduccion Programación Orientada a Objetos.ppt
Introduccion Programación Orientada a Objetos.ppt
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Webprendedor 2009 Escalabilidad
Webprendedor 2009 EscalabilidadWebprendedor 2009 Escalabilidad
Webprendedor 2009 Escalabilidad
 
Csharp
CsharpCsharp
Csharp
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Metodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevMetodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prev
 
Anon metodologia de la programacion orientada a objetos con c++
Anon   metodologia de la programacion orientada a objetos con c++Anon   metodologia de la programacion orientada a objetos con c++
Anon metodologia de la programacion orientada a objetos con c++
 
Test
TestTest
Test
 

Mais de Martin Salias

Mais de Martin Salias (17)

Restricciones para la Creatividad
Restricciones para la CreatividadRestricciones para la Creatividad
Restricciones para la Creatividad
 
LeSS Intro
LeSS IntroLeSS Intro
LeSS Intro
 
Arquitectura Ágil
Arquitectura ÁgilArquitectura Ágil
Arquitectura Ágil
 
Arquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida ÁgilArquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida Ágil
 
Organizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo ÁgilesOrganizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo Ágiles
 
Implementation Patterns
Implementation PatternsImplementation Patterns
Implementation Patterns
 
Why JavaScript
Why JavaScriptWhy JavaScript
Why JavaScript
 
Building Hybrid Applications
Building Hybrid ApplicationsBuilding Hybrid Applications
Building Hybrid Applications
 
Jas 2012 keynote
Jas 2012 keynoteJas 2012 keynote
Jas 2012 keynote
 
Antipatrones de Software
Antipatrones de SoftwareAntipatrones de Software
Antipatrones de Software
 
Introduccion a la Arquitectura de Software
Introduccion a la Arquitectura de SoftwareIntroduccion a la Arquitectura de Software
Introduccion a la Arquitectura de Software
 
Refactoring
RefactoringRefactoring
Refactoring
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
Arquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la prácticaArquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la práctica
 
TDD Workshop
TDD WorkshopTDD Workshop
TDD Workshop
 
High Maturity Agile Practice
High Maturity Agile PracticeHigh Maturity Agile Practice
High Maturity Agile Practice
 
Explosión de Lenguajes
Explosión de LenguajesExplosión de Lenguajes
Explosión de Lenguajes
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 

Solid Principles

  • 1.
  • 3. Decadencia del software Rigidez Fragilidad Inmovilidad Viscosidad Complejidad innecesaria Repetición innecesaria Opacidad
  • 4. Newsgroups: comp.object From: rmar...@rcmcon.com (Robert Martin) Date: Thu, 16 Mar 1995 15:12:00 GMT Subject: 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.
  • 5. Single Responsibility Open-Closed Liskov Substitution Interface Segregation Dependency Inversion
  • 6. Responsabilidad única Abierto-Cerrado Substitución de Liskov Segregación de Interfaz Inversión de Dependencia
  • 8. Responsabilidad única Una clase debe tener una única razón para ser cambiada. Responsabilidad = Eje de cambios (SI el cambio sucede) Recibir el primer golpe
  • 9. Dos responsabilidades MyRectangle Aplicación Geométrica Aplicación Gráfica + Draw() + Area() : double GUI
  • 10. Deslindando responsabilidades Aplicación Gráfica Aplicación Gráfica Aplicación Geométrica Aplicación Geométrica Aplicación Geométrica Aplicación Geométrica GeoRectangle GraphRectangle + Area() : double + Draw() GUI
  • 11. Se debepoder extender el comportamiento sin modificarlo.
  • 12. Abierto-Cerrado Las entidades de software (clases, módulos, funciones, etc) deben estar abiertas a extensión, pero cerradas a modificación. Acercarse a un ideal Los cambios deben generar código nuevo,no modificar el código viejo.
  • 13. Cerrando a modificaciones El cliente está abierto a modificaciones. Servidor Cliente <<Interfaz>> ICliente Cliente Patrón Strategy: El cliente está abierto y cerrado. Servidor
  • 14. Cerrando a modificaciones Política Patrón Template Method: La clase base está cerradaa modificaciones. + ReglaPolitica() - Servicio() Implementación La implementación delmétodo lo abre a cuantasextensiones se necesiten. - Servicio()
  • 16. Substitución de Liskov Los 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.
  • 17. Implicancias del LSP La validez depende del contexto No podemos validar un modelo aisladamente Diseñar basándose en comportamientos Presunciones razonables (¿cómo acotarlas?)
  • 18. Diseño por contrato Preservar las invariantes Pre y pos-condiciones La 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 DBC En .NET ó Java usamos Unit Tests Soporte incipiente en .NET 4
  • 19. Un ejemplo más complejo (1) Lista Librería Listailimitada Listailimitada Listalimitada Listalimitada
  • 20. Un ejemplo más complejo (2) Lista Librería Listapersistente Listapersistente Listapersistente
  • 21. Un ejemplo más complejo (3) Contenedor Librería Quitar(T) Existe(T) Listapersistente Listapersistente Lista ListaPersistente Agregar(T) Agregar(T)
  • 22. Produzca interfaces de granofinoespecíficaspara un cliente.
  • 23. 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.
  • 24. Una interfaz engorda Timer <<interface>> Cliente Timer + TimeOut() Puerta + Trabar() + Destrabar() + Abierta() Puerta Puerta temporizada
  • 25. Separación por delegación Timer <<interface>> Cliente Timer + TimeOut() Puerta Puerta temporizada Adapter Puerta Temporizada + TimeOut() + TimeOutPuerta() <<instancia>>
  • 26. Separación por herencia múltiple Timer <<interface>> Cliente Timer Puerta + TimeOut() Puerta Temporizada + TimeOut()
  • 27. Dependa de abstracciones, no de concreciones.
  • 28. Inversión de dependencia Los 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.
  • 29. Capas acopladas CapaPolítica CapaMecanismo CapaUtilidad
  • 30. Capas desacopladas Política CapaPolítica <<interface>> Servicio depolíticas Mecanismo CapaMecanismo <<interface>> Servicio demecanismos Utilidad CapaUtilidad
  • 31. Recursos Artículo del Tío Bob sobrediseño OOhttp://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
  • 32. Bibliografíaadicional Matt Weisfeld Bertrand Meyer Rebecca Wirfs-Brock Scott Ambler John Hunt David West

Notas do Editor

  1. SOLID principles5 principios rectores de OOD; la base de los patrones de diseño¿una novedad? -&gt; NO
  2. 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