Preguntas
12.1. Analice las tres “partes” de un patrén de diseiio y dé un ejemplo conereto de
cada uno en algtin campo distinto del software
Los patrones de diseito son soluciones probadas para problemas comunes en el desarrollo
de software. Los patrones de disefio se dividen en tres partes: la estructura, el
comportamiento y la creacién. A continuacién, se presentan ejemplos concretos de cada
una de estas partes en campos distintos al del software:
Estructura:
La estructura se refiere a cémo los objetos se relacionan entre sf y cémo forman una
estructura mds grande. Un ejemplo concreto de estructura en el campo de la moda es el
patrén de disefio "tela a cuadros” (también conocido como patrén de tartén). Este patrén
consiste en un disefio repetitivo de Iineas horizontales y verticales de diferentes colores que
se cruzan entre sf para formar cuadros. Este patrén se utiliza comiinmente en la ropa
escocesa y se asocia con la cultura escocesa.
Comportamiento:
El comportamiento se refiere a c6mo los objetos interactiian entre sf y cémo se coordinan
para realizar una tarea. Un ejemplo concreto de comportamiento en el campo de la
psicologia es el patron de disefto "condicionamiento clisico”. Este patrén se refiere al
proceso mediante el cual un estimulo neutro se asocia con un estimulo que ya tiene una
respuesta natural para producir una respuesta condicionada. Por ejemplo, si un perro
aprende a asociar el sonido de una campana con la hora de la comida, comenzaré a salivar
al ofr la campana, incluso si la comida no esté presente.
Creacién:
La creacién se refiere a c6mo se crean y se gestionan los objetos en un sistema, Un ejemplo
concreto de creacién en el campo de la arquitectura es el patrén de disefio "estilo gético’
Este patrén se refiere a un estilo arquitect6nico que se desarroll6 en Europa en la Edad
Media y se caracteriza por arcos apuntados, bévedas de cruceria y rosetones. Este estilo se
cre6 en respuesta a las necesidades de la iglesia catdlica de construir edificios mas altos y
més grandes para acomodar a sus congregaciones en crecimiento12.2. ;Cuél es la diferencia entre un patrén no generativo y uno generativo?
En el contexto de la programacién, un patrén de disefio es una solucién generalmente
aplicable a un problema comtin en el desarrollo de software. Existen dos tipos principales
de patrones de disefio: patrones generativos y patrones no generativos.
Un patrén no generativo es aquel que se utiliza para proporcionar una solucién especifica a
tun problema concreto en un programa. Es decir, es una solucién a un problema particular
que no se puede aplicar a otros problemas similares. Este tipo de patrdn se utiliza para
solucionar problemas especificos y no se enfoca en crear nuevas estructuras o elementos
Por otro lado, un patrén generativo es aquel que se utiliza para crear objetos o estructuras
de objetos. Estos patrones proporcionan una forma de crear objetos complejos mediante la
combinacién de objetos més simples. En otras palabras, estos patrones son capaces de
generar nuevos objetos a partir de otros ya existentes.
En resumen, la principal diferencia entre un patrén no generativo y uno generativo es que el
primero se enfoca en solucionar problemas especificos mientras que el segundo se enfoca
en crear nuevas estructuras y objetos a partir de elementos més simples.
12.3. ;En qué difieren los patrones arquitect6nicos de los patrones de componentes?
Los patrones arquitecténicos y los patrones de componentes son dos tipos diferentes de
patrones de disefio utilizados en el desarrollo de software. A continuacién se detallan
algunas de las principales diferencias entre ellos:
Prop6sito: los patrones arquitecténicos se utilizan para describir la estructura general de un
sistema de software, incluyendo su organizaci6n, comunicacién y comportamiento, Por otro
lado, los patrones de componentes se utilizan para describir cémo se pueden estructurar y
organizar los componentes de un sistema de software.
Escala: los patrones arquitecténicos son de mayor escala y se enfocan en el diseiio de
sistemas grandes y complejos. En cambio, los patrones de componentes se centran en el
disefio de componentes individuales y su interacci6n dentro de un sistema,
Abstraccién: los patrones arquitecténicos son més abstractos y proporcionan un marco
general para la organizacién y el disefio de un sistema. Los patrones de componentes son
mis concretos y se enfocan en Ia estructura interna de los componentes individuales.
Relacién: los patrones de componentes son a menudo utilizados dentro de los patrones
arquitect6nicos para describir la estructura interna de los componentes y cémo se
relacionan entre si
En resumen, los patrones arquitect6nicos y los patrones de componentes se utilizan para
diferentes propdsitos y en diferentes escalas de disefto de software. Los patrones
arquitect6nicos describen la estructura general de un sistema, mientras que los patrones de
Componentes describen cémo se pueden estructurar y organizar los componentes
duales dentro de un sistema.12.4. ,Quées estructura y en qué difiere de un patrén? ;Qué es un idioma y en qué se
diferencia de un patrén?
En el contexto del disefio de software, los términos “estructura”, “patrén” e “idioma” se
refieren a conceptos relacionados pero diferentes:
Estructura: se refiere a la organizaci6n o disposicién de los elementos de un sistema de
software. La estructura de un sistema puede incluir componentes, médulos, clases,
funciones, ete. La estructura se enfoca en cémo los elementos estén organizados y
relacionados entre sf
Patrén: se refiere a una solucién generalmente aplicable a un problema comin en el
desarrollo de software, Un patrén describe un conjunto de componentes, relaciones y
comportamientos que se pueden utilizar para resolver un problema especifico. Los patrones
se enfocan en cémo los elementos deben estar organizados y cémo se relacionan para
solucionar un problema
Idioma: se refiere a un conjunto completo de patrones y précticas de disefio que se utilizan
en un dominio especifico de software. Un idioma proporciona una forma coherente y
sistemdtica de organizar y diseftar software en un érea particular. Un idioma se enfoca en
cémo se deben estructurar y organizar los elementos en un dominio particular.
Entonces, la principal diferencia entre estructura y patrén es que la estructura se enfoca en
c6mo se organizan los elementos en un sistema, mientras que un patrén se enfoca en c6mo
los elementos deben estar organizados para resolver un problema especifico.
Por otro lado, la principal diferencia entre un patron y un idioma es que un patrén es una
solucién generalmente aplicable a un problema comin en el desarrollo de software,
mientras que un idioma es un conjunto completo de patrones y pricticas de diseiio que se
utilizan en un dominio especifico de software. En otras palabras, un idioma es un conjunto
de patrones y précticas de disefio que se utilizan juntos para resolver problemas en un érea
particular, mientras que un patrén es una solucién especifica para un problema en
particular.12.6. Desarrolle un lenguaje de esqueleto de patrén para un deporte con el que esté
familiarizado. Comience por abordar el contexto, el sistema de fuerzas y los
problemas amplios que deban resolver un entrenador y su equipo. Sélo necesita
especificar los nombres de los patrones y hacer la descripeién frase por frase de cada
uno.
Los jugadores del equipo: once jugadores en el campo de juego, cada uno con habilidades y
roles especificos.
Los oponentes: otro equipo de once jugadores, que intentan ganar el partido.
El balén: objeto central del juego, que debe ser controlado y movido hacia la porterfa del
oponente.
Las reglas: conjunto de normas que rigen el juego y definen lo que es legal e ilegal.
Problemas Amplios que debe Resolver el Entrenador y su Equipo:
Definir la formacién y el estilo de juego del equipo.
Identificar fortalezas y debilidades de los jugadores individuales y del equipo en general.
Desarrollar estrategias para atacar y defender.
Mantener la motivacién y el compromiso de los jugadores.
Lenguaje de Esqueleto de Patrén:
Patrén de Formaci6n: Define la disposicisn tictica de los jugadores en el campo de juego.
Descripcién: Este patrén establece la formacién que el equipo usaré para cada partido. La
formacién debe considerar la habilidad y las caracterfsticas de los jugadores, asf como las
fortalezas y debilidades del equipo y del oponente.
Ejemplo: El equipo jugaré en una formacién 4-4-2, con cuatro defensores, cuatro
mediocampistas y dos delanteros.
Patrén de Estrategia de Ataque: Define cémo el equipo atacaré al oponente para marcar
goles.
Descripcién: Este patrén establece las estrategias y técticas que el equipo utilizaré para
atacar al oponente. Las estrategias deben tener en cuenta la formacién del equipo y del
oponente, asi como las fortalezas y debilidades del equipo y del oponente.
Ejemplo: El equipo utilizara una estrategia de ataque de posesién de balén, con pases cortos
y r§pidos para crear oportunidades de gol.
Patrén de Estrategia de Defensa: Define como el equipo se defendera del oponente para
evitar que marque goles.Descripcién: Este patrén establece las estrategias y técticas que el equipo utilizaré para
defenderse del oponente. Las estrategias deben tener en cuenta la formacién del equipo y
del oponente, asf como las fortalezas y debilidades del equipo y del oponente.
Ejemplo: El equipo utilizard una estrategia de defensa de presién alta, con los defensores
avanzando para presionar al oponente y recuperar el balén.
Patrén de Roles de los Jugadores: Define los roles y responsabilidades de cada jugador en
el equipo.
Descripcién: Este patrén establece los roles y responsabilidades de cada jugador en el
equipo. Los roles deben considerar las habilidades y caracteristicas de cada jugador, asi
como las necesidades del equipo en términos de formacién y estrategia
Ejemplo: El portero es responsable de proteger la porteria y organizar la defensa, los
defensores son responsables de proteger la porterfa y evitar que el oponente marque goles,
Jos mediocampistas son responsables de crear oportunidades de gol y apoyar tanto en
defensa como en at
12.7. Encuentre cinco repositorios de patrones y presente la descripcién abreviada de
los tipos de patrones que contenga cada uno.
The Gang of Four (GoF) Design Patterns: Este es un clasico repositorio de patrones de
disefio de software escrito por Erich Gamma, Richard Helm, Ralph Johnson y John
Vlissides, Contiene 23 patrones de disefio categorizados en tres grupos: patrones de
creacién, patrones de estructura y patrones de comportamiento,
POSA (Pattern-Oriented Software Architecture): Este es un repositorio de patrones de
arquitectura de software compilado por Frank Buschmann, Regine Meunier, Hans Rohnert,
Peter Sommerlad y Michael Stal. Contiene 5 voltimenes y mds de 50 patrones, que cubren
temas como sistemas distribuidos, sistemas de informacién empresarial y sistemas de
tiempo real.
Security Patterns: Este es un repositorio de patrones de seguridad de software desarrollado
por Markus Schumacher, Frank Buschmann y Stefan Rass. Contiene 16 patrones, que
cubren temas como autenticacién, autorizacién, criptografia y deteccién de intrusiones.
UI Patterns: Este es un repositorio de patrones de disefio de interfaces de usuario creado por
Jan Jursa, Contiene més de 100 patrones, que cubren temas como navegacién, basqueda,
formularios y listas.
Game Programming Patterns: Este es un repositorio de patrones de programacién de
videojuegos creado por Bob Nystrom. Contiene 18 patrones, que cubren temas como el
bucle de juego, el control de estado y Ia programacién de TA.12.8. Cuando Christopher Alexander afirma que “un buen disefio no se logra con s6lo
reunir las partes ejecutantes”, ,qué eree usted que quiere decir?
Cuando Christopher Alexander afirma que "un buen disefio no se logra con s6lo reunir las
partes ejecutantes", se refiere a la idea de que el diseiio no se trata simplemente de
ensamblar los componentes individuales de un sistema, sino de comprender la rek
entre ellos y cémo trabajan juntos para crear un todo coherente y funcional.
En otras palabras, no se trata solo de agregar componentes y caracterfsticas a un sistema,
sino de considerar c6mo esos componentes interactiian entre sf y cémo se integran para
lograr los objetivos del sistema en su conjunto. Un buen disefio se basa en una comprensién
profunda de cémo funciona el sistema en su totalidad, y no solo en una coleccién de partes
independientes.
En el contexto del disefio de software, esto significa que no se puede simplemente agregar
caracteristicas y funcionalidades a una aplicacién sin tener en cuenta cémo interactéan con
el resto del sistema y cémo afectan la experiencia del usuario, Se necesita una comprensi6n
completa del sistema para crear un diseiio efectivo y funcional,
12.12. La banda de los cuatro [Gam95] ha propuesto varios patrones de componentes
aplicables a sistemas orientados a objetos. Seleccione uno de ellos (disponibles en web)
y analicelo,
Uno de los patrones de componentes propuestos por la Banda de los Cuatro (GoF) es el
patrén Decorator. El patrén Decorator se utiliza para afiadir funcionalidad a un objeto
dindmicamente, sin modificar su estructura interna,
EI patrén se compone de dos elementos principales: un componente abstracto y uno 0 mis
componentes decoradores. El componente abstracto define la interfaz basica para el objeto
que se va a decorar, mientras que los componentes decoradores afiaden funcionalidad
adicional al objeto. Los componentes decoradores tienen la misma interfaz que el
componente abstracto, lo que les permite ser utilizados de manera intercambiable con el
objeto original,
ando la
En términos de implementacién, el patrén Decorator se implementa uti
composicién. El componente abstracto y los componentes decoradores implementan la
‘misma interfaz, Io que permite que los componentes decoradores envuelvan el componente
abstracto. Cada componente decorador agrega una funcionalidad especifica al objeto
envuelto, y el objeto decorado puede tener miltiples decoradores.
Por ejemplo, en un sistema de venta de cafeterias, el objeto “café” puede ser el componente
abstracto, mientras que los componentes decoradores pueden ser "leche", "azticar", "nata",
etc. Los clientes pueden entonces agregar componentes decoradores adicionales para
personalizar su caf6.E! patrén Decorator es util cuando se quiere aftadir funcionalidad a un
objeto sin modificar su estructura interna o crear subclases excesivas. Permite la extensién
dinémica de la funcionalidad, y también permite la combinacién de diferentes
funcionalidades de manera flexible.12.13. Encuentre tres repositorios de patrones de interfaz de usuario. Seleccione uno
de cada repositorio y haga una descripcién breve de él.
composicién. El componente abstracto y Ios componentes decoradores implementan la
misma interfaz, lo que permite que los componentes decoradores envuelvan el componente
abstracto. Cada componente decorador agrega una funcionalidad especifica al objeto
envuelto, y el objeto decorado puede tener miltiples decoradores.
Por ejemplo, en un sistema de venta de cafeterias, el objeto "café" puede ser el componente
abstracto, mientras que los componentes decoradores pueden ser “leche”,
etc. Los clientes pueden entonces agregar componentes decoradores adicionales para
personalizar su café,
El patrén Decorator es iitil cuando se quiere afiadir funcionalidad a un objeto sin modificar
su estructura interna o crear subclases excesivas. Permite la extensién dinémica de la
funcionalidad, y también permite la combinacién de diferentes fun
flexible.
Encuentre tres repositorios de patrones de interfaz de usuario. Seleccione uno de cada
repositorio y haga una descripcién breve de él
Repositorio 1: UF-Pattemns
Patrén seleccionado: Empty state pattem
Descripcién: El patrén Empty state se utiliza para mostrar una pantalla itil cuando no hay
contenido disponible. En lugar de mostrar una pantalla en blanco, el patron muestra un
mensaje claro y orientativo que indica por qué no hay contenido disponible. Ademis, el
patrdn también puede proporcionar sugerencias y orientacién sobre cémo agregar contenido
6 c6mo navegar por la aplicacién.
Repositorio 2: Material Design
Patron seleccionado: Floating Action ButtonDescripcién: El patrén Floating Action Button
se utiliza para proporcionar una accién principal en la interfaz de usuario. Se trata de un
botén flotante y circular que se coloca en la parte inferior derecha de Ia pantalla, y que se
utiliza para acciones de gran importancia o frecuencia, El botén flotante se coloca sobre el
contenido existente, lo que Io hace faicilmente accesible sin interrumpir la experiencia del
Repositorio 3: Mobile Patterns
Patrén seleccionado: Swipe to Refresh
Descripcién: El patrén Swipe to Refresh se utiliza para actualizar el contenido de una
aplicacién mediante un gesto de desplazamiento hacia abajo en la pantalla. El patrén es itil
para aplicaciones que requieren una actualizaci6n frecuente, como aplicaciones de noticias
o redes sociales. Cuando el usuario desliza hacia abajo en la pantalla, la aplicaci6n muestraun indicador de carga y actualiza automaticamente el contenido cuando se completa la
actualizacién.
12.14, Encuentre tres repositorios de patrones para webapps. Seleccione uno de cada
repositorio y describalos brevemente.
Repositorio 1: UL-Pattems for Web Apps
Patrén seleccionado: Master Detail
Descripeién: El patrén Master Detail se utiliza para mostrar una lista de elementos en una
columna principal (master) y el detalle de cada elemento seleccionado en una columna
secundaria (detail). Es til para aplicaciones con una gran cantidad de contenido que
necesita ser organizado y presentado de manera jerérquica.
Repositorio 2: Web Design Ledger
Patron seleccionado: Infinite Scroll
Descripcién: El patrén Infinite Scroll se utiliza para cargar contenido adicional
autométicamente a medida que el usuario se desplaza hacia abajo en la pagina. Es ttil para
sitios web con una gran cantidad de contenido, como redes sociales 0 sitios de noticias, ya
que permite @ los usuarios explorar el contenido de manera continua sin tener que hacer clic
en paginas adicionales.
Repositorio 3: PatternFly
Patrén seleccionado: Data Table
Descripcién: El patrén Data Table se utiliza para mostrar datos tabulares en una interfaz de
usuario, Es «til para aplicaciones con grandes conjuntos de datos que necesitan ser
organizados y presentados de manera clara y concisa. El patron incluye caracteristicas
como filtrado, ordenamiento y paginacién para facilitar la navegacién y la exploracién de
los datos,