Hola a todos como estan, aqui estoy esta vez para hablar un poco de patrones de software, pero primero tratemos de especificar que es un patron.
Bueno un patron podria definirse como la reutilizacion de conocimiento para atacar un problema recurrente en un proyecto de software, en donde cada patron nombra, explica, evalua un diseño recurrente en sistemas orientados a objetos.
Los elementos que componen un patron son los siguientes:
Bueno un patron podria definirse como la reutilizacion de conocimiento para atacar un problema recurrente en un proyecto de software, en donde cada patron nombra, explica, evalua un diseño recurrente en sistemas orientados a objetos.
Los elementos que componen un patron son los siguientes:
- Nombre: que permite identificar la situación en la cual puede aplicarse el patron.
- Problema: que determina cuando puede usarse el patron explicando para ello el problema y su contexto, cabe aclarar que en algunas ocaciones un problema debe reunir una lista de condiciones antes de que el patron pueda ser usado.
- Solucion: detalla el elemento que describe el diseño, su realizacion, responsabilidad y colaboracion. Tambien hay que mencionar que la solucion no describe un diseño o implementacion concreta por que un patron es como una planilla que puede aplicarse a diferentes situaciones.
- Consecuencias: Son los resultados tanto buenos como malos de hacer el uso de un patron de diseño que serviran para evaluar la relacion costo/beneficio de utilizar el patron
Para comenzar a trabajar con patrones uno de los principales aspectos que debemos tener en cuenta es el preciso momento donde debemos utilizarlos y para ello nos conviene conocer la forma en que estos estan organizados.
- Patrones de diseño: son los responsables de crear instancias de objetos, realizar operaciones entre clases y definir el comportamiento entre ellas
- Patrones de arquitectura: tratan la forma de descomponer, conectar y relacionar sistemas; manejan para ello conceptos como niveles, tuberias y filtros.
- Patrones de programación: especifican lenguajes de programacion y describen como implementar cuestiones concretas.
- Patrones de analisis: conjunto de reglas que permiten modelar un sistema.
- Patrones organizacionales: describen como organizar grupos humanos relacionados con el software.
- Patrones de Software: son patrones de programacion concurrente de interfaz grafica, que administra la organizacion y robustez del codigo y la fase de prueba.
Pero de todos estos patrones vamos a centrarnos en los patrones de diseño (ya que sino no tendria sentido este post :P).
Ahora que ya explicamos los distintos patrones de seguro ya tendremos en la cabeza una pregunta que a mas de uno se la habra echo y es "¿y a mi todo esto en que me ayuda?", para responder esa pregunta podriamos decir que los patrones nos dan una mano cuando necesitamos encontrar objetos que nos permitan desarrollar el sistema, nos ayudan a determinar la granularidad de los objetos, permiten especificar interfaces, especificar la implementacion de clases, favorecer la reutilizacion mediante la composicion y la delegacion.
Si de seguro mas de uno me estara diciendo "para viejo, ¿que es eso de la granularidad?" y bueno podemos decir que la granularidad determina el tamaño de la informacion que existe asociado a las distintas clases que componen el sistema, es decir cuando aumenta la granularidad hay poco detalle y consecuentemente menos clases, mientras que cuando disminuye la granularidad aumenta el detalle y por consiguiente aumenta la cantidad de clases. Todo esto para lograr tener una alta cohesion y un bajo acoplamiento
Mas alla de esa breve explicacion pasemos ahora a ver la clasificacion de los distintos patrones de diseño
Creacion
- Factory Method
- Abstract Factory
- Builder
- Prototype
- Singleton
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
Comportamiento
- Interpreter
- Template Method
- Chain of Responsability
- Command
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Visitor
Bueno esto fue una introduccion pequeña a los patrones de diseño si despues tengo tiempo y ganas continuare el post indicando el uso y descripcion de cada uno de los patrones aqui descriptos, hasta ese momento nos vemos.