Diferencia entre revisiones de «Patrón de diseño»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Sin resumen de edición
Framontb (discusión · contribs.)
Deshecha la edición 29802754 de 190.40.97.235 (disc.)
Línea 1: Línea 1:
Los '''patrones de diseño''' (''design patterns'') son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de [[software]] y otros ámbitos referentes al diseño de interacción o interfaces.
== Representación Arquitectónica ==
El producto software Call Center PLUS está conformado por cuatro subsistemas funcionales fundamentales:


Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.
'''''Operaciones '''''
Atender las solicitudes e inquietudes de los clientes, por consiguiente registrar cada movimiento de ello (consultas, reclamos, citas con soporte técnico, etc.).


'''''Supervisión'''''
Encargada de la supervisión, control de horarios y gestionar la operatividad de los Operadores, aparte de ello cumplir metas y objetivos trazados por la alta gerencia (Plan de trabajo) y control de los servicios (en este caso atención al cliente).


== Breve reseña histórica ==
'''''Departamento de Calidad '''''
En [[1979]] el [[arquitecto]] [[Christopher Alexander]] aportó al mundo de la arquitectura el libro '''The Timeless Way of Building'''; en él proponía el aprendizaje y uso de una serie de patrones para la construcción de edificios de una mayor calidad.
Encargada de evaluar al personal y asignar su respectiva capacitación.


En palabras de este autor, "Cada patrón describe un problema que ocurre infinidad de veces en nuestro entorno, así como la solución al mismo, de tal modo que podemos utilizar esta solución un millón de veces más adelante sin tener que volver a pensarla otra vez."
'''''Soporte Técnico'''''
Brinda el soporte de ensamblado, reparación y mantenimiento de los equipos dentro del centro de llamadas.


Los patrones que Christopher Alexander y sus colegas definieron, publicados en un volumen denominado ''A Pattern Language'', son un intento de formalizar y plasmar de una forma práctica generaciones de conocimiento arquitectónico. Los patrones no son principios abstractos que requieran su redescubrimiento para obtener una aplicación satisfactoria, ni son específicos a una situación particular o cultural, son algo intermedio. Un patrón define una posible solución correcta para un problema de diseño dentro de un contexto dado, describiendo las cualidades invariantes de todas las soluciones.
[[Archivo:SAD.png|thumb|600px|center|Arquitectura [[CallCenterPlus]]]]


Más tarde, en [[1987]], [[Ward Cunningham]] y [[Kent Beck]] usaron varias ideas de Alexander para desarrollar cinco patrones de interacción hombre-ordenador (HCI) y publicaron un artículo en OOPSLA-87 titulado '''Using Pattern Languages for OO Programs'''.
== Referencias ==


