Bienvenido a la sección de Design Patterns(en lo sucesivo identificados como DPs), un espacio para aprender y analizar patrones de diseño. Desde que comencé a estudiar y usar los patrones de diseño siempre me ha gustado, así que le he dedicado un buen tiempo a aprender algunas cosas al respecto.
Esta sección, aunque tendrá los artículos numerados, no necesariamente tienes que leerlos en ese orden. Si bien es cierto que algunos de los DPs están basados en otros más sencillos, he procurado dejar enlaces a los DPs relacionados para que te sea fácil seguir el tema.
Tampoco voy a poner aqui una definición de lo que son los DPs, hay muchas definiciones al respecto, y la mayoría son muy buenas, yo prefiero la de wikipedia, es bastante entendible y te deja claro cual es su verdadero objetivo. También queda claro que un DP no es un simple fragmento de código que puedes copiar y pegar, es más bien un "fragmento de experiencia" que puedes aplicar para resolver un problema con el que alguien más ya se encontró antes y le invirtió tiempo, ingenio y esfuerzo para solventarlo y el resultado de ese esfuerzo únicamente se ha limpiado, estandarizado, diagramado, enlatado y etiquetado para quedar guardado por ahí cuando alguien lo necesite.
Aprender DPs te da poder, no solo de programación, sino de entendimiento, es como cuando aprendes a hablar, cuando sabes pocas palabras, te las tienes que ingeniar con ellas cuando quieres describir algo nuevo, el resultado, pocos conceptos en muchas palabras, pero conforme vas aprendiendo más, te es más fácil comunicarte, entender y conceptualizar con menos palabras.
Lo mismo pasa con los DPs, por ejemplo, supongamos que somos Arquitectos de software o analistas, y tendremos una junta en donde necesitamos trasmitirles a nuestros programadores lo que han de realizar para una parte del sistema, no es una junta dirigida a un cliente, sino a un programador, así que tendríamos un diálogo parecido al siguiente:
"Para esta parte del sistema, se requiere una clase que sirva como base para los objetos que utilizaremos, los cuales tendrán comportamientos similares, sin embargo varios de esos comportamientos se aplicarán solo a una fracción de las clases derivadas, no a todas, además, habrá otras clases de bases distintas a las que también se les deben de aplicar algunos de esos comportamientos, por lo que debemos separarlos y encapsularlos para que sean independientes de las clases a las que se apliquen y puedan variar y/o extenderse sin afectar código que ya funciona"
¿Qué entendiste de este diálogo? ¿Cómo te imaginas la solución? ¿Qué preguntas adicionales tienes? ¿Habran entendido lo mismo todos los programadores?
Ahora, supongamos que tanto nosotros como nuestros programadores conocemos los DPs, entonces diálogo equivalente al anterior quedaría así:
"para esta parte del sistema se requiere una clase que sirva como base para los objetos que utilizaremos, se requiere un Strategy Pattern para los comportamientos que tendrá ya que deberá compartir algunos de ellos con otras clases de base distinta"
Mucho mejor ¿No?, hablas menos, es más conciso, y además, al utilizar conceptos dominados por todos, quedan menos areas propensas a malos entendidos o confusiones.
Seguramente dirás: "Pero para eso mejor hacemos un diagrama UML y así no hay fallo", y tienez razón, pero también, como sabrás, los diagramas a veces pueden ser muy grandes, y si tu cerebro está entrenado para identificar construcciones comunes de DPs en los diagramas, tu comprensión del mismo será mayor.
No pretendo cubrir todos los DPs conocidos sobre el planeta, más bien voy a ir agregando los que he ido utilizando a lo largo de mi agitada vida primero como programador y como Arquitecto de software después.
Aunque el lenguaje de programación es lo de menos en un DP, para codificar los ejemplos he elegido un lenguaje que personalmente me gusta mucho, Pascal, específicamente FreePascal(FPC) y su ya legendario y casi inseparable amigo Lazarus, si nunca has oido hablar de este dúo dinámico, te sugiero que veas lo que dice wikipedia acerca de Lazarus, te sorprenderás al ver lo que puedes hacer con este par. También hay un buen tutorial de Lazarus aquí.
Seguro te preguntarás por qué no elegí C# o Java o algun otro de esos lenguajes que están tan de moda. La verdad, si te soy sincero, estoy un poco cansado de tener que lidiar con ellos todos los días en el trabajo. No niego que al apasionarme la programación, también me gusten muchos lenguajes, y ésos entre elllos, pero elegí pascal y en especial Lazarus porque, además de gustarme, y ser bastante moderno y capaz, me trae buenos recuerdos, sobre todo de la escuela. Llámalo sentimentalismo si quieres, pero disfruto mucho con el mientras programo. Además, no dudo que fácilmente podrás traducir los ejemplos descritos en esta sección al lenguaje de tu preferencia.
En fin, espero que te sea de utilidad lo que aquí encuentres, y si no, por lo menos que te diviertas un rato... Saludos!!
1 comentario:
yeaah!!!
espero el primer patron.
Publicar un comentario