Subido por Juan Luis Cueto Morelo

PAATRONES DE DISEÑO

Anuncio
PATRONES DE DISEÑO DE
SOFTWARE
Juan Luis Cueto Morelo
Octubre 2023
—
Ingenienria De Software
—
Jimmy Jose Sanchez Garcia
RESUMEN
Bien sabido es que en la
programacion orientada a objetos,
los patrones en una estructura bien
fundamentada son muy usuales. La
colaboracion entre los ojetos de las
clases hace que para facilitar el
entendimiento del codigo y que
este sea mas claro, entendible, bien
definido
y
estructurado
se
convierta en una base fundamentar
a la hora de escribir codigo y
diseñar el sistema, es decir, la
arquitectura del software.
En este informe se resaltará la
importancia de los patrones de
diseño en el software, se verá como
y que tan importantes son para un
sistema, ademas de saber y
entender que solucionan dichos
patrones. Ademas, se mencionaran
muchos de los mas conocidos y se
hará enfasis en dos de ellos para
ejemplificar la importancia de los
mismos.
PATRONES DE DISEÑO
PÁGINA 2
LOS PATRONES DE DISEÑO EN LA INGENIERIA
¿QUE SON?
Christopher Alexander fue un arquitecto que reunió diversos patrones
reutlilizables para formar una colección, involucrando (era la intencion) a los
usuarios a futuro de las construcciones en el proceso de diseño. De ahí que el
concepto de “Patrones De Diseño” haya surgido con enfoque hacia la contruccion.
Poco despues, dicha iniciativa fue adoptada por cientificos informaticos como
Erich Gamma, Richard Helm, Ralph Jonson y Jhon Vlissides en la que se
conoce como “Gang Of Four”. Lo que en 1994 fue un potenciador muy
importante para los patrones de softwre en el libro Design Patterns - Elements of
Reusable Object-Oriented Software.
Los patrones de diseño son modelos que nos sirven de herramientas para dar y
buscar soluciones a diversos problemas muy comunes en el entorno del desarrollo
de software no solo con codigo, si no que tambien pueden usarse en el diseño de
interfaces. De manera analoga podemos decir que los patrones de diseño son como
los muy populares frameworks que conocemos hoy en dia (como vue.js, angular,
react, entre otros), su uso puede ser en diversos ambientes para dar solucion a
cualquier problema que nos encontremos sin importar en que lenguaje estemos
programando.
PATRONES DE DISEÑO
PÁGINA 3
Los patrones en general describen un problema muy comun y evidentemente, la
solucion del mismo, pero con una paeculiaridad: la reutilizacion, es decir, dar una
o varias solciones a uno o mas problemas de tal manera que esa solucion pueda
aplicarse una y otra vez sin tener que repetir lo mismo una y otra vez. Y se
conforman por 4 elementos basicos:
1. Un nombre que describe un problema de diseño ademas de sus soluciones
y consecuencias.
2. Un problema que da la claridad acerca de cuando se debe aplicar.
3. La solucion del problema, la cual describe los elementos que conforman el
diseño, las relaciones, responsabilidades y colaboraciones.
4. Las consecuencias de los resultados, ventejas y desventajas de la aplicación
del patron y consecuencias como flexibilidad, extensibilidad y portabilidad
del sistema.
En otras palabras, los patrones de diseño se pueden definir como “descripciones
de clases y objetos relacionados que estan particularizados para resolver un
problema de diseño general en un determinado contexto”. Nomina, abstrae e
identifica aspectos clave de una estructura de diseño comun, de ahí su efectividad
para la creacion de diseño orientado a objetos reutiizable.
En cuento a su funcionamiento, identifica clases e instancias que forman parte del
problema, los roles de cada una y las colaboraciones entre ellas. Patrones de diseño
hay muchos, pero cada uno se enfoca en un problema en especifico y señala como
se aplica si las restricciones de diseño lo permiten de manera óptima así como las
consecuencias de su utlizacion.
Cabe resaltar que un patron de diseño, aunque se habla de que es similar a un
framework, no es como ellos en el sentido de que no se puede “descargar una
plantilla y editarla a nuestro gusto”, ya que no estamos hablando de un codigo
funcional escrito en algun lenguaje de programacion, librerias, etc. Los patrones
suelen tener en su descripcion un proposito en el que se explica brevemente el
problema y la solucion, motivacion que profundiza mas en estos dos aspectos,
estructura de lases que muestra cada parte del patron y sus relaciones y un breve
ejemplo funcional de la manera de como funciona para facilitar su entendimiento
por parte de los programadores y cualquiera que lo utilice.
PATRONES DE DISEÑO
PÁGINA 4
¿PARA QUE SIRVEN?
Como se ha mencionado en lineas anteriores, los patrones de dieño nos permiten
diseñar soluciones y reutlilizarlas cuantas veces queramos. En la ingeieria de
software escribir codigo es algo simple, pero en realidad no lo es tanto como
parece, ya que en la actualidad la escalabilidad y reutilizacion son factores
determinantes en el éxito de cualquier tipo de proyecto, de manera mas especifica,
el objetivo es que el codigo escrito pueda ser entendido y reutilizado por cualquiera
las veces que sean necesarias.
En resumidas cuentas, los patrones de diseño sirven para crear modulos que otros
desarrolladores puedan utilizar, entender y mejorar si es posible. Hay que resaltar
que los patrones deben ser estandar, es decir, su lenguaje debe ser universal entre
programadores, los codigos deben ser reutilizables y no enfatizar en cosas que ya
estan resualtas.
Escribir codigo de manera correcta y resolver problemas de manera mas
estandar y sencilla.
¿QUE SOLUCIONAN?
El problema de agilidad en el desarrollo de una solución es un tema de vital
importancia a la hora de desarrollar software, los patrones de diseño sirven como
aceleradores para este proceso utilizando un modelo que ya está y que se puede
comprobar que tuvo resultados exitosos.
Los desarrolladores usan estos patrones para darle solución a problemas comunes
de diseño, además de optimización en cuanto al rendimiento del sistema, ¿a que
nos referimos con esto? Simple y sencillamente se trata de un software lo mas
eficiente posible y en consecuencia, una mejor experiencia de usuario para los
clientes que se beneficien de dichas solucione además de que utilizando patrones,
al ir diseñando de manera “ordenada” es posible detectar y corregir errores y
mejorar el código en gran medida.
Código entendible y bien estructurado, menor inversión de tiempo y esfuerzo,
mayor calidad de software, mayor escalabilidad y fácil ubicación de objetos debido
a la buena estructuración son de las principales ventajas del uso de estos.
PATRONES DE DISEÑO
PÁGINA 5
¿CUALES SON LOS
PATRONES DE DISEÑO?
PATRONES DE DISEÑO
PÁGINA 6
Los patrones de los que hablamos se clasifican en tres grandes categorias:
1. Creacionales: su fundamento es la instancia, la creacion de las mismas.
Encapsulamiento de conocimiento de las clases y privatizar el proceso de
creación e instancia. Entre ellos se encuentran:
 Factory Method(a nivel de clase) define una interfaz para crear un