No obstante, no fue hasta principios de los 90's cuando los '''patrones de diseño''' tuvieron un gran éxito en el mundo de la informática a partir de la publicación del libro [[Design Patterns]] escrito por el grupo [[Gang of Four]] ('''GoF''') compuesto por [[Erich Gamma]], Richard Helm, Ralph Johnson y John Vlisides, en el que se recogían 23 patrones diseño comunes.
* [[Documento de Especificación de requerimientos de Software – SRS]]


== Objetivos de los patrones ==
* [[Documento de Especificación del Caso de Uso]]


Los patrones de diseño pretenden:
* [[Documento de Arquitectura del Software (SAD)]]
* Proporcionar catálogos de elementos reusables en el diseño de sistemas software.
* Evitar la reiteración en la búsqueda de soluciones a problemas ya conocidos y solucionados anteriormente.
* Formalizar un vocabulario común entre diseñadores.
* Estandarizar el modo en que se realiza el diseño.
* Facilitar el aprendizaje de las nuevas generaciones de diseñadores condensando conocimiento ya existente.


Asimismo, no pretenden:
* [[Prototipo visual del producto]]
* Imponer ciertas alternativas de diseño frente a otras.
* Eliminar la creatividad inherente al proceso de diseño.


No es obligatorio utilizar los patrones, solo es aconsejable en el caso de tener el mismo problema o similar que soluciona el patrón, siempre teniendo en cuenta que en un caso particular puede no ser aplicable. '''Abusar o forzar el uso de los patrones puede ser un error'''.


== Posicionamiento ==
== Categorías de patrones ==


Según la escala o nivel de abstracción:
Actualmente existen muchas empresas en nuestro medio, los cuales no cuentan con un sistema que les permita satisfacer las consultas e inquietudes de sus clientes vía teléfono, todo esto por la falta de un buen control y seguimiento ante sus necesidades; por tal motivo las empresas se ven afectadas con excesivos reclamos, insatisfacción de sus clientes, los clientes están propensos a irse otras empresas competidoras, etc. Por otro lado internamente se observa la falta de capacitación al personal (no hay una comunicación efectiva con el cliente), es así, que se ocasiona una pérdida considerable de clientes (actores potenciales para la empresa), y finalmente se tiene una baja sustancial de ventas y disminución de ingresos para las empresas.
* '''Patrones de arquitectura''': Aquéllos que expresan un esquema organizativo estructural fundamental para sistemas software.
* '''Patrones de diseño''': Aquéllos que expresan esquemas para definir estructuras de diseño (o sus relaciones) con las que construir sistemas software.
* '''Idiomas''': Patrones de bajo nivel específicos para un lenguaje de programación o entorno concreto.




Además, también es importante reseñar el concepto de '''[[Antipatrón de Diseño]]''', que con forma semejante a la de un patrón, intenta prevenir contra errores comunes de diseño en el software. La idea de los antipatrones es dar a conocer los problemas que acarrean ciertos diseños muy frecuentes, para intentar evitar que diferentes sistemas acaben una y otra vez en el mismo callejón sin salida por haber cometido los mismos errores.
== Enunciado del problema ==
{| class=wikitable
|-
| '''El problema de la'''
| Baja calidad y gestion de atención al cliente.
|-
| '''Afecta'''
| Al crecimiento y desarrollo de la empresa.
|-
| '''El impacto el cual es'''
| La insatisfacción de los clientes.
|-
| '''Una solución satisfactoria seria'''
| La implementación de un software que permita lograr un buen seguimiento y control de los clientes de la empresa, satisfaciendo de manera oportuna e inmediata las necesidades e inquietudes (consultas, reclamos, información, adquisición de productos, etc.) de los clientes de la empresa, así como también ofrecer un mejor servicio y hacer llegar de mejor manera nuestros productos.
|-
| '''Para'''
| [[CompuRed SAC]]
|-
| '''Quien'''
| Necesita un sistema para un centro de llamadas, para poder atender de manera satisfactoria a todos sus clientes, de cada una de las tiendas distribuidas en el país, aprovechando obtener la fidelidad de los clientes.
|-
| '''CallCenter Plus'''
| Es la herramienta de gestión a utilizar.
|-
| '''Que'''
|
* Permite resolver de manera inmediata y oportuna los reclamos y consultas (seguimiento y orientación al cliente para realizar la solución del mismo).
* Permite brindar información completa y detalla de los servicios, productos, etc. que ofrece la empresa.
* Permite la elaboración de nuevas políticas de atención al cliente, estrategias de ventas, campañas, etc., todo esto en base a la información que obtenga de nuestros clientes.
* Permite mantener informado a la alta gerencia, con los reportes emitidos por el centro de llamadas (cuadros estadísticos, resúmenes de solicitudes, etc.).
* Regla sustancial mantener al cliente la fidelidad para con la empresa.
|-
| '''A diferencia'''
|La forma en que actualmente se administra la información, donde no se tiene perfecta información de cada tipo de cliente : sus características, su rentabilidad, su potencial de crecimiento, sus tendencias, su fidelidad, etc
|-
| '''Nuestro Producto'''
|
* Atender consultas de los clientes las 24 horas del día. y su respectiva solución de ello.
* Atender reclamos y separar cita en caso no solucionarse.
* Crear reportes varios como reclamos y consultas (Notas) de los clientes, para su posterior análisis y de enviarlos a los stakeholders correspondientes con el objetivo de elaborarse nuevas estrategias de negocio.
* Atender ventas, vía teléfono según los requerimientos del usuario.
|-
|}


Debo argumentar además de los patrones ya vistos actualmente existen otros patrones como el siguiente:
== Descripción de Stakeholder y Usuarios ==
* '''Interacción''':Patrones que nos permiten el diseño de interfaces web.


=== Resumen de Stakeholder ===
{| class=wikitable
! Nombre
! Descripcion
! Responsabilidades
|-
| '''Gerente Empresa STK1'''
| Encargado de la aprobación y ejecución de los diferentes planes estratégicos del negocio.
|
* Asegura que el proyecto cumpla con la satisfacción de las necesidades por parte de los clientes.
* Monitorea el proyecto y el progreso como este se viene realizando y evolucionando.
* Aprueba la financiación del proyecto.
|-
| '''Supervisor STK2'''
| Mantener informado al gerente de los avances y el cumplimiento de los planes.
|
* Define metas y objetivos.
* Define tiempos por llamadas.
* Control de asistencia de personal.
* Delegar responsabilidades a los operadores.
* Brindar atención inmediata de help desk a los operadores.
* Formular grupo de trabajo y hacer cumplir las metas encomendadas por el supervisor.
|-
| '''Jefe de Calidad STK4'''
| Encargado de las estrategias de atención de calidad a los clientes y elaborar reportes sobre la calidad de atención por parte de los operadores
|
* Evaluar atención brindada por cada operador.
* Seguimiento y control de cada uno de los operadores
* Visualizar Campañas.
* Reportar Notas de Calidad para su previo análisis.
* Elaborar capitación para el personal.
|-
| '''Jefe Soporte Técnico STK5'''
| Dar mantenimiento a los equipos preventivo y correctivo.
|
* Registrar Averias.
* Reportar averías.
|-
| '''Operador STK6'''
| Persona encargada de recibir y atender las llamadas.
|
* Registrar notas varias de los clientes.
* Registrar reclamos.
* Registrar citas para atención de reclamos.
* Registra las solicitudes de pedido, solicitudes de inserción.
* Registrar las consulta.
* Registrar Ventas.
|-
|}
=== Resumen de usuarios ===
{| class=wikitable
! Nombre
! Descripcion
! Responsabilidades
! Stakeholder
|-
| '''Operador'''
| Maneja el sistema de registro y control de llamadas.
| Atender reclamos, consultas, etc. de los clientes y emisión de notas respectivas.
| '''Operador STK6'''
|-
|}


== Estructuras o plantillas de patrones ==
=== Entorno de Usuario ===
Para describir un patrón se usan plantillas más o menos estandarizadas, de forma que se expresen uniformemente y puedan constituir efectivamente un medio de comunicación uniforme entre diseñadores. Varios autores eminentes en esta área han propuesto plantillas ligeramente distintas. Si bien la mayoría definen los mismos conceptos básicos.
Actualmente se satisfacen las necesidades de los usuarios de la siguiente manera :


La plantilla más común es la utilizada precisamente por el GoF y consta de los siguientes apartados:
* Cada tienda cuenta con un personal (operador) que atiende las llamadas a sus respectivos clientes.
* '''Nombre del patrón''': nombre estándar del patrón por el cual será reconocido en la comunidad (normalmente se expresan en inglés).
* Para registrar la información (reclamos, consultas, información, etc.) se utiliza el programa Excel de la suite de office, es por ello la existencia de las “notas sobre el cliente”, que ayudan a medir la satisfacción como indicador, son registrados en el programa block de notas.
* '''Clasificación del patrón''': creacional, estructural o de comportamiento.
* La búsqueda de un cliente en su repositorio de información (Excel, block de notas) vuelve lento el sistema de atención para atender las siguientes llamadas.
* '''Intención''': ¿Qué problema pretende resolver el patrón?
* Terminada la labor, la información es guardada en el disco duro, para su posterior utilización.
* '''También conocido como''': Otros nombres de uso común para el patrón.
* La alta gerencia, muchas veces no está informada de lo que ocurre en cada una de las tiendas.
* '''Motivación''': Escenario de ejemplo para la aplicación del patrón.
* '''Aplicabilidad''': Usos comunes y criterios de aplicabilidad del patrón.
* '''Estructura''': Diagramas de clases oportunos para describir las clases que intervienen en el patrón.
* '''Participantes''': Enumeración y descripción de las entidades abstractas (y sus roles) que participan en el patrón.
* '''Colaboraciones''': Explicación de las interrelaciones que se dan entre los participantes.
* '''Consecuencias''': Consecuencias positivas y negativas en el diseño derivadas de la aplicación del patrón.
* '''Implementación''': Técnicas o comentarios oportunos de cara a la implementación del patrón.
* '''Código de ejemplo''': Código fuente ejemplo de implementación del patrón.
* '''Usos conocidos''': Ejemplos de sistemas reales que usan el patrón.
* '''Patrones relacionados''': Referencias cruzadas con otros patrones.


== Relación de principales patrones GoF ==
La solución que se propone, es implantar un centro de llamadas que atienda a los clientes de todas las tiendas, de esta manera pueda evaluarse la labor de los operadores, tener un buen control y seguimiento de todo el personal involucrado, gestionar la información del cliente y guardar la información en una base de datos para su posterior re utilización y ser analizado por los stakeholders correspondientes.


=== Patrones creacionales ===
*[[Abstract Factory (patrón de diseño)|Abstract Factory]] (Fábrica abstracta): Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre sí y haciendo transparente el tipo de familia concreta que se esté usando.
*[[Builder (patrón de diseño)|Builder]] (Constructor virtual): Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.
*[[Factory Method (patrón de diseño)|Factory Method]] (Método de fabricación): Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística para elegir el subtipo que crear.
*[[Prototype (patrón de diseño)|Prototype]] (Prototipo): Crea nuevos objetos clonándolos de una instancia ya existente.
*[[Patrón de diseño Singleton|Singleton]] (Instancia única): Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.


=== Patrones Estructurales ===
=== Necesidades Claves de los Stakeholder o Usuarios ===
*[[Adapter (patrón de diseño)|Adapter]] (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.
{| class=wikitable
*[[Bridge (patrón de diseño)|Bridge]] (Puente): Desacopla una abstracción de su implementación.
! Necesidad
*[[Composite (patrón de diseño)|Composite]] (Objeto compuesto): Permite tratar objetos compuestos como si de uno simple se tratase.
! Prioridad
*[[Decorator (patrón de diseño)|Decorator]] (Envoltorio): Añade funcionalidad a una clase dinámicamente.
! Observaciones
*[[Facade (patrón de diseño)|Facade]] (Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.
! Solución actual
*[[Flyweight (patrón de diseño)|Flyweight]] (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.
! Solución propuesta
*[[Proxy (patrón de diseño)|Proxy]]: Mantiene un representante de un objeto.
|-
| Sistema (Software)
| Alta
| Para el registro y la consulta de información, era lenta.
| Utilización de software como Excel y Block de notas.
| Sistema Web (intranet) para la buena gestión y recepción de información. Aparte de ello no hacerla dependiente de plataforma.
|-
| Base Datos
| Alta
| Los datos están propensos a ser observados por personal no autorizados, no se cuenta con una herramienta que administre la base de datos.
| La información es almacenada en una de las particiones del disco duro.
| El sistema para guardar la información contaría con la herramienta SQL Express 2008 como gestor de la base de datos para la seguridad e integridad de la información.
|-
| Información
| Alta
| Guías sobre atención al cliente no actualizado, no hay constante capacitación, etc.
| La capacitación al personal se da al inicio que se contrata al personal y nada más.
| Constante capacitación al personal de acuerdo a la evaluación correspondiente en determinado tiempo.
Actualización de información, sobre la atención al cliente (interfaces – guías) y como desenvolverse.
|-
|}


=== Alternativas y Competencia ===
=== Patrones de Comportamiento ===
*[[Chain of Responsibility (patrón de diseño)|Chain of Responsibility]] (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.
Las Empresas ([[Services Desks]]), ofrecen a las organizaciones (tiendas, centros comerciales, etc.) una gama de tecnologías y servicios.
*[[Command (patrón de diseño)|Command]] (Orden): Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma.
*[[Interpreter (patrón de diseño)|Interpreter]] (Intérprete): Dado un lenguaje, define una gramática para dicho lenguaje, así como las herramientas necesarias para interpretarlo.
*[[Iterator (patrón de diseño)|Iterator]] (Iterador): Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.
*[[Mediator (patrón de diseño)|Mediator]] (Mediador): Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.
*[[Memento (patrón de diseño)|Memento]] (Recuerdo): Permite volver a estados anteriores del sistema.
*[[Observer (patrón de diseño)|Observer]] (Observador): Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.
*[[State (patrón de diseño)|State]] (Estado): Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.
*[[Strategy (patrón de diseño)|Strategy]] (Estrategia): Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.
*[[Template Method (patrón de diseño)|Template Method]] (Método plantilla): Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
*[[Visitor (patrón de diseño)|Visitor]] (Visitante): Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.


=== Patrones de Sistema ===
* IVR(Respuesta interactiva de voz), atender a los usuarios de manera automática sin el uso de un operador.
*[[Modelo Vista Controlador|MVC]] (Modelo Vista Controlador): Divide un componente o un subsistema en tres partes lógicas: modelo, vista y controlador, facilitando la modificación o personalización de cada parte.
* Internet Contact Center, brindar a los usuarios (clientes) información vía online, aparte de ello soporte con un Web chat y también envío de email a sus cuentas.
*[[Session (patrón de sistema)|Session]] (Sesión): Ofrece una forma de que los servidores de sistemas distribuidos sean capaces de distinguir los clientes, permitiendo que las aplicaciones asocien el estado con la comunicación entre el cliente y el servidor.
* VozIP, comunicación con una operador(a) para la atención a los usuarios, el cual se implanta en este presente proyecto.
*[[Worker Thread (patrón de sistema)|Worker Thread]] (Thread trabajador): Mejora la productividad y minimiza la latencia media.
* Servicios: Campañas de ventas y telemarking, gestión de cobranzas, Mesas de ayuda.
*[[Callback (patrón de sistema)|Callback]] (Retrollamada): Permite que un cliente se registre en un servidor para ciertas operaciones. De esta forma, el servidor puede notificar al cliente cuando la operación ha finalizado.
*[[Succesive Update (patrón de sistema)|Succesive Update]] (Actualización Sucesiva): Ofrece a los clientes una forma de recibir actualizaciones continuas.
*[[Router (patrón de sistema)|Router]] (Encaminador): Desacopla múltiples fuentes de información de los objetos de esa información.
*[[Transaction (patrón de sistema)|Transaction]] (Transacción): Agrupa una colección de métodos de forma que todos ellos finalicen correctamente o fallen de forma colectiva.
== Patrones de Interacción ==
Los cuales con la experiencia de los programadores han afinado algunas posibles soluciones para la creación de las interfaces de web.
El primer intento por aplicar este concepto en el diseño de las interfaces de usuario se dio por Ward Cummingham y Kent Beck quienes adaptaron la propuesta de C. Alexander y crearon cinco patrones de interfaz: Window per task, Few panes, Standard panes, Nouns and verbs, y Short Menu.
En años más recientes investigadores como el Martin Van Wellie, Jennifer Tidwell, Jaime Muñoz han desarrollado colecciones de Patrones de Interacción para el WEB, en dichas colecciones captan la experiencia de programadores y diseñadores expertos en el desarrollo de interfaces usables y condensan esta experiencia en una serie guías o recomendaciones, que puedan ser usadas por los desarrolladores novatos con el propósito de que en poco tiempo adquieran la habilidad de diseñar interfaces que incidan en la satisfacción de los usuarios.
Como vemos los patrones de Interacción busca la reutilización de interfaces eficaces y de un óptimo manejo de los recursos de las páginas web haciendo más eficaz el tiempo de un persona en el diseño del sitio y adquiriendo más experiencias para los programadores novatos. Yahoo al darse cuenta de esta nueva gama de posibilidades ha puesto a disposición un sitio en el cual podemos tener lo más reciente de estos patrones la dirección es http://developer.yahoo.com/ypatterns/index.php


== Aplicación en ámbitos concretos ==
Toda empresa desearía satisfacer las necesidades de sus clientes y sabe que optaría por contratar e implantar estos servicios y además las tecnologías que ofrecen estos Services Desks (Centro de Contactos); sin embargo esto elevaría los costos.
Además de su aplicación directa en la construcción de software en general, y derivado precisamente del gran éxito que han tenido, los patrones de diseño han sido aplicados a múltiples ámbitos concretos produciéndose '''lenguajes de patrones''' y completos '''catálogos''' de mano de diversos autores.


En particular son notorios los esfuerzos en los siguientes ámbitos:
== Descripción del Producto ==
* Patrones de interfaces de usuario; esto es, aquellos que intentan definir las mejores formas de construir interfaces hombre-máquina ([[HCI]], [[GUI]]).


* Patrones para la construcción de sistemas empresariales, en donde se requieren especiales esfuerzos en infraestructuras software y un nivel de abstracción importante para maximizar factores como la escalabilidad o el mantenimiento del sistema.
=== Perspectiva de Producto ===
[[Archivo:DCU.png|thumb|600px|center|Modelo de caso de uso [[CallCenterPlus]]]]


* Patrones para la integración de sistemas ([[EAI]]), es decir, para la intercomunicación y coordinación de sistemas heterogéneos.
=== Dependencias y suposiciones ===
La buena selección y capacitación al personal (prioridad a los Operadores), es fundamental para el crecimiento y desarrollo de las tiendas.


* Patrones de [[workflow]], esto es para la definición, construcción e integración de sistemas abstractos de gestión de flujos de trabajo y procesos con sistemas empresariales. Véase también [[BPM]] .
== Características del producto ==


== Bibliografía básica de referencia ==
El producto([[CallCenter Plus]]) presenta las siguientes caracteristicas:
* '''Design Patterns. Elements of Reusable Object-Oriented Software''' - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Addison Wesley (GoF- Gang of Four)
* '''A System of Patterns''' - Buschmann, Meunier, Rohnert, Sommerlad, Stal - Wiley
* '''UML y Patrones. Introducción al análisis y diseño orientado a objetos''' - Larman - Prentice Hall
* '''AntiPatterns. Refactoring Software, Architectures and Projects in Crisis''' - Brown, Malveau, McCormick Mowbray - Wiley
* '''Patterns in Java''' - Mark Grand - Wiley
* '''EJB Design Patterns''' - Floyd Marinescu - Wiley
* '''Head First Design Patterns'''-O'Relly


== Véase también ==
* Permite a la Empresa tener una buena gestión y seguimiento de sus clientes, gracias a la información captada por el sistema.
*[[Lenguaje de patrón]]
* Permitir responder a las consultas emitidas por los clientes.
*[[Antipatrón de Diseño]]
* El sistema permite atender reclamos.
*[[Grasp]]
* De no solucionarse los reclamos separar cita con el área correspondiente al caso, para su solución.
* Permite que la información recepcionada sea almacenada en una base de datos para su posterior re utilización.
* La información almacenada es reutilizado por otras aéreas involucradas en el centro de llamadas, el cual permiten evaluar al operador, como a los clientes para una mejor gestión del personal y elaborar estrategias de negocio.
* El sistema permite registrar, consultar y generar reportes en las diferentes tareas asignadas para el personal respectivo (operador, supervisor, auditor calidad, jefe técnico) y la comunicación entre estos o ellas.


== Enlaces externos ==
'''''Confiabilidad :'''''
{{Commons|Software design patterns}}
Este producto tendrá la capacidad de responder a los requerimientos de los usuarios y stakeholders.
* [http://corej2eepatterns.com/ Core J2EE Patterns]
*[http://software.guisho.com/archives/category/patrones-de-diseno Explicación de algunos patrones de diseño.]
* [http://www.hillside.net/ Hillside Group Web Pages]
* [http://www.enteract.com/_bradapp/links/sw-pats.html Brad Appleton's Software Patterns Links]
* [http://c2.com/ppr/index.html Portland Pattern Repository]
* [http://search.cpan.org/perldoc?Object::PerlDesignPatterns Object::PerlDesignPatterns] Módulo Perl en [[CPAN]] con métodos específicos de implementación de Patrones de Diseño en lenguaje [[Perl]] (en inglés)


[[Categoría:Patrones de diseño| ]]
'''''Interoperabilidad :'''''
[[Categoría:Ingeniería de software]]
Tendrá la capacidad de responder y establecer una comunicación buena entre los subsistemas y es independiente de la plataforma porque será implementado vía web.


[[af:Ontwerpspatroon (rekenaarwetenskap)]]
'''''Flexibilidad :'''''
[[als:Entwurfsmuster]]
El sistema permitirá ampliar sus funcionalidades respondiendo a los cambios de su entorno de manera transparente y permitirá interconectar nuevo sistema que se implementaran en la institución a futuro (módulos).
[[ar:نماذج التصميم (هندسة البرمجيات)]]

[[ast:Patrón de diseñu]]
'''''Usabilidad :'''''
[[bg:Шаблони за дизайн]]
El sistema se presenta de manera amigable para el usuario, mostrándole una interfaz fácil de usar y de reconocer de manera intuitiva. El cual acepta estándares de calidad.
[[bs:Računarska dizajn šema]]
[[ca:Patró de disseny (informàtica)]]
[[cs:Návrhový vzor]]
[[da:Design pattern]]
[[de:Entwurfsmuster]]
[[el:Σχεδιαστικά πρότυπα]]
[[en:Design pattern (computer science)]]
[[fa:الگوی طراحی (دانش رایانه)]]
[[fi:Suunnittelumalli]]
[[fr:Patron de conception]]
[[he:תבנית עיצוב]]
[[id:Pola desain]]
[[it:Design pattern]]
[[ja:デザインパターン (ソフトウェア)]]
[[ko:디자인 패턴]]
[[lt:Projektavimo pavyzdys]]
[[nl:Ontwerppatroon]]
[[no:Designmønster]]
[[pl:Wzorzec projektowy (informatyka)]]
[[pt:Padrões de projeto de software]]
[[ru:Шаблоны проектирования]]
[[sh:Dizajn shema]]
[[simple:Design pattern]]
[[sv:Designmönster]]
[[ta:வடிவமைபுக் கோலம்]]
[[th:ดีไซน์แพตเทิร์น]]
[[tr:Tasarım örüntüleri]]
[[uk:Шаблони проектування програмного забезпечення]]
[[vi:Mẫu thiết kế (khoa học máy tính)]]
[[zh:软件设计模式]]

Revisión del 14:12 17 sep 2009

Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.

Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.


Breve reseña histórica

En 1979 el arquitecto Christopher Alexander aportó al mundo de la arquitectura el libro The Timeless Way of Building; en él proponía el aprendizaje y uso de una serie de patrones para la construcción de edificios de una mayor calidad.

En palabras de este autor, "Cada patrón describe un problema que ocurre infinidad de veces en nuestro entorno, así como la solución al mismo, de tal modo que podemos utilizar esta solución un millón de veces más adelante sin tener que volver a pensarla otra vez."

Los patrones que Christopher Alexander y sus colegas definieron, publicados en un volumen denominado A Pattern Language, son un intento de formalizar y plasmar de una forma práctica generaciones de conocimiento arquitectónico. Los patrones no son principios abstractos que requieran su redescubrimiento para obtener una aplicación satisfactoria, ni son específicos a una situación particular o cultural, son algo intermedio. Un patrón define una posible solución correcta para un problema de diseño dentro de un contexto dado, describiendo las cualidades invariantes de todas las soluciones.

Más tarde, en 1987, Ward Cunningham y Kent Beck usaron varias ideas de Alexander para desarrollar cinco patrones de interacción hombre-ordenador (HCI) y publicaron un artículo en OOPSLA-87 titulado Using Pattern Languages for OO Programs.

No obstante, no fue hasta principios de los 90's cuando los patrones de diseño tuvieron un gran éxito en el mundo de la informática a partir de la publicación del libro Design Patterns escrito por el grupo Gang of Four (GoF) compuesto por Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides, en el que se recogían 23 patrones diseño comunes.

Objetivos de los patrones

Los patrones de diseño pretenden:

  • Proporcionar catálogos de elementos reusables en el diseño de sistemas software.
  • Evitar la reiteración en la búsqueda de soluciones a problemas ya conocidos y solucionados anteriormente.
  • Formalizar un vocabulario común entre diseñadores.
  • Estandarizar el modo en que se realiza el diseño.
  • Facilitar el aprendizaje de las nuevas generaciones de diseñadores condensando conocimiento ya existente.

Asimismo, no pretenden:

  • Imponer ciertas alternativas de diseño frente a otras.
  • Eliminar la creatividad inherente al proceso de diseño.

No es obligatorio utilizar los patrones, solo es aconsejable en el caso de tener el mismo problema o similar que soluciona el patrón, siempre teniendo en cuenta que en un caso particular puede no ser aplicable. Abusar o forzar el uso de los patrones puede ser un error.

Categorías de patrones

Según la escala o nivel de abstracción:

  • Patrones de arquitectura: Aquéllos que expresan un esquema organizativo estructural fundamental para sistemas software.
  • Patrones de diseño: Aquéllos que expresan esquemas para definir estructuras de diseño (o sus relaciones) con las que construir sistemas software.
  • Idiomas: Patrones de bajo nivel específicos para un lenguaje de programación o entorno concreto.


Además, también es importante reseñar el concepto de Antipatrón de Diseño, que con forma semejante a la de un patrón, intenta prevenir contra errores comunes de diseño en el software. La idea de los antipatrones es dar a conocer los problemas que acarrean ciertos diseños muy frecuentes, para intentar evitar que diferentes sistemas acaben una y otra vez en el mismo callejón sin salida por haber cometido los mismos errores.

Debo argumentar además de los patrones ya vistos actualmente existen otros patrones como el siguiente:

  • Interacción:Patrones que nos permiten el diseño de interfaces web.


Estructuras o plantillas de patrones

Para describir un patrón se usan plantillas más o menos estandarizadas, de forma que se expresen uniformemente y puedan constituir efectivamente un medio de comunicación uniforme entre diseñadores. Varios autores eminentes en esta área han propuesto plantillas ligeramente distintas. Si bien la mayoría definen los mismos conceptos básicos.

La plantilla más común es la utilizada precisamente por el GoF y consta de los siguientes apartados:

  • Nombre del patrón: nombre estándar del patrón por el cual será reconocido en la comunidad (normalmente se expresan en inglés).
  • Clasificación del patrón: creacional, estructural o de comportamiento.
  • Intención: ¿Qué problema pretende resolver el patrón?
  • También conocido como: Otros nombres de uso común para el patrón.
  • Motivación: Escenario de ejemplo para la aplicación del patrón.
  • Aplicabilidad: Usos comunes y criterios de aplicabilidad del patrón.
  • Estructura: Diagramas de clases oportunos para describir las clases que intervienen en el patrón.
  • Participantes: Enumeración y descripción de las entidades abstractas (y sus roles) que participan en el patrón.
  • Colaboraciones: Explicación de las interrelaciones que se dan entre los participantes.
  • Consecuencias: Consecuencias positivas y negativas en el diseño derivadas de la aplicación del patrón.
  • Implementación: Técnicas o comentarios oportunos de cara a la implementación del patrón.
  • Código de ejemplo: Código fuente ejemplo de implementación del patrón.
  • Usos conocidos: Ejemplos de sistemas reales que usan el patrón.
  • Patrones relacionados: Referencias cruzadas con otros patrones.

Relación de principales patrones GoF

Patrones creacionales

  • Abstract Factory (Fábrica abstracta): Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre sí y haciendo transparente el tipo de familia concreta que se esté usando.
  • Builder (Constructor virtual): Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.
  • Factory Method (Método de fabricación): Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística para elegir el subtipo que crear.
  • Prototype (Prototipo): Crea nuevos objetos clonándolos de una instancia ya existente.
  • Singleton (Instancia única): Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.

Patrones Estructurales

  • Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.
  • Bridge (Puente): Desacopla una abstracción de su implementación.
  • Composite (Objeto compuesto): Permite tratar objetos compuestos como si de uno simple se tratase.
  • Decorator (Envoltorio): Añade funcionalidad a una clase dinámicamente.
  • Facade (Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.
  • Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.
  • Proxy: Mantiene un representante de un objeto.

Patrones de Comportamiento

  • Chain of Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.
  • Command (Orden): Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma.
  • Interpreter (Intérprete): Dado un lenguaje, define una gramática para dicho lenguaje, así como las herramientas necesarias para interpretarlo.
  • Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.
  • Mediator (Mediador): Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.
  • Memento (Recuerdo): Permite volver a estados anteriores del sistema.
  • Observer (Observador): Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.
  • State (Estado): Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.
  • Strategy (Estrategia): Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.
  • Template Method (Método plantilla): Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
  • Visitor (Visitante): Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.

Patrones de Sistema

  • MVC (Modelo Vista Controlador): Divide un componente o un subsistema en tres partes lógicas: modelo, vista y controlador, facilitando la modificación o personalización de cada parte.
  • Session (Sesión): Ofrece una forma de que los servidores de sistemas distribuidos sean capaces de distinguir los clientes, permitiendo que las aplicaciones asocien el estado con la comunicación entre el cliente y el servidor.
  • Worker Thread (Thread trabajador): Mejora la productividad y minimiza la latencia media.
  • Callback (Retrollamada): Permite que un cliente se registre en un servidor para ciertas operaciones. De esta forma, el servidor puede notificar al cliente cuando la operación ha finalizado.
  • Succesive Update (Actualización Sucesiva): Ofrece a los clientes una forma de recibir actualizaciones continuas.
  • Router (Encaminador): Desacopla múltiples fuentes de información de los objetos de esa información.
  • Transaction (Transacción): Agrupa una colección de métodos de forma que todos ellos finalicen correctamente o fallen de forma colectiva.

Patrones de Interacción

Los cuales con la experiencia de los programadores han afinado algunas posibles soluciones para la creación de las interfaces de web. El primer intento por aplicar este concepto en el diseño de las interfaces de usuario se dio por Ward Cummingham y Kent Beck quienes adaptaron la propuesta de C. Alexander y crearon cinco patrones de interfaz: Window per task, Few panes, Standard panes, Nouns and verbs, y Short Menu. En años más recientes investigadores como el Martin Van Wellie, Jennifer Tidwell, Jaime Muñoz han desarrollado colecciones de Patrones de Interacción para el WEB, en dichas colecciones captan la experiencia de programadores y diseñadores expertos en el desarrollo de interfaces usables y condensan esta experiencia en una serie guías o recomendaciones, que puedan ser usadas por los desarrolladores novatos con el propósito de que en poco tiempo adquieran la habilidad de diseñar interfaces que incidan en la satisfacción de los usuarios. Como vemos los patrones de Interacción busca la reutilización de interfaces eficaces y de un óptimo manejo de los recursos de las páginas web haciendo más eficaz el tiempo de un persona en el diseño del sitio y adquiriendo más experiencias para los programadores novatos. Yahoo al darse cuenta de esta nueva gama de posibilidades ha puesto a disposición un sitio en el cual podemos tener lo más reciente de estos patrones la dirección es http://developer.yahoo.com/ypatterns/index.php

Aplicación en ámbitos concretos

Además de su aplicación directa en la construcción de software en general, y derivado precisamente del gran éxito que han tenido, los patrones de diseño han sido aplicados a múltiples ámbitos concretos produciéndose lenguajes de patrones y completos catálogos de mano de diversos autores.

En particular son notorios los esfuerzos en los siguientes ámbitos:

  • Patrones de interfaces de usuario; esto es, aquellos que intentan definir las mejores formas de construir interfaces hombre-máquina (HCI, GUI).
  • Patrones para la construcción de sistemas empresariales, en donde se requieren especiales esfuerzos en infraestructuras software y un nivel de abstracción importante para maximizar factores como la escalabilidad o el mantenimiento del sistema.
  • Patrones para la integración de sistemas (EAI), es decir, para la intercomunicación y coordinación de sistemas heterogéneos.
  • Patrones de workflow, esto es para la definición, construcción e integración de sistemas abstractos de gestión de flujos de trabajo y procesos con sistemas empresariales. Véase también BPM .

Bibliografía básica de referencia

  • Design Patterns. Elements of Reusable Object-Oriented Software - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Addison Wesley (GoF- Gang of Four)
  • A System of Patterns - Buschmann, Meunier, Rohnert, Sommerlad, Stal - Wiley
  • UML y Patrones. Introducción al análisis y diseño orientado a objetos - Larman - Prentice Hall
  • AntiPatterns. Refactoring Software, Architectures and Projects in Crisis - Brown, Malveau, McCormick Mowbray - Wiley
  • Patterns in Java - Mark Grand - Wiley
  • EJB Design Patterns - Floyd Marinescu - Wiley
  • Head First Design Patterns-O'Relly

Véase también

Enlaces externos