Cuando trabajamos con proyectos medianos o grandes, es bueno contar con metodologías que nos ayuden en muchas ocasiones a simplificar el trabajo, sea que trabajemos solos o en equipo, y si trabajamos en equipo, que tengamos la añadidura de todos hablar el mismo "idioma", o mejor, el mismo "dialecto" (ya que el idioma vendría siendo el lenguaje :-) jejeje) gracias a dichas metodologías.
Por ésta razón he decidido empezar una serie de artículos en las que iremos estudiando poco a poco algunos patrones de diseño y cómo implementarlos en Java. Pero antes que nada, veamos qué son los patrones de diseño o design patterns.
¿Qué son los Patrones de Diseño o Design Patterns?
Un patrón de diseño o pattern design consiste en un diagrama de objetos que forma una solución a un problema conocido y frecuente. Dicho diagrama de objetos está constituido por un conjunto de objetos descritos por clases y las relaciones que enlazan los objetos.
Así como en otras áreas de la Ingeniería se han desarrollado a lo largo de la historia modelos a seguir, por ejemplo en la Ingeniería Civil, existen modelos de buenas prácticas para llevar a cabo una Obra, muchos de los cuales incluso son obligatorios de implementar en ciertos casos; sin embargo en la programación esa palabra "obligación" desaparece, ya que a la final, es el programador quien decide cuál es la mejor solución para su problema en cuestión y tiene la total libertad de decidirse a usar o no un Patrón de Diseño.
Los patrones de diseño responden a problemas de diseño de aplicaciones en el marco de la Programación Orientada a Objetos. Se trata de soluciones conocidas y probadas cuyo diseño proviene de la experiencia de los programadores. No existe un aspecto teórico en los patrones, en particular no existe una formalización (a diferencia como sucede en el caso de los algoritmos).
Los patrones de diseño están basados en las buenas prácticas de la programación orientada a Objetos. Por ejemplo, la siguiente figura muestra el patrón Template method que describiremos en una posterior entrada. En éste patrón, el método calculaPrecioConIVA invoca al método calculaIVA abstracto de la clase Pedido.
Dicho método (calculaIVA) Está definido en las subclases de Pedido, en este caso, las clases PedidoEspaña y PedidoColombia. En efecto, el IVA varía en función del país. Al método calculaPrecioConIVA se le llama "modelo" (template method). Este método introduce un algoritmo basado en un método abstracto.
Dicho método (calculaIVA) Está definido en las subclases de Pedido, en este caso, las clases PedidoEspaña y PedidoColombia. En efecto, el IVA varía en función del país. Al método calculaPrecioConIVA se le llama "modelo" (template method). Este método introduce un algoritmo basado en un método abstracto.
Este patrón está basado en el polimorfismo, una propiedad importante de la programación orientada a objetos. El precio de un pedido en España o en Colombia está sometido a un impuesto sobre el valor añadido. No obstante la tasa no es la misma, y el cálculo del IVA difiere en España y en Colombia. Por consiguiente, el patrón Template method constituye una buena ilustración del polimorfismo.
Los patrones se introducen en 1995 con el libro del llamado "GoF", de Gang of Four (en referencia a la "banda de los cuatro" autores), llamado "Dessign Patterns -Elements of Reusable Object-Oriented Software" escrito por Erich Gama, Richard Helm, Ralph Johnson y John Vlissides. Este libro constituye la obra de referencia acerca de patrones de diseño.
Los patrones de diseño no son exclusividad del lenguaje de programación Java, ya que como lo dije anteriormente, son la implementación de buenas prácticas en la programación Orientada a Objetos.
Sin embargo, Java es un lenguaje Orientado a Objetos por excelencia, así que éste será el lenguaje escogido para ejemplificar cada uno de los patrones de diseño que iremos estudiando. Así mismo, también usaré el lenguaje de modelización UML, ya que éste nos permite comprender de manera rápida y gráfica los ejemplos expuestos mediante Diagramas de Clase y/o Diagramas de Objetos.
No hay comentarios.:
Publicar un comentario