objeto dejando que las subclases decidan que clase instanciar,
permitiendo así que una clase padre asigne tareas de creacion de
objetos en sus subclases.
 Abstract Factory proporciona una interfaz para la creacion de
familias de objetos con alguna interdependencia sin definir las
clases a las que pertenecen.
 Builder separa la construccion de un objeto complejo de su
representacion de tal manera que el mismo constructor pueda crear
representaciones distintas.
 Prototype especifica los tipos de objeto que serán creados por una
intancia prototipica y crea nuevos objetos copiando de ese mismo
prototipo.
 Singleton garantiza relaciones unarias, es decir, que una clase solo
tenga una sola instancia.
PATRONES DE DISEÑO
PÁGINA 7
2. Comportamantales: tal como se entiende, se fundamenta en el
comportamiento, pero a nivel de aplicación, su logica apunta a solucionar
problemas de relaciones y asignaciones entre clases y objetos.
 Interpreter (a nivel de clase), dado un lenguaje, se encarga de definir
una representacion de su gramatica junto con un intérprete que usa
dicha representacion para interpretar sentencias de codigo.
 Template Method (a nivel de clase) define en una operación la
estructura de un algoritmo asignando en las subclases algunos de
sus pasos, permitiendo aque las subclases redefinan algunos pasos
del algoritmo sin alterar su estructura.
 Chain of Responsability evita acoplar el emisor de una peticion a su
