Saludo
24
dic
Twittear |
Apartándome de la programación por un momento, quería desearles a todos una Feliz navidad y un próspero año nuevo.
Twittear |
Para cerrar una etapa de acrónimos o siglas relacionados al diseño de software, me resta mencionar al menos dos que no está demás tener en cuenta.
Son metodologías en las que solemos caer muy fácilmente y para colmo de males, con bastante frecuencia.
Estas son: DRY (Don't Repeat Yourself) y YAGNI (You Ain't Gonna Need It).
Intentar llevar a cabo todas y cada una de las metodologías y principios vistos hasta aquí, nos permitirá tener un código limpio; mucho más fácil de leer, comprender y expandir.
Son metodologías en las que solemos caer muy fácilmente y para colmo de males, con bastante frecuencia.
Estas son: DRY (Don't Repeat Yourself) y YAGNI (You Ain't Gonna Need It).
Intentar llevar a cabo todas y cada una de las metodologías y principios vistos hasta aquí, nos permitirá tener un código limpio; mucho más fácil de leer, comprender y expandir.
Por
Juan Barrionuevo
Etiquetas:
Diseño,
Don't repeat Yourself,
DRY,
No lo vas a necesitar,
No te repitas a ti mismo,
YAGNI,
You Ain't Gonna Need It
Twittear |
Implementar el principio de inversión de dependencia (DIP) sin realizar inversión de control puede resultar en un trabajo incompleto. Vamos a terminar con las dependencias reales en nuestro código mediante la inyección de clases colaboradoras pero solamente en el código de alto nivel. Esto aun nos deja en un mal lugar, aquí es donde la inversión de control tiene lugar.
Echemos una mirada al siguiente código:
Echemos una mirada al siguiente código:
Twittear |
El Principio de inversión de dependencia (DIP) es el quinto y último del acrónimo SOLID y establece que: "Los módulos de alto nivel no deberían depender de módulos de bajo nivel, ambos deberían depender de abstracciones" y "Las abstracciones no deberían depender de detalles sino que los detalles deberían depender de las abstracciones". Si esto no es un buen trabalenguas, los trabalenguas dónde están...
Esto básicamente significa que en ningún lugar de nuestro código deberíamos depender de una implementación actual, sino que en su lugar debemos depender de interfaces o clases abstractas. ¿Y por qué deberíamos hacer esto? Porque esto nos habilita a cambiar cualquier implementación por otra y ninguna otra clase que hayamos codificado debe saberlo o importarle. Si, es así, a ninguna otra clase debe importarle que el cambiemos un colaborador por otro.
Esto básicamente significa que en ningún lugar de nuestro código deberíamos depender de una implementación actual, sino que en su lugar debemos depender de interfaces o clases abstractas. ¿Y por qué deberíamos hacer esto? Porque esto nos habilita a cambiar cualquier implementación por otra y ninguna otra clase que hayamos codificado debe saberlo o importarle. Si, es así, a ninguna otra clase debe importarle que el cambiemos un colaborador por otro.
Por
Juan Barrionuevo
Etiquetas:
DIP,
Diseño,
Objeto,
Principio de inversión de dependencia,
Programación,
SOLID
Twittear |
Esto se torna repetitivo, pero esto es para minimizar el impacto de los cambios que puedan haber sobre nuestro código.
En otras palabras: si tenemos una clase abstracta o una interfaz, entonces, quienes la implementen, no deben ser forzados a implementar partes (métodos o propiedades) que no les importen.
Twittear |
La tercera letra del acrónimo S.O.L.I.D., representa al Principio de sustitución de Liskov (LSP). Establece que "Las funciones que usan punteros o referencias a clases base, deben ser capaces de utilizar objetos o clases derivadas sin necesidad de saberlo". Esto significa que cuando nuestro código usa una clase específica (o una interfaz), éste debería ser capaz de usar otra clase que herede de la específica (o diferentes implementaciones de la interfaz) sin tener que cambiar su comportamiento interno.
Esto, nuevamente, es para minimizar el impacto de los cambios que puedan haber sobre nuestro código.
Los problemas que resuelve LSP casi siempre son fácilmente evitables. Hay algunos habituales signos reveladores de que una violación a LSP aparece en el código. He aquí un escenario que muestra cómo puede ocurrir una violación a LSP.
Esto, nuevamente, es para minimizar el impacto de los cambios que puedan haber sobre nuestro código.
Los problemas que resuelve LSP casi siempre son fácilmente evitables. Hay algunos habituales signos reveladores de que una violación a LSP aparece en el código. He aquí un escenario que muestra cómo puede ocurrir una violación a LSP.
Twittear |
Teniendo en cuenta los comentarios recibidos en la entrada anterior y en forma personal, paso a comentar otra forma de poder cumplir con este principio abierto y cerrado (OCP): la implementación del patrón de diseño strategy.
Este patrón de diseño, establece que los comportamientos no deben heredarse. En su lugar, se deben encapsular usando interfaces.
Para dar un ejemplo, me remitiré a uno ya existente en el libro Head first design patterns.
Debemos programar una simulación de un pato, para ello, creamos una clase abstracta denominada Pato, la cual posee los métodos (o comportamientos) Cuac(), Nadar() y Mostrar(). Todos los patos hacen cuac y nadan, por lo que esta clase implementa dichos métodos. Pero, como todos los patos lucen diferentes, el método Mostrar será abstracto, es decir, se implementará en cada subclase.
Este patrón de diseño, establece que los comportamientos no deben heredarse. En su lugar, se deben encapsular usando interfaces.
Para dar un ejemplo, me remitiré a uno ya existente en el libro Head first design patterns.
Twittear |
La segunda letra del acrónimo S.O.L.I.D., representa al principio Abierto Cerrado. El cuál establece que "Las entidades de software (clases, módulos, funciones, etc.) deben estar abiertas para extensión pero cerradas para modificación". Esto básicamente significa que debemos ser capaces de cambiar el comportamiento externo o las dependencias externas de una clase, sin tener que cambiar físicamente la clase en sí misma. Este tipo de comportamiento nos habilita a cambiar una parte del código sin estar obligado a cambiar otras partes del mismo, siempre y cuando nos mantengamos dentro de los límites del contrato existente.
Suena fácil, pero muchos desarrolladores podemos perder el norte durante la implementación de este enfoque de extensibilidad. No se trata necesariamente por una cuestión de habilidades, sino más bien, que no se nos ha enseñado a abordar este principio en el diseño de clases.
Suena fácil, pero muchos desarrolladores podemos perder el norte durante la implementación de este enfoque de extensibilidad. No se trata necesariamente por una cuestión de habilidades, sino más bien, que no se nos ha enseñado a abordar este principio en el diseño de clases.
Twittear |
El principio de responsabilidad única (SRP) es el primer principio del acrónimo SOLID y establece que "Nunca debe haber más de una razón para que una clase cambie".
Algo con un propósito, una responsabilidad, siempre va a resultar mucho más fácil de cambiar. Esto es simplemente porque se puede ver mucho más claramente lo que hace y lo que no. Además, como tiene una única responsabilidad, no hay chance de que el cambio en el código pueda afectar a otro código, comportamiento quizás, pero código, no. Y mejora en gran medida la reutilización de código.
Finalmente, el código se hace mucho más fácil de probar ya que se puede realizar el test de una responsabilidad en forma aislada de las demás.
Algo con un propósito, una responsabilidad, siempre va a resultar mucho más fácil de cambiar. Esto es simplemente porque se puede ver mucho más claramente lo que hace y lo que no. Además, como tiene una única responsabilidad, no hay chance de que el cambio en el código pueda afectar a otro código, comportamiento quizás, pero código, no. Y mejora en gran medida la reutilización de código.
Finalmente, el código se hace mucho más fácil de probar ya que se puede realizar el test de una responsabilidad en forma aislada de las demás.
Por
Juan Barrionuevo
Etiquetas:
Diseño,
Objeto,
Principio de responsabilidad única,
Programación,
SOLID,
SRP
Twittear |
Toda aplicación nace de los requisitos de una persona que los realiza. Si dichos requisitos fueran inamovibles e inmutables a lo largo del tiempo, las modificaciones de software nunca serían necesarias.
Lamentablemente, esto es sólo una utopía para los programadores y con el correr del tiempo hemos tratado de no caer en las trampas que nosotros mismos nos creamos cuando programamos sin pensar en los cambios que los requerimientos pueden sufrir a lo largo del tiempo.
Entra tantas mejoras que se han ido agregando al desarrollo de software, la programación orientada a objetos (P.O.O.) se ha convertido en un conocimiento que hoy se considera muy importante para esta tarea.
Implementar los principios S.O.L.I.D., nos redundará en una mejora sustancial del diseño y arquitectura de nuestras aplicaciones, haciendo que las mismas sean mucho más flexibles y extensibles.
Este acrónimo mnemotécnico surge de la unión de varios principios básicos de la programación orientada a objetos, explicados en el libro "Agile software development: Principles, Patterns and Practices" por uno de los grandes exponentes de la Artesanía del software: el famoso Uncle Bob (Robert Cecil Martin).
Twittear |
Habiendo desarrollado en la última entrada de este blog el concepto del principio K.I.S.S. y sus beneficios, veremos a continuación la segunda y última entrega de este principio.
Cómo aplicarlo al trabajo diario
Son muchos pasos los que se deben llevar a cabo, muy simples, pero pueden resultar un reto para algunos.
Tan fácil como suena, mantenerlo simple, es sólo cuestión de paciencia. Sobretodo, con uno mismo.
A continuación, veremos los puntos a tener en cuenta para llevarlo a cabo:
Cómo aplicarlo al trabajo diario
Son muchos pasos los que se deben llevar a cabo, muy simples, pero pueden resultar un reto para algunos.
Tan fácil como suena, mantenerlo simple, es sólo cuestión de paciencia. Sobretodo, con uno mismo.
A continuación, veremos los puntos a tener en cuenta para llevarlo a cabo:
- Ser humilde. No pensar en uno mismo como un super genio. Este es el primer error. Siendo humilde, es muy posible alcanzar el estatus de super genio. Pero, aunque así no se lograse, a quién le importa?! El código es simple y estúpido, por lo que no hay que ser un genio para trabajar con él.
- Dividir las tareas en subtareas que, en principio, no deben llevar más de 4-12 horas de codificación.
- Dividir los problemas en pequeños problemas. Cada problema se debe poder resolver dentro de una o muy pocas clases.
- Mantener los métodos pequeños. Cada método no debe tener nunca más de 10-20 líneas y sólo debe resolver un (y sólo un) problema. Si contiene muchas condiciones, hay que dividirlo en métodos más pequeños. (Esto no sólo los hace más legibles y mantenibles, sino que además, encontrar errores es mucho más rápido.
- Mantener las clases pequeñas. Aplicar la misma metodología que con los métodos.
Tweets
Lo más leído del mes
Archivo
-
►
2016
(1)
- ► diciembre 2016 (1)
-
►
2015
(1)
- ► diciembre 2015 (1)
-
►
2014
(6)
- ► noviembre 2014 (1)
- ► febrero 2014 (1)
- ► enero 2014 (4)
-
►
2013
(42)
- ► diciembre 2013 (3)
- ► noviembre 2013 (3)
- ► octubre 2013 (6)
- ► septiembre 2013 (4)
- ► agosto 2013 (3)
- ► julio 2013 (5)
- ► junio 2013 (4)
- ► abril 2013 (5)
-
►
2012
(39)
- ► septiembre 2012 (1)
- ► agosto 2012 (4)
- ► julio 2012 (8)
- ► junio 2012 (3)
- ► abril 2012 (4)
- ► marzo 2012 (6)
- ► febrero 2012 (6)
- ► enero 2012 (4)
-
▼
2011
(15)
- ▼ diciembre 2011 (6)
Estadísticas
144,916
Sponsored Links
Copyright 2009 Programación SOLIDa
BloggerTheme by BloggerThemes |
Design by 9thsphere