En muchas ocasiones es difícil para un desarrollador de software establecer la diferencia entre un programador junior y un semi-senior, si bien es cierto que la diferencias no están del todo claras y va a depender de cada caso, una de las formas mas sencillas de clasificación la realizan por años de experiencia y no es del todo precisa, pero es lo que hay y además la más fácil de demostrar y analizar, porque es una característica cuantitativa. Sin embargo, entrando en un terreno más técnico y de aplicación, uno como desarrollador puede no sólo basarse en los años que lleve programando, sino mas bien en cómo lo hace.
Vamos a aterrizar los conceptos, el "cómo lo hace" es decir, el cómo programa puede medirse, sí, y no es tan sencillo porque ya deja de ser una cualidad cuantitativa como los años de experiencia, y pasa a ser cualitativa, me refiero a si utiliza patrones de diseño y si lo aplica bien según el proyecto lo requiera, sumado a esto está la aplicación de una arquitectura adecuada para cada proyecto, pero de este tema hablaremos en la siguiente entrada 😉
Los patrones de diseño del software son soluciones planteadas para un problema de diseño de un sistema informático dado, esta solución no puede ser cualquiera sino que debe poseer una comprobada efectividad ante los mismos problemas de diseño en el pasado y debe además ser reutilizable para diversas situaciones parecidas en diferentes realidades y contextos.
Su origen de forma inesperada
Los patrones de diseño son un concepto traído de otra disciplina, como muchos otros a lo largo de la historia, y fue por el año de 1979 cuando el arquitecto Christopher Alexander publicó su libro "The timeless way of building" en este libro él hace referencia a los patrones utilizados en la construcción, haciendo una sana crítica y comparación a la arquitectura antigua y moderna y la reducción en la calidad de las edificaciones.
"Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno y entonces se describe el núcleo de la solución a dicho problema de tal forma que se puede usar esta solución un millón de veces sin hacerlo dos veces de la misma forma”
Christopher Alexander
Sin duda un importante libro para la ingeniería civil y la arquitectura, pero sin imaginarlo un libro más trascendental para la incipiente Ingeniería de software.
Tomando forma
Unos años después, para ser exactos en 1987 Ward Cunningham de Tektronix, Inc. y Kent Beck de Apple Computer notaron que a los nuevos programadores de la época que comenzaban a aprender programación orientada a objetos recibían una instrucción pobre, casi empírica y sin estándares, se alejaba más de ser una ciencia y se asemejaba más al arte y la inspiración del momento del programador para con la forma en que estructuraba y programaba. Pero hubo algo más que ellos notaron: el gran parecido que existe entre la arquitectura de las edificaciones y la de la programación orientada a objetos. Con esto en mente se referenciaron del trabajo previo hecho por personajes como Christopher Alexander, Sara Ishikawa, Murray Silverstein, Max Jacobson, Ingrid Fiksdahl-King y Shlomo Angel y tomaron cartas en el asunto.
Es así, que publicaron en ese año “Using pattern languages for object-oriented programs” en la cual diseñaron y formalizaron los primeros 5 patrones en la industria del software, eso sucede cuando dos genios se juntan, los enumeraré en su lenguaje original tal como fue postulado por ellos:
- Window Per Task
- Few Panes Per Window
- Standard Panes
- Short Menus
- Nouns and Verbs
Unos años después, en 1994 los "Gang of Four" conformados por Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides recogen 23 patrones de diseño y los plasman en su libro "Design patterns" haciendo oficial ya a estas alturas el uso de la frase patrones de diseño y quedando más que claro, lo provechoso que es utilizarlos en los proyectos de desarrollo de software.
Clasificación y tipos de patrones
Existen en la actualidad tres clases de patrones y son:
- Patrones creacionales: Describen formas para crear objetos o instancias de una clase
- Patrones estructurales: Describen las maneras en que las clases se relacionan entre sí
- Patrones de comportamiento: Indican la responsabilidad que tendrán los objetos
No quiero dejarte con la duda, así que vamos a mencionar todos los patrones por cada clase, en patrones creacionales tenemos los siguientes:
- Factory method
- Abstract factory
- Singleton
- Builder
- Prototype
- Object pool
- Repository
En patrones estructurales tenemos:
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
Finalmente en patrones de comportamiento tenemos:
- Iterator
- Command
- Observer
- Template method
- Strategy
- Chain of Responsability
- Interpreter
- Mediator
- Memento
- Null object
- State
- Visitor
- DTO
Veamos brevemente una aplicación práctica de estos patrones, tomaremos como ejemplo el patrón Factory Method, dado que este patrón nos dice cómo crear objetos y es útil cuando no sabemos en tiempo de diseño que clase de objeto usaremos o queremos hacer que la lógica de la aplicación determine el objeto a crear, entonces podemos aplicarlo a un sistema que requiere conectarse a dos gestores de base de datos distintas, por ejemplo SQL Server y PostgreSQL, su aplicación y código está plasmado en un libro, sigue leyendo... 😉
Ahora que lo tenemos un poco más claro toca que investigues algunos de ellos, no es necesario que los sepas todos, con que aprendas los más importantes ya tienes un gran avance (recuerda a nuestro amigo Pareto 😄), además recuerda que los patrones no es algo que uno aprende de memoria y lo aplica tal cual, sino más bien algo con lo que uno se familiariza con la práctica tanto así que al escuchar la problemática de un sistema, reconoce el patrón a utilizar y lo aplica.
Finalmente, estimados lectores, como ustedes saben, si hay algo bueno lo recomiendo, así que en esta ocasión les tengo una recomendación bárbara: el libro titulado "Introducción a los patrones de diseño - Un enfoque práctico" del buen amigo Oscar Blancarte, muchos de los conceptos aquí vertidos así como el ejemplo fueron basados en su libro, el cual estoy leyendo, y tiene un ejemplo por cada patrón, lo cual es genial! y muy poco común en libros de estos temas y está en español, así que te animo a que consideres adquirirlo desde https://reactiveprogramming.io/books/design-patterns/es y a echarle un ojo a su blog https://www.oscarblancarteblog.com ya que tiene otros libros y talleres muy provechosos.
Si este contenido te ha aportado valor como desarrollador considera compartirlo y hacer que llegue a mas devs como tú, hasta la próxima crack! 😉
4 comentarios en «Patrones de diseño de software y su aplicación»