Introduccion a Patrones de diseño | Parte # 1

Patrones de diseño

La navaja suiza de los programadores.

Resultado de imagen para navaja suiza png

Hablando de un tema importante y realmente interesante como lo es este podemos decir que los patrones de diseño se pueden clasificar de diferentes maneras.




Iniciamos con el proceso de clasificación de los patrones.
La clasificación ayuda a aprender y entender de forma fácil los patrones

Clasificación

Clasificacion de patrones de diseño 

A nivel general los patrones se clasifican teniendo en cuenta dos criterios:

Propósito

En este tipo criterio es la razón del patrón es por que se crea el patrón o que es lo que hace el patrón a nivel general.
Este criterio los patrones tratan temas de:
  • Creación: El proceso de creación de los objetos.
  • Estructurales: La composición de las clase su objetos.
  • Comportamiento: El modo en que interactivo las clases y los objetos y a demás el reparto de responsabilidades entre ellos.

Ámbito

Este criterio es donde es aplicado el patrón y por ello suelen ser de y se ocupan respectivamente:
  • Clases: Relación entre clases y subclases, relaciones que se establecen por herencia, asociación, dependencia
  • Objectos:  Relaciones entre objetos (relaciones que son dinámicas y cambian en tiempos de ejecución).

¿Que solucionan?

Es realmente importante saber que es lo que solucionan por que estaríamos a siegas por este gran mundo, es importante que tengamos claro que sirven estas cosas que pocas veces se ve por hay y a que me van a ayudar.

A encontrar objetos apropiados.

 y como así que encontrar los objetos apropiados??🤔🤔🤔🤔

Buenos pues vamos a averiguarlo 😬😬 , partimos del paradigma de programación orientada a objetos o POO y de un proceso de desarrollo de software de calidad.

Imaginémonos que vamos a comenzar a hacer un software osea tenemos la idea y queremos es que ya este listo, para mañana es tarde.


Jaja🤣 🤣 🤣 🤣 bueno no, por que ya estaríamos empezando mal, imaginémonos que ya tenemos levantamiento de requerimiento  💪🏽 💪🏽 💪🏽👊🏽👊🏽👊🏽 y comenzamos el proceso de diseño estructural y arquitectonico de la aplicación donde se quiere que el desarrollo sea de otro planeta pero el problema esta difícil de abordar por que se quiere descomponer el sistema en objetos que tenga especificaciones como:

  • Encapsulacion.
  • Singularidad
  • Dependencia
  • Flexibilidad
  • Rendimiento
  • Evolución
  • Reutilización

Es es un poema de código 🤗 🤗 🤗 🤗 🤗Jajaja.

Entonces el problema en si es que es difícil cumplir con todas esas especificaciones para un sistema. Ahora si creamos clases que construyan objetos que de como resultado un sistema que cumpla esas especificaciones podemos decir que somos unos maestros  👍🏽 👍🏽 👍🏽

Pero osea lo que pasa es que este problema es uno de los que los patrones de diseño resuelve.

Un modelado del mundo real conduce a un sistema que refleja las realidades presentes pero no necesariamente la futuras.

Patrones que ayudan a esta tarea(Encontrar objetos apropiados):
  • Composite: Introduce una abstracción para tratar de manera uniforme objetos que no tiene una equivalencia en el mundo real.
  • Strategy: Describe como implementar familias intercambiables de algoritmos.
  • State: Representa cada estado de una entidad como un objeto

A especificar las interfaces de los objetos.

Pero que es una interfaz??

Por el momento no pensemos en eso que tiene Java, PHP y otros lenguajes que no se.

Iniciamos primero definiendo el termino signatura: Una signatura es el conjunto de: nombre, parámetros y tipo de retorno de una operación o método.

Ahora se puede decir que un conjunto de signaturas de un objeto es lo que se llama interfaz del objeto.

La interfaz de un objeto no dice nada acerca de su implementación o mejor dicho de como lo hace. Permitiendo que dos objetos con implementaciones diferentes puedan tener interfaces idénticas.

Ahora la interfaz es lo que caracteriza al conjunto completo de peticiones que se pueden enviar a un objeto.

El termino tipo es  el nombre que se usa para denotar a la interfaz. Se puede decir un un objeto es de tipo Puerta si implementa una interfaz llamada Puerta.


Entonces objetos diferentes que soportan peticiones idénticas pueden tener distintas implementaciones de las operaciones que satisfacen esas peticiones.

Es decir varios objetos pueden hacer la misma cosa poro de deferentes maneras, obviamente teniendo claro que las peticiones son las cosas que hace el objeto y las implementaciones son el como hace las cosas que dice hacer Jajaja.


Otro termino importante es el enlace dinámico es la asociación en tiempo de ejecución entre una petición a un objeto y una de sus operaciones.

El enlace dinámico significa que enviar una petición no nos liga a una implementación particular en tiempo de ejecución lo que permite sustituir los objetos en tiempo de ejecución por otros que tengas la misma interfaz

En conclusión los patrones de diseño ayudan a definir las interfaces sus elementos clave y los tipos de datos que se envían a la interfaz  y ademas nos dicen que no se debe poner en la interfaz y por ultimo ayudar a las relaciones entre interfaces.

Patrones que ayudan a esta tarea(especificar interfaces de objetos):
  • Memento
  • Decorator y/o proxy
  • Visitor

Determinar ls granularidad de los objetos.

Como pueden existir diferentes tipos de objetos que pueden variar en tamaño y numero, pueden representar cualquier cosa desde el hardware hasta una misma aplicación. Entonces el problema esta es en saber que si debe ser un objeto.

Y pues lo patrones de diseño ayudan a saber que si debe ser un objeto

Patrones que ayudan a esta tarea(determinar la granularidad de los objetos):


  • Facade: describre como representar subsistemas completos como objetos.
  • Flyweight: describe como permitir un gran numero de objetos de granularidad fina.
  • Abstract Factory y/o Builder: Su objetivo y única responsabilidad es crear otros objetos.
  • Visitor y/o Command: dan lugar a objetos cuya única responsabilidad es implementar una petición en otro objeto o grupo de objetos.

Glosario

  • Encapsulacion: "Proceso de ocultar la representación e implementación de un objeto. La representación no es visible y no se puede acceder a ella directamente desde el exterior del objeto. EL único modo acceder a la representación de un objeto y de modificarla es a través de sus operaciones(metodos)". 
  • Granularidad: Nivel de detalle de algo; parte del concepto de que después es mas fácil reutilizar unidades mas pequeñas;


Continuara.....

Bibliografía


  • GAMMA, E. (2002). PATRONES DE DISENO. [S.l.]: ADDISON-WESLEY, pp.9-13,230.


0 Comentarios