receptor, esto, al brindar a varios objetos la posibilidad de dar
respuesta a la solicitud, a su vez crea una cadena con los objetos
receptores y transfiere la solicitu por medio de la cadena hasta que
algun objeto la atienda.
 Command encapsula una peticion de un objeto, permitiendo
parametrización a los clientes que presentan diversas peticiones,
encola o lleva un registro de las peticiones ademas de tener la
capacidad de deshacer operaciones.
 Iterator proporciona una manera de acceso secuancial a los
elementos de un objeto añadido sin poner su representacion
interna.
 Memento representa y externaliza el estado interno de un objeto sin
vulnerar su encapsulado, de tal manera que este pueda volver a
dicho estado mas adelante.
 Mediator define un objeto que encapsula la forma en que se
relaciona un conjunto de objetos, promoviendo un minimo
acoplamiento al evitar que los objetos “señalen” a otros de manera
directa permitiendo ina interaccion independiente entre ellos.
PATRONES DE DISEÑO
PÁGINA 8
 Observer define una dependencia de uno a muchos entre objetos de
tal forma que cuando un objeto tenga cambios en su estado se
notifique a los demas objetos que dependen de el y en consecuencia,
actualicen su estado tambien.
 State permite que un objeto pueda alterar su comportamiento a
medida que su estado interno vaya cambiando, haciendo así, una
impresión de que la clase del objeto cambia.
 Strategy define una familia de algoritmos encpsulandolos y
haciendolos intercambiables, permitiendo así que un algoritmo
varie de manera independiente a los clientes que lo utilizan.
 Visitor representa una operación sobre los elementos de una
estructura de objetos permitiendo definir una operación nueva sin
cambiar las clases de los elementos sobre los que trabaja.
PATRONES DE DISEÑO
PÁGINA 9
3. Estructurales: como su nombre lo indica, su fundamento es la estructura
de las clases, es decir, la composicion como suestructuras para formar
estructuras.
 Adapter(a nivel de clase y objeto) transforma la interfaz de una clase
a la que los clientes esperan, permitiendo la cooperacion entre clases
que de manera distinta no podrian tener interfaces asociadas.
 Bridge desacopla una abstraccion de su implementacion de tal
manera que ambas puedan variar de forma independiente.
 Composite combina objetos en estructuras de arbol para
representar jerarquias de parte-todo, permitiendo que los clientes
traten de manera uniforme a los ojetos individuales y a los
compuestos.
 Decorator añade de manera dinamica nuevas responsabilidades a
un objeto, proporcionando una nueva alternativa flexible a la
herencia para extender la funcionalidad.
 Facade proporciona una interfaz unificada para un grupo de
interfaces de un subsistema, definiendo una interfaz de alto nivel
que hace que el subsistema sea mas facil de usar.
 Flyweight usa el compartimento para permitir un gran numero de
objetos de grano fino de forma eficiente.
 Proxy proporciona un reemplazo a delegado de otro objeto para
