Diseño de Patrones
Diseño de Patrones
Diseño de Patrones
2020-I
Introducción
Hablar de diseño, cada uno hemos tenido un problema y pensar siempre: ¿Habrá
solución para esto? La respuesta a esa pregunta es casi si, donde el problema es
encontrarla. Estas soluciones o métodos están codificadas las cuales se llaman patrones
de diseño, estos patrones se emplean para describir problemas y sus soluciones la cual
permite a la comunidad de ingeniería de software el conocimiento del diseño en forma
tal que sea posible reutilizarla.
Como se mencionó en párrafo anterior, en el presente ensayo se desarrollarán temas en
relación para la creación de aplicaciones nuevas a partir de un conjunto de soluciones
probadas para el conjunto de problemas, pero ¿Quién los hace? Los que deben
desarrollar los diseños basados en patrones son los ingenieros de software ya que ellos
analizan y catalogan cada problema para encontrar una solución relevante que debe ser
descrito por un patrón. Estos patrones son importantes ya que al implementarlas las
solucione se integran y la aplicación que se está desarrollando se acerca al diseño final.
Cada patrón nos describe un problema que indica el contexto y hace que el usuario
entienda el ambiente, en este tema se verá diferentes puntos de los diseños de patrones:
Patrones Arquitectónicos
Patrones de diseño en el nivel de componentes
Patrones de diseño de la interfaz de usuario
Patrones de diseño de WEBAPP
¿Qué es un patrón de diseño?
Investigando me topé con muchas definiciones, todas ellas se refieren a que son una
especie de solución a problemas típicos en programación. Te explican de una manera
muy centrada que la aparición de estos problemas no es nada nuevo y que desde hace
tiempo alguien ya ha logrado solucionarlos. Si la forma de solucionar ese problema se
puede extraer, explicar y reutilizar en diversas situaciones, entonces nos encontramos
ante un patrón de diseño. Esto ayuda, por ejemplo, a que un nuevo programador no
requiera conocimiento de lo que otro ha realizado. El software creado resulta más fácil
de entender, mantener y extender. A continuación, describiré brevemente los tipos de
patrones y el propósito de cada uno. Cabe destacar que los patrones se dividen en
distintos grupos según el tipo de problema que resuelven.
Patrones Arquitectónicos
o Control de acceso:
En situaciones en las que el acceso a datos, características y funciones
realizadas por una aplicación, desde un punto de vista arquitectónico, el
acceso a cierta parte de la arquitectura del software debe controlarse de
manera rigurosa.
o Concurrencia:
Las aplicaciones deben manejar tareas múltiples de manera que simule.
Hay varias formas distintas en las que una aplicación maneja la
concurrencia y cada una puede presentarse con un patrón arquitectónico
diferente.
o Distribución:
El problema de la distribución se aboca a la manera en la que los
sistemas o componentes de los sistemas se comunican entre sí en un
ambiente distribuido. Se toman en cuenta dos subproblemas: 1) la forma
en la que se conectan las entidades una con la otra y 2) la naturaleza de la
comunicación que tiene lugar
o Persistencia:
Los datos persistentes se almacenan en una base de datos o archivos que
pueden ser leídos o modificados por otros procesos en un momento
posterior. En los ambientes orientados a objetos, la idea de un objeto
persistente extiende un poco más el concepto de persistencia. Los valores
de todos los atributos del objeto, el estado general de éste y otra
información complementaria se almacenan para su recuperación y uso
futuro.
Antes de que pueda elegirse cualquiera de los patrones arquitectónicos
representativos mencionados en los párrafos anteriores, debe evaluarse lo
apropiado que es para la aplicación y el estilo arquitectónico general, así como el
contexto y sistema de fuerzas que especifiquen.
o AdvancedSearch:
Los usuarios deben encontrar un objeto específico en una gran colección
de ellos.
o HelpWizard:
Los usuarios necesitan ayuda acerca de cierto tema relacionado con el
sitio web o necesitan encontrar una página específica dentro del sitio.
o SearchArea:
Los usuarios deben encontrar una página.
o SearchTips:
Los usuarios requieren saber cómo controlar el motor de búsqueda.
o SearchResults:
Los usuarios tienen que procesar una lista de resultados de una búsqueda.
o SearchBox:
Los usuarios tienen que encontrar un objeto o información específicos.
o Distribución de la página.
Se aboca a la organización general de páginas (para sitios web) o de
distintas pantallas (para aplicaciones interactivas).
Patrón: ApilarTarjetas (CardStack)
Se utiliza cuando deben seleccionarse aleatoriamente cierto número de
subfunciones o categorías de contenido específicas relacionadas con una
característica o función. Tiene la apariencia de una pila de tarjetas con
“pestaña”, cada una seleccionable con un clic del ratón, que representan
subfunciones o categorías de contenido específicas.
o Formatos y entrada.
Considera varias técnicas de diseño para llenar las entradas en el nivel de
formato.
Patrón: Llenar los espacios
Permite introducir datos alfanuméricos en un “cuadro de texto”.
Los datos entran en un cuadro de texto. En general, se validan y procesan
después de pulsar algún indicador de texto o gráfico (como un botón que
diga “ir”, “enviar”, “siguiente”, etc.). En muchos casos, este patrón se
combina con una lista desplegable u otros patrones.
o Tablas.
Dan una guía para el diseño a fin de crear y manipular datos tabulares de
todo tipo.
Patrón: OrdenarTabla (SortableTable)
Despliega una lista larga de registros que pueden ordenarse por medio de
un mecanismo de cambio para cualquier etiqueta de columna. Cada
renglón de la tabla representa un registro completo. Cada columna
representa un campo del registro. Cada encabezado de columna en
realidad es un botón seleccionable que se pulsa para iniciar un
ordenamiento ascendente o descendente en el campo asociado con la
columna para todos los registros desplegados. Por lo general, la tabla es
ajustable y tiene algún mecanismo de desplazamiento para el caso de que
el número de registros sea más grande que el espacio disponible en la
ventana.
o Navegación.
Ayuda al usuario a navegar a través de menús jerárquicos, páginas web y
pantallas interactivas.
Patrón: Editar (EditInPlace)
Brinda capacidades de edición de texto sencillo para ciertos tipos de
contenido en la ubicación que se muestra en la pantalla. No es necesario
que el usuario introduzca explícitamente alguna función de edición de
texto o algún modo.
El usuario observa en la pantalla el contenido que debe modificarse. Con
un doble clic en el contenido, se indica al sistema que se desea editar. El
contenido se resalta para indicar que el modo de edición está activado
para que el usuario haga los cambios apropiados.
o Búsqueda.
Permite hacer búsquedas de contenido específico a través de información
conservada en un sitio web o que está contenida en almacenamientos
persistentes de datos accesibles a través de una aplicación interactiva.
Patrón: BúsquedaSimple (SimpleSearch)
Da la capacidad de buscar un sitio web o fuente persistente de datos para
un concepto simple de datos descritos por una cadena alfanumérica.
Brinda la capacidad de hacer una búsqueda local (una página o un
archivo) o global (todo el sitio o la base de datos completa) para la
cadena de búsqueda. Genera una lista de “aciertos” ordenados según su
probabilidad de satisfacer las necesidades del usuario. No hace
búsquedas de conceptos múltiples o con operaciones booleanas
especiales.
o Elementos de página.
Implanta elementos específicos de una página web o de una pantalla del
monitor.
Patrón: Mago (Wizard)
Lleva al usuario paso a paso a través de una tarea compleja y lo guía para
que la termine por medio de ventanas sencillas en la pantalla.
El ejemplo clásico es un proceso de registro de cuatro etapas. El patrón
mago genera una ventana en cada una de ellas, en las que solicita
información del usuario paso a paso.
o Comercio electrónico.
Específicos para sitios web, estos patrones implementan elementos
recurrentes de las aplicaciones de comercio electrónico.
Patrón: CarritodeCompras (ShoppingCart)
Enlista artículos, cantidad, código del producto, disponibilidad (en
inventario, fuera de inventario), precio, información para la entrega,
costos de envío y otra información relevante para la compra. También da
la facilidad de editar (por ejemplo, retirar, cambiar la cantidad, etcétera).
o Varios.
Son patrones que no se ajustan fácilmente a ninguna de las categorías
anteriores. En ciertos casos, dependen del dominio u ocurren sólo para
clases específicas de usuarios.
Patrón: IndicadordeAvance (ProgressIndicator)
Se representa con un icono animado o cuadro de mensaje que contiene
alguna indicación visual (por ejemplo, una “barra de peluquero”, barra de
avance con indicador de porcentaje, etc.) de que el procesamiento está en
curso. También contiene una indicación de texto acerca del estado del
procesamiento.
o Centrarse en el diseño
Los problemas (y soluciones) que se encontrarán cuando se diseñe una
arquitectura de información para una webapp serán diferentes de
aquellos que aparecen cuando se diseña una interfaz. Por tanto, no debe
sorprender que los patrones para el diseño de webapps se desarrollen
para distintos niveles de atención, de modo que se aborden los problemas
(y sus soluciones) únicos que se encuentren en cada nivel.
Los patrones de webapps se clasifican con el empleo de los siguientes
niveles de atención en el diseño:
Patrones de arquitectura de la información:
se relacionan con la estructura general del espacio de información
y con las formas en las que los usuarios interactúan con ésta.
Patrones de navegación:
Definen estructuras de los vínculos de navegación, tales como
jerarquías, anillos, recorridos, etcétera.
Patrones de interacción:
Contribuyen al diseño de la interfaz de usuario. Los patrones en
esta categoría se enfrentan al modo en el que la interfaz informa
al usuario de las consecuencias de una acción específica, cómo
expande el usuario el contenido con base en el empleo del
contexto y sus deseos.
Patrones de presentación:
Ayudan a presentar el contenido al usuario a través de la interfaz.
Los patrones en esta categoría se abocan al modo de organizar las
funciones de control de la interfaz de usuario para mejorar su uso,
a mostrar la relación entre una acción de la interfaz y los objetos
de contenido a los que afecta y a la forma de establecer jerarquías
eficaces del contenido.
Patrones funcionales:
Definen los flujos de trabajo, comportamientos, procesamiento,
comunicación y otros elementos algorítmicos dentro de una
webapp.
Patrones arquitectónicos.
Se relacionará por lo común con patrones que definen la
estructura general de la webapp, que indican las relaciones entre
diferentes componentes o incrementos y que definen las reglas
para especificar las relaciones entre los elementos (páginas,
paquetes, componentes y subsistemas) de la arquitectura.
Patrones de diseño.
Éstos se abocan a un elemento específico del diseño, como un
agrupamiento de componentes, a fin de resolver algún problema
de diseño, relaciones entre los elementos de una página, o
mecanismos para efectuar la comunicación entre componentes.
Patrones de componentes.
Se relaciona con elementos individuales de pequeña escala de una
webapp.
Entonces, ¿cómo identifico qué patrón encaja con mi problema? La verdad es que no
hay una guía en donde consultar la solución exacta de tu problema, sino que esto se
aprende mediante la práctica. La experiencia es la mejor forma de ser más hábil
detectando dónde se puede aplicar un patrón de diseño. Por suerte, en libros y sitios de
internet (blogs personales y paginas oficiales) es posible encontrar a personas que
comparten de su conocimiento y de su tiempo libre para ayudar a superar los posibles
obstáculos que se nos presenten.
Conclusión
El libro “Ingeniería de Software: Un Enfoque Practico” fue una obra de gran utilidad
que nos permitió a comprender más a fondo el tema de cómo se lleva el diseño basado
en los patrones, y como se puede apreciar a lo largo de este ensayo, la utilización de
patrones permite una flexibilidad en la creación o en el desarrollo de aplicaciones.
Bajo la idea de los diseños basados en patrones es una pieza clave para la creación de
proyectos ya que nos ayuda en las posibles soluciones que nos brinda un problema y
porque será utilizado un conjunto de métodos, estos nos permiten enlistar en un sistema
de fuerza que indica que nos permite de cómo se puede interpretar los problemas en el
cual nos permitiría definir el contexto, gracias a este conjunto de circunstancias que
rodean dichas situaciones, no se podría comprender correctamente las soluciones.
Cabe destacar que si hacen un uso malo de los patrones o tienen descuidos se podrá
presentar una serie de problemas la cuales son: retrasos en los desarrollos de proyectos,
problemas con la mantenibilidad del software, poca reutilización de los patrones.
Es importante saber que no se necesita ser un experto en diseños o programación y es
por eso por lo que, nosotros como autores de este ensayo podemos decir que el diseño
basado en patrones son recursos que todo programador o ingeniero de software debería
saber y aplicarlo en sus aplicaciones, por ende, a los estudiantes no se le debe de
enseñar de la manera tradicional, sino deberían ser introducidos de una manera práctica.
Bibliografía