SOLID• 5 principios básicos de la programaciónorientada a objetos, explicados en “AgileSoftware Development: Principles, P...
¿Por qué SOLID?
SRP Single responsibility principleOCP Open/closed principleLSP Liskov substitution principleISP Interface segregation pri...
SINGLE RESPONSIBILITY PRINCIPLE(PRINCIPIO DE RESPONSABILIDAD ÚNICA)+• Cada componente, ya sean paquetes, clases, métodos e...
EJEMPLO• Tenemos una clase Pedido con dosmétodos: cargar y calcularCosto.• Ambos métodos se encargan de cosasrelacionadas ...
OPEN CLOSED PRINCIPLE(PRINCIPIO ABIERTO/CERRADO)Lo recomendable esDefinimos reproducir como abstracto y movemosla implemen...
https://gist.github.com/2896236#file_ocp_empleados.sin_refactorizar.cs
https://gist.github.com/2896236#file_ocp_empleados.refactorizado.cs
LISKOV SUBSTITUTION PRINCIPLE(PRINCIPIO DE SUSTITUCIÓN DE LISKOV)
https://gist.github.com/2896064 https://gist.github.com/2896078
INTERFACE SEGREGATION PRINCIPLE(PRINCIPIO DE SEGREGACIÓN DE INTERFACES)Crea pequeñas interfaces específicas para los clien...
https://gist.github.com/2896112#file_lsp_animal.sin_refactorizar.cs
https://gist.github.com/2896112#file_lsp_animal.refactorizado.cs
DEPENDENCY INVERSION PRINCIPLE(PRINCIPIO DE INVERSIÓN DE DEPENDENCIAS)Definición• Depende de abstracciones, no deimplement...
Lo ideal…Nuestra claseutilizara una claseabstracta o unainterfaz.En lugar de unaimplementaciónconcreta, como erala clase p...
https://gist.github.com/2896132#file_dip_hola_mundo.sin_refactorizar.cshttps://gist.github.com/2896132#file_dip_hola_mundo...
Referencias• http://www.slideshare.net/jrhuerta/principios-solid-de-diseo-orientado-a-objetos• http://www.genbetadev.com/p...
SOLID (object oriented design) Diseño Orientado a Objetos
SOLID (object oriented design) Diseño Orientado a Objetos
SOLID (object oriented design) Diseño Orientado a Objetos
SOLID (object oriented design) Diseño Orientado a Objetos
Upcoming SlideShare
Loading in …5
×

SOLID (object oriented design) Diseño Orientado a Objetos

598 views

Published on

Un breve descripcion de SOLID tomando en cuenta varias referencias.

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
598
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

SOLID (object oriented design) Diseño Orientado a Objetos

  1. 1. SOLID• 5 principios básicos de la programaciónorientada a objetos, explicados en “AgileSoftware Development: Principles, Patterns,and Practices” por uno de los grandesexponentes de la artesanía del software, elfamoso “Uncle Bob” (Robert C. Martin).
  2. 2. ¿Por qué SOLID?
  3. 3. SRP Single responsibility principleOCP Open/closed principleLSP Liskov substitution principleISP Interface segregation principleDIP Dependency inversion principleSOLID
  4. 4. SINGLE RESPONSIBILITY PRINCIPLE(PRINCIPIO DE RESPONSABILIDAD ÚNICA)+• Cada componente, ya sean paquetes, clases, métodos eincluso bloques de código.+• Debe tener una única responsabilidad, ocuparse de una únicatarea.• Aumentar de esa forma la cohesión y reducir el acoplamiento.
  5. 5. EJEMPLO• Tenemos una clase Pedido con dosmétodos: cargar y calcularCosto.• Ambos métodos se encargan de cosasrelacionadas con los pedidos.• La realidad es que la clase se encarga detareas relacionadas con los pedidos y detareas relacionadas con la base de datos.
  6. 6. OPEN CLOSED PRINCIPLE(PRINCIPIO ABIERTO/CERRADO)Lo recomendable esDefinimos reproducir como abstracto y movemosla implementación a varias clases hijas.cuando queramos añadir un nuevo formato, sólonecesitaremos crear una nueva clase hija.tengo una clase Archivo con un método reproducir,Switch que llama a un método u otro de la clasedependiendo de si el archivo es un MP3 o WMA.Si quiero añadir un nuevo formato más tarde,tendré que modificar el Switch.Todo componente debe estar abierto a nuevas funcionalidades, pero cerrado a cambios en su código.¿Cómo hacerlo?Mediante la abstracción, por ejemplo, elpolimorfismo.
  7. 7. https://gist.github.com/2896236#file_ocp_empleados.sin_refactorizar.cs
  8. 8. https://gist.github.com/2896236#file_ocp_empleados.refactorizado.cs
  9. 9. LISKOV SUBSTITUTION PRINCIPLE(PRINCIPIO DE SUSTITUCIÓN DE LISKOV)
  10. 10. https://gist.github.com/2896064 https://gist.github.com/2896078
  11. 11. INTERFACE SEGREGATION PRINCIPLE(PRINCIPIO DE SEGREGACIÓN DE INTERFACES)Crea pequeñas interfaces específicas para los clientes. Otra forma deexpresarlo es que las clases que implementen una interfaz o una claseabstracta, no deberían estar obligadas a implementar métodos que noutilizan.Ejemplo: una clase abstracta TelefonoMovil.Aunque la implementacióndel método en la claseconcreta consistiera en nohacer nada.o lanzar una excepción.No sería una gran ideacrear un métodofotografriar() en laclase padre.este diseño sólo serviríapara crear confusión ydificultar elmantenimiento.
  12. 12. https://gist.github.com/2896112#file_lsp_animal.sin_refactorizar.cs
  13. 13. https://gist.github.com/2896112#file_lsp_animal.refactorizado.cs
  14. 14. DEPENDENCY INVERSION PRINCIPLE(PRINCIPIO DE INVERSIÓN DE DEPENDENCIAS)Definición• Depende de abstracciones, no deimplementaciones concretas.• Se llama así porque, al contrario de lo quesucede a veces, las clases concretas deberíandepender de clases abstractas, y no a lainversa.Ejemplo• Una clase que se encargará de gestionar laconfiguración de la aplicación. una clase quepermite leer y escribir de un archivo de textoplano. Pero, ¿y si de repente decidimos quequeremos utilizar una base de datos?
  15. 15. Lo ideal…Nuestra claseutilizara una claseabstracta o unainterfaz.En lugar de unaimplementaciónconcreta, como erala clase paratrabajar conarchivos de textoplano.
  16. 16. https://gist.github.com/2896132#file_dip_hola_mundo.sin_refactorizar.cshttps://gist.github.com/2896132#file_dip_hola_mundo.refactorizado.cs
  17. 17. Referencias• http://www.slideshare.net/jrhuerta/principios-solid-de-diseo-orientado-a-objetos• http://www.genbetadev.com/paradigmas-de-programacion/solid-cinco-principios-basicos-de-diseno-de-clases• http://mundogeek.net/archivos/2011/06/09/principios-solid-de-la-orientacion-a-objetos/• http://www.fjordan.es/solid-principios-basicos-de-diseno-de-clases.html• http://elblogdelfrasco.blogspot.com/2012/03/solid-los-5-principios-fundamentales-de.html• http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29

×