Apuntes: "Principios de Diseño Orientado a Objetos"

Volviendo a mis inicios, retomaremos el camino de los artículos que buscan reforzar determinados conocimientos o conceptos que en otras arquitecturas o lenguajes son tan comunes pero que muchas veces son desconocidos en el mundo PHP.

Teniendo en cuenta que PHP5 es una realidad que nos permite pasar a desarrollos más elaborados, con una Orientación a Objetos más robusta, es fundamental saber que existen "principios de diseño" que nos marcan el rumbo.

Aquí mis apuntes sobre estos temas (que en un futuro espero extenderme en detalle):

Principios de Diseño Orientado a Objetos
  1. SRP - Single Responsibility Principle (Principio de Responsabilidad Única)
  2. OCP - Open/Closed Principle (Principio Abierto / Cerrado)
  3. LSP - Liskov Substitution Principle (Principio de Sustitución de Liskov)
  4. DIP - Dependency Inversion Principle (Principio de Inversión de Dependencias)
  5. ISP - Interface Segregation Principle (Principio de Segregación de Interfaces)
Algunos apuntes encontrados en Wikipedia (inglés)
http://en.wikipedia.org/wiki/Single_responsibility_principle
http://en.wikipedia.org/wiki/Open/closed_principle
http://en.wikipedia.org/wiki/Liskov_substitution_principle

1. SRP - Single Responsibility Principle (Principio de Responsabilidad Única)


Enunciado formal: "Una clase debería tener solo una razón para cambiar"

2. OCP - Open/Closed Principle (Principio Abierto / Cerrado)


Enunciado formal: "Entidades de Software (clases, módulos, funciones, etc) deberían ser abiertas para la extensión y cerradas para la modificación"

3. LSP - Liskov Substitution Principle (Principio de Sustitución de Liskov)


Enunciado formal: "Subtipos deben ser sustituibles por sus clases bases"

4. DIP - Dependency Inversion Principle (Principio de Inversión de Dependencias)


Enunciado formal: "los clientes tienden a ser propietarios de las interfaces y aquellos que ofrecen los servicios las implementan"

5. ISP - Interface Segregation Principle (Principio de Segregación de Interfaces)

Enunciado formal: "Clientes no deberían depender de métodos que no utilizan"

4 comentarios:

mig21 dijo...

Interesante recopilación...

Yo añadiría La ley de Deméter (habla sólo con tus amigos inmediatos) para mantener el diseño limpio y ordenado.

Aunque probablemente es un ley subyacente en las que has listado, conviene tenerla en mente, por si acaso...

Saludos

P.D. Por si le interesa a alguien, hace bastante tiempo comenté está ley en Accesores, diseño orientado a objetos y la ley de Demeter

enrique_place dijo...

Estimado Mig21:

Sí, muchas gracias, me faltan algunas más, pero Deméter debería estar seguro ;-)

Estoy terminando de ordenar mis apuntes (para poder ir agregando material a un libro que estoy trabajando), por lo que iré actualizando el blog con ejemplos que tengo en mis cuadernos ;-)

PD: estuve viendo tu blog y la verdad que me gustó mucho (ya recorrí hasta el año pasado) y veo que voy a tomarme un tiempo para leer tus buenos posts ;-)

IsildurMaC dijo...

Quisiera hacer mi contribución a esta entrada con un enlace que encontré hace tiempo atrás en la página de Robert C. Martin.
Es el siguiente: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf

Espero lo disfruten, son unos cuantos principios de diseño, con métricas incluidas, y algo sobre los patrones GOF.
Saludos.

enrique_place dijo...

Estimado IsildurMaC:

Muchas gracias por la información, ya la estoy leyendo ;-)

Entradas populares