controlar el acceso al mismo.
PATRONES DE DISEÑO
PÁGINA 10
Los patrones de diseño mencionados anteriormente son muy utilizados y
conocidos desde Gang Of Four mencionado al inicio de este informe. De los que
detallaremos el patron estructural Facade y uno no mencionado aquí pero de uso
muy relevante en la actual era de la tecnologia: El Modelo MVC.
Mas en detalle, el patron estructural Facade, proporciona una interfaz unificada
para un grupo de interfaces de un subsistema, definiendo una interfaz de alto nivel
que hace que el subsistema sea mas facil de usar.
Esto surge de la necesidad de una buena experiencia de usuario, es decir, para que
un software tenga aceptacion uno de los principales requisitos es que sea facil de
usar, de ahí el objetivo de facade, reducir la complajidad de un sistem a nivel de
interfaces, reducir la comunicación y las dependencias entre los subsistemas que
conforman al principal. La solucion que describe este patron es incorporar un
objeto nuevo que actúe como fachada proporcionado una interfaz unitaria y
simple para los servicios mas generales del subsistema.
En teoría, si un usuario quiere realizar una tarea de, por ejemplo, desarrollar un
ejercicio matemático en la calculadora de una app, no necesita de saber lo que esta
por debajo, solo le interesa que su calculo se realice, hacer visible todas las
interfaces que realizan los procedimientos solo le complicaría su experiencia, de
ahí que solo se necesite una interfaz mas general, o de alto nivel, que actúe como
fachada cubriendo a las demás para que solo sea visible la vista que muestra el
resultado del cálculo. Cabe resaltar que las interfaces de menor nivel no se ocultan
completamente, si no que quedan disponibles por si alguien las necesita en algún
momento.
Este patrón se utiliza cuando se quiera dar una interfaz sencilla a un sistema de
alta complejidad, ya que trabajar por subsistemas puede convertir a cada uno en
algo muy complejo. La aplicación de patrones puede retornar en un gran número
de clases pequeñas buscando “simplificar” el sistema y que sea más reusable y fácil
de personalizar. Precisamente esa simplicidad es lo que hace que se vuelva muy
complejo para los clientes que lo usan; de ahí que facade sea tan útil.
PATRONES DE DISEÑO
PÁGINA 11
Este patrón se utiliza cuando se quiera dar una interfaz sencilla a un sistema de
alta complejidad, ya que trabajar por subsistemas puede convertir a cada uno en
algo muy complejo. La aplicación de patrones puede retornar en un gran número
de clases pequeñas buscando “simplificar” el sistema y que sea más reusable y fácil
de personalizar. Precisamente esa simplicidad es lo que hace que se vuelva muy
complejo para los clientes que lo usan; de ahí que facade sea tan útil.
Otra situación en la que se usa este patrón es cuando las dependencias entre
cliente y clase que implementan abstracciones son muchas. En esta situación se
inserta una fachada que desacople el subsistema de los clientes y de los demás
subsistemas, fomentando así la independencia entre ellos. También se puede
señalar el hecho de querer dividir en varias capas el sistema, usando una fachada
se define una entrada en cada nivel o capa, en caso de que sean dependientes es
posible reducir las dependencias ya que solo tendrían que comunicarse por medio
de sus fachadas.
En cuanto al funcionamiento, los clientes se comunican con el subsistema deseado
a través de la fachada, sus peticiones todas son enviadas por este medio, una vez
recibidas las envía a los objetos del subsistema que cumplen con las características
para cumplir con la petición. Además, los clientes que suelen usar la fachada no
necesariamente tienen que acceder a los objetos propios del subsistema de manera
directa.
Es válido recalcar que al ocultar las partes del subsistema se reduce la cantidad de
objetos con los que interactúa el cliente simplificando así el sistema haciéndolo as
fácil de usar, al usar fachada se reduce el acoplamiento entre componentes
permitiendo la modificación de componentes si afectaciones mayores a cliente
además de eliminar dependencias complejas, y finalmente no impedimento para
que las aplicaciones o demás entidades usen las clases del subsistemas si es
necesario.
PATRONES DE DISEÑO
PÁGINA 12
Por otro lado, tenemos al muy conocido patrón MVC:
El modelo MVC por sus siglas en inglés, también conocido como Model – View Controller o Modelo – Vista – Controlador es una forma de distribución de tareas,
el cual actúa como separador de código por cada tarea, es decir, divide los códigos
de un proyecto en partes separadas a las cuales se les asignan tareas en específico,
para de esta manera lograr mayores beneficios, este modelo trabaja por capas y
generalmente se trabaja en los sistemas que tienen como partes funcionales
Interfaces De Usuario (no limitándose solo a este caso) para diversas aplicaciones.
Por otra parte, para el caso de las necesidades que los clientes y desarrolladores
experimentan a diario, mediante este modelo se permite diseñar y fortalecer
programas, de tal manera que su estructura funcional, no funcional y externa sea
mucho más efectiva, siendo el software más adecuado para la actividad, aportando
ganancias como una mayor facilidad de mantenimiento, separación de códigos
por tareas y principalmente la reutilización de código.
Como ya se ha mencionado líneas más arriba, este modelo tiene como fundamento
la división de código por tareas, esto en tres capas, las cuales se definen en su
nombre: los modelos, las vistas y los controladores los cuales definiremos a
continuación:
 LOS MODELOS: esta corresponde a la capa primaria, y es en esta donde se
trabaja con todo lo que respecta a los datos, es decir, aquí se contienen los
medios con los que se accede a la información y los medios que dan la
capacidad para manipular el estado de dicha información: selectores,
modificadores, para insertar, entre otros. Cabe resaltar que la información
de la que se habla generalmente se encuentra contenida en bases de datos,
y la manera en la que se accede a esta es por medio de un lenguaje de acceso
que se basa en las clases/objetos dejando de lado los procesos de acceso
que dependen de los motores de bases de datos utilizados.
 LAS VISTAS: esta capa es la responsable de contener todo el código
funcional que muestra las interfaces de usuario, es decir, procesos de
salida, resaltando que aquí se trabajan con datos que se envían a los
Modelos y en estas se genera la salida según lo requiera el sistema.
 LOS CONTROLADORES: esta es la última capa del modelo, en esta se
contiene toda la parte de código correspondiente a los procesos de
respuesta a las solicitudes que recibe el sistema, por ejemplo, agregar nueva
información, realizar una venta, buscar la información de un producto, ver
la lista de todos los productos, etc. Esto que acabamos de decir, puede
compararse a una especie de camino o puente entre las capas de Modelos y
Vistas ya que esta capa no actúa como operando sobre la información,
solamente envía la información que recibe para que las demás capas la
procesen y le devuelvan a esta misma capa una salida o respuesta.
PATRONES DE DISEÑO
PÁGINA 13
A continuación, se presenta un diagrama corto sobre la manera en la que opera el
Modelo – Vista – Controlador:
Este es un diseño de cómo funciona el modelo MVC, los usuarios acceden a la
aplicación, ejecutan el controlador (interfaz gráfica), luego ingresan información
que el controlador comparte entre el modelo y la vista para que sea procesada y
finalmente se le envíe una respuesta al usuario, aunque en ocasiones es el
controlador el que le presenta la respuesta al usuario.
PATRONES DE DISEÑO
PÁGINA 14
REFERENCIAS
[1] iitalomorales. (2015, 14 de septiembre). Patrones de diseño: ¿qué son y
para qué sirven? [Blog post]. Platzi. https://platzi.com/blog/patrones-dediseno/
[2] Refactoring Guru. (s. f.). What is a Design Pattern? [Blog post].
Recuperado 16 de octubre de 2023, de
https://refactoring.guru/es/design-patterns/what-is-pattern
[3] Design Patterns: Elements of Reusable Object–Oriented Software, 1ª
edición, Ed. Addison-Wesley Profesional (10 de noviembre de 1994).
[4] Gamma, Erich, Richard Helm Ralph Johnson and John Vlissides (1995).
Design Patterns: Elements of Reusable Object-Oriented Software.
Addison-Wesley. ISBN 0-201-63361-2.
[5] IONOS. (s. f.). ¿Qué son los Design Patterns? [Blog post]. Recuperado 16
de octubre de 2023, de https://www.ionos.es/digitalguide/paginasweb/desarrollo-web/que-son-los-design-patterns/
[6] Padua, M. (2023, 4 de octubre). Patrones de diseño, descripciones
estandarizadas para problemas repetitivos [Blog post]. IT Masters Mag.
https://www.itmastersmag.com/noticias-analisis/patrones-de-disenodescripciones-estandarizadas-para-problemas-repetitivos/
[7] EcuRed. (s.f.). Facade. Recuperado el 16 de octubre de 2023, de
https://www.ecured.cu/Facade
[8] Desarrollo Web. (s.f.). Qué es MVC. Recuperado el 16 de octubre de 2023,
de https://desarrolloweb.com/articulos/que-es-mvc.html
PATRONES DE DISEÑO
PÁGINA 15
Descargar