Introducción a los Patrones de Diseño ❝ Un código elegante no es aquel que tiene menos líneas, si no el que saca mayor provecho de ellas ❞ ─ Oscar Blancarte (2016) 2 | P á g i n a Datos del autor: Ciudad de México e-mail: [email protected] Autor y Editor © Oscar Javier Blancarte Iturralde Queda expresamente prohibida la reproducción o transmisión, total o parcial, de este libro por cualquier forma o medio; ya sea impreso, electrónico o mecánico, incluso la grabación o almacenamiento informáticos sin la previa autorización escrita del autor. Composición y redacción: Oscar Javier Blancarte Iturralde Edición: Oscar Javier Blancarte Iturralde Portada Arq. Jaime Alberto Blancarte Iturralde Primera edición Se publicó por primera vez en Octubre del 2016 V1.5 3 | P á g i n a Acerca del autor Oscar Blancarte es originario de Sinaloa, México donde estudió la carrera de Ingeniería en Sistemas Computacionales y rápidamente se mudó a la Ciudad de México donde actualmente radica. Oscar Blancarte es un Arquitecto de software con más de 11 años de experiencia en el desarrollo y arquitectura de software. Certificado como Java Programmer (Sun microsystems), Análisis y Diseño Orientado a Objetos (IBM) y Oracle IT Architect (Oracle). A lo largo de su carrera, ha trabajado para diversas empresas del sector de TI, entre las que destacan su participación en diseños de arquitectura de software y consultoría para clientes de los sectores de Retail, Telco y Health Care. Oscar Blancarte es además autor de su propio blog http://www.oscarblancarteblog.com desde el cual está activamente publicando temas interesantes sobre Arquitectura de software y temas relacionados con la Ingeniería de Software en general. Desde su blog ayuda a la comunidad a resolver dudas y es por este medio que se puede tener una interacción más directa con el autor. 4 | P á g i n a 5 | P á g i n a Agradecimientos Este libro tiene una especial dedicación a mi esposa, Liliana, por brindarme todo su apoyo y amor incondicional. Por estar siempre conmigo y comprenderme durante la redacción de este libro. A mis padres, por todos los sacrificios que han hecho para hacerme la persona que hoy soy. 6 | P á g i n a Prefacio Este libro fue creado con la intención de enseñar a sus lectores a utilizar los patrones de diseño de una forma clara y simple, desde un enfoque práctico y con escenarios del mundo real. Tengo que aceptar que este no es un libro convencional de patrones de diseño debido, principalmente, a que no sigue la misma estructura de las primordiales obras relacionadas con este tema. En su lugar, me quise enfocar en ofrecer una perspectiva del mundo real, en donde el lector pueda aprender a utilizar los patrones de diseño en entornos reales y que puedan ser aplicados a proyectos reales. Cuando empecé a estudiar sobre patrones de diseño, me di cuenta que siempre se explicaban en escenarios irracionales que poco o ninguna vez podrías utilizar, como por ejemplo para aprender a crear figuras geométricas, hacer una pizza o crear una serie de clases de animales que ladren o maúllen; esos eran los ejemplos que siempre encontraba, que si bien explicaban el concepto, se complicaba entender cómo llevarlos a escenarios reales. En este libro trato de ir un poco más allá de los ejemplos típicos para crear cosas realmente increíbles. Por ejemplo: Crear tu propia consola de línea de comandos. Crear tu propio lenguaje para realizar consultas SQL sobre un archivo de Excel. Crear aplicaciones que puedan cambiar entre más de una base de datos, por ejemplo, Oracle y MySQL según las necesidades del usuario. Administrar la configuración global de tu aplicación. Crear un Pool de ejecuciones para controlar el número de hilos ejecutándose simultáneamente, protegiendo nuestra aplicación para no agotar los recursos. Utilizar proxis para controlar la seguridad de tu aplicación. 7 | P á g i n a Utilizar estrategias para cambiar la forma en que los usuarios son autenticados en la aplicación; como podría ser por Base de datos, Webservice, etcétera. Crear tu propia máquina de estados para administrar el ciclo de vida de tu servidor. Éstos son sólo algunos de los 25 ejemplos que abordaremos en este libro, los cuales están acompañados, en su totalidad, con el código fuente para que seas capaz de descargarlos, ejecutarlos y analizarlos desde tu propia computadora. Finalmente, abordaremos los ejemplos con UML y conceptos fundamentales de la programación orientada a objetos como lo son la Herencia, Polimorfismo, Encapsulamiento, Abstracción, Cohesión y Acoplamiento; de los cuales hablaremos en las secciones A y B de este mismo libro. 8 | P á g i n a Cómo utilizar este libro Este libro está compuesto por tres grandes secciones, en las cuales se habla de los tres tipos de patrones de diseño; Creacionales, Estructurales y de Comportamiento. Cada patrón de diseño está estructurado de la siguiente manera: Introducción: Se explica de forma teórica en qué consiste el patrón de diseño, su estructura, componentes y cuándo deberíamos utilizarlo. Escenario: Se expone un escenario de la vida real en el cual podríamos utilizar el patrón de diseño para después solucionarlo. Solución: Se intenta resolver el escenario planteado utilizando patrones de diseño. Implementación: Manos a la obra, en esta sección utilizaremos código para programar la solución propuesta. Ejecución: Ejecutaremos el código desarrollado para comprobar los resultados tras implementar el patrón de diseño. Siguientes pasos: Breve resumen de lo aprendido y se plantean una serie de ejercicios para resolver con la finalidad de afianzar los conocimientos adquiridos. El código lo puedes descargar en: Repositorio: Java: https://github.com/oscarjb1/IntroduccionPatronesDiseno.git C#: https://github.com/oscarjb1/design-patterns-cs Archivo descargable: Java: https://github.com/oscarjb1/IntroduccionPatronesDiseno/archive/master.zip C#: https://github.com/oscarjb1/design-patterns-cs.git NOTA: Este libro tiene un gran diferencial al resto y es que puedes buscarme a través de mi blog http://www.oscarblancarteblog.com/libros/introduccion-los- patrones-diseno/para consultarme cualquier duda que tengas y con mucho gusto te responderé, de igual forma, puedes enviarme tus comentarios y sugerencias para mejorar este libro. 9 | P á g i n a Requisitos previos Este libro está pensado para programadores principiantes que emprenden su carrera como programadores de software o para programadores avanzados que no han tenido la oportunidad de tener un entrenamiento apropiado de los patrones de diseño. Es por esta razón que cualquiera con los conocimientos básicos de la programación orientada a objetos, podrá entender el contenido de este libro. Cada patrón de diseño va a acompañado de un diagrama de clases y de secuencia en UML, por lo que conocimientos básicos de UML pueden ser requeridos para comprender mejor el patrón. No te preocupes si no comprendes algunos de los conceptos básicos de POO o UML ya que en las secciones A y B abordaremos brevemente estos temas. 10 | P á g i n a