05 patrones arquitecturales

124
1/124 Introducción a los Patrones Arquitecturales

Upload: juan-ferreyra

Post on 11-Jan-2016

222 views

Category:

Documents


0 download

DESCRIPTION

Ingenieria de SoftwarePatrones Arquitecturales

TRANSCRIPT

Page 1: 05 Patrones Arquitecturales

1/124

Introducción a los Patrones Arquitecturales

Page 2: 05 Patrones Arquitecturales

2/124

• Generalidades

• Estructura de los Patrones

• Categorías de Patrones Arquitectónicos

• Patrones Arquitectónicos para Sistemas Simples

• Patrones Arquitectónicos para Sistemas Interactivos

• Patrones Arquitectónicos para Sistemas Adaptables

• Conclusiones

Guia

Page 3: 05 Patrones Arquitecturales

3/124

¿Qué son los patrones?

… Son una forma de comunicar diseños !!!

Page 4: 05 Patrones Arquitecturales

4/124

¿Para Qué Comunicar el Diseño?

• No reinventar soluciones a problemas conocidos.

• Reusar el conocimiento experto relativo a un diseño.

• Beneficios:

– inexpertos pueden diseñar como expertos,

– menos errores debido al uso de diseños ya probados,

– los diseños probados son más fácilmente mantenibles,

– el software puede diseñarse para tener ciertas propiedades.

Page 5: 05 Patrones Arquitecturales

5/124

Investigación en Patrones de Arquitectura

• ¿Es posible formalizar esta comunicación para poder reusar el conocimiento experto?

• Premisas:

– existen problemas recurrentes en el diseño/arquitectura del software,

– las soluciones a estos problemas tienen ciertas propiedades invariantes (solución abstracta),

– pueden capturarse los problemas y las soluciones.

Page 6: 05 Patrones Arquitecturales

6/124

Patrones de Arquitectura de Software

• Los patrones en general, y en particular los de arquitectura, son un intento de formalizar la comunicación y el reuso de la experiencia de diseño.

• Capturan la experiencia probada de diseño de software.

• Describen problemas recurrentes que surgen en determinados contextos.

• Describen esquemas de soluciones probados.

• Son una herramienta para los no expertos,

• Ofrecen un paso más hacia la ingeniería de software:

– permite que gente común haga cosas que antes requerían virtuosismo.

Page 7: 05 Patrones Arquitecturales

7/124

Patrones: el Reuso de la Experiencia

• Los diseñadores expertos manejan patrones recurrentes de clases y colaboraciones útiles ante determinados problemas.

• Los patrones resuelven problemas concretos y crean diseños más elegantes, flexibles y reutilizables.

Permiten la reutilización

de la experiencia !!

Page 8: 05 Patrones Arquitecturales

8/124

¿Qué es un Patrón?

Un patrón de arquitectura de software es un esquema genérico probado para solucionar un problema particular, el cual es recurrente dentro de un cierto contexto. Este esquema se especifica describiendo los componentes, con sus responsabilidades y relaciones.

Page 9: 05 Patrones Arquitecturales

9/124

Características de los Patrones

• Atacan problemas recurrentes que ocurren en situaciones específicas y dan una solución.

– Variabilidad de las interfaces.

• Documentan experiencias de diseño existentes y bien probadas.

– Experiencia en el desarrollo de sistemas interactivos.

• Identifican y especifican abstracciones de alto nivel.

– MVC (Model View Controler).

• Proveen un vocabulario común y comprensible.

– Todos entendemos cuando nos dicen “arquitectura MVC”.

Page 10: 05 Patrones Arquitecturales

10/124

Más Características de los Patrones

• Son una forma de documentar la arquitectura del software.

• Facilitan la construcción de software con propiedades definidas (propiedades particulares).

– Interfaces intercambiables y modelo reutilizable.

• Ayudan a construir arquitecturas heterogéneas y complejas.

Page 11: 05 Patrones Arquitecturales

11/124

Patrones en la Ingeniería de Software

• Pueden verse como bloques de construcción mentales, para tratar con distintos aspectos del diseño de software.

• Hay patrones de arquitectura, patrones de diseño, patrones de procesos, patrones de interfaces, etc.

• No existen paradigmas o lenguajes específicos para implementar patrones de arquitectura, pero algunos proveen elementos útiles (orientación a objetos, polimorfismo, herencia, etc.).

Page 12: 05 Patrones Arquitecturales

12/124

¿Cómo se especifica un patrón?

Patrón: Nombre del PatrónContexto

Situación de diseño que da lugar al problema.

Problema

Conjunto de fuerzas que surgen del contexto.

Solución

Configuración para balancear las fuerzas

Componentes y relaciones (estructura)

Comportamiento dinámico

Page 13: 05 Patrones Arquitecturales

13/124

Contexto

• Extiende la dicotomía problema-solución.

• Describe el escenario donde se da el problema.

• La descripción del contexto puede ser bastante general o muy específica. Por ejemplo:

– “desarrollar un software con una interfaz humano-computador”.

– “implementar el mecanismo de cambio-propagación en MVC”.

• Es muy difícil definir completamente el contexto.

• Listar todas las situaciones en que el problema surge puede ser una alternativa.

Page 14: 05 Patrones Arquitecturales

14/124

Problema

• Describe el problema genérico que surge en el contexto especificado.

• Esencia: ¿cuál aspecto del problema debemos resolver?

– El problema generalmente varía, pero la escencia se mantiene.

• Las fuerzas describen aspectos más específicos del problema con distintos puntos de vista, y hasta pueden contradecirse. Pueden ser:

– requisitos de la solución

– restricciones

– propiedades deseables/indeseables

Page 15: 05 Patrones Arquitecturales

15/124

Solución

• Es la forma de balancear las fuerzas para resolver el problema.

• Dos aspectos o componentes de la solución:– Estructura estática - componentes y relaciones.

– Comportamiento dinámico - forma de organización y colaboración entre las componentes.

• La solución no siempre toma en cuenta todas las fuerzas.

• Hay que establecer prioridades, si las fuerzas son contradictorias.

• Se debe establecer un esquema de soluciones y no algo completamente definido (demasiado especificado, y por ende, restrictivo).

Page 16: 05 Patrones Arquitecturales

16/124

Relación entre Patrones

• “Cada patrón depende de los patrones más pequeños que contiene y de los más grandes donde está contenido.”

• Distintos aspectos de un sistema pueden resolverse con distintos patrones.

• Existen variantes de ciertos patrones para situaciones especiales.

Page 17: 05 Patrones Arquitecturales

17/124

Descripción de Patrones

• Una descripción apropiada permite la comprensión, el análisis y la discusión del patrón.

• La definición del Contexto-Problema-Solución es un buen punto de partida.

• Los buenos nombres se convierten en jerga o modismos.

• Ejemplos, diagramas, escenarios y guías para la implementación también pueden formar parte de la definición de un patrón.

• Discusión de beneficios y debilidades ayudan a tomar mejores decisión respecto a su uso.

Page 18: 05 Patrones Arquitecturales

18/124

Descripción Completa de un Patrón

Ejemplo Ejemplo conocido de la literaturaNombre Nombre descriptivoContexto Situación en que surge el problemaProblema Fuerzas que surgen en el contextoSolución Configuración que balancea las fuerzasEstructura Diagramas que describen la configuraciónDinámica Descripción del comportamiento. EscenariosImplementación Guía para implementar el patrónResolución del ej. Aplicación del patrón al ejemploVariantes Alternativas para resolver el ejemploUsos conocidos Descripción de problemas donde se aplica Consecuencias Beneficios y perjuicios

Page 19: 05 Patrones Arquitecturales

19/124

Categorías de Patrones Arquitectónicos

• Patrones Simples– Layers, Tubos-y-Filtros, Pizarrón, Repositorio

• Sistemas Distribuidos– Broker (Microkernel, Pipes-y-Filtros), CAGS, Cliente-Servidor

• Sistemas Interactivos– Modelo-View-Controlador, Presentación-Abstracción-Control

• Patrones Adaptables– MicroKernel, Reflexion

Page 20: 05 Patrones Arquitecturales

20/124

Patrones Arquitectónicos Simples

Page 21: 05 Patrones Arquitecturales

21/124

Patrones Simples– Layers: Ayuda a estructurar aplicaciones que pueden ser

descompuestas en grupos de subtareas con distintos niveles de abstracción (granularidad).

– Tubos-y-Filtros: Provee una estructura para sistemas que procesan datos de entrada. El procesamiento puede estar encapsulado en uno o más procesos (filtros).

– Pizarrón: Útil en problemas para los cuales no hay una solución conocida. Generalmente provee aproximaciones a la solución final.

– Repositorio: Ayuda a estructurar sistemas centrados en los datos, haciéndolos más flexibles y adaptables.

.... Estos son modelos generales, que requieren instanciaciones específicas.

Page 22: 05 Patrones Arquitecturales

22/124

Layers

La arquitectura de layers o capas ayuda a estructurar aplicaciones que pueden descomponerse en grupos de subtareas con diferentes niveles de abstracción.

Page 23: 05 Patrones Arquitecturales

23/124

Layers

• Contexto– Hay sistemas que utilizan distinta granularidad y

naturaleza de servicios.

• Problema– Si los servicios no están bien organizados,

el sistema podría tener problemas de mantenibilidad, adaptabilidad y escalabilidad.

Page 24: 05 Patrones Arquitecturales

24/124

Layers

Solución:• Estructurar el sistema en un número apropiado de capas.

• Empezar con la capa con el nivel más bajo de abstracción.

• Poner la capa J sobre la J-1 hasta alcanzar la capa N.

• Los servicios de J usan los servicios de J-1.

• No se requiere un orden en la implementación, ni ninguna sofisticación.

• Dentro de cada capa, las componentes tienen el mismo nivel de abstracción.

Page 25: 05 Patrones Arquitecturales

25/124

Layers: Estructura de la Solución

•Características principales de la estructura:

– los servicios de la capa J se basan solamente en los de la capa J-1;

–no existen otras dependencias entre las capas;

– la estructura puede verse como una pila o una cebolla.

Usuario Nivel N

Nivel N-1

Nivel N-2

Nivel 2

Nivel 1

NivelBásico

Servicios Básicos

Servicios Utilizables

Usuario

Page 26: 05 Patrones Arquitecturales

26/124

Layers: Otra Estructura

• Cada capa puede ser una entidad compleja formada por distintas componentes.

• Una componente en la capa J puede llamar a:

– otra componente en la capa J,

– componentes en la capa J-1 directamente,

– una interfaz definida en la capa J-1.

comp. 2.1 comp. 2.2 comp. 2.3

comp. 1.1 comp. 1.2 comp. 1.3

Nivel 2

Nivel 1

Page 27: 05 Patrones Arquitecturales

27/124

Layers: Dinámica

• Escenario 1:

– el usuario hace una solicitud a la capa N, ésta lo pasa a la capa N-1, y así sucesivamente hasta la capa 1 que efectivamente lo resuelve;

– eventualmente la respuesta vuelve a la capa N y al usuario;

– generalmente una solicitud a la capa J se traduce en varias solicitudes a la capa J-1 (nivel de abstracción).

• Escenario 2:

– se inicia una comunicación bottom-up cuando la capa 1 detecta algún evento, por ejemplo cierto input;

– esta notificación sube a través de las distintas capas.

• Escenario 3:

– la comunicación sólo sucede entre ciertas capas.

Debe definirse el comportamiento de las componentes para todos los escenarios posibles.

En todo momento debe haber certeza respecto al comportamiento que tomarán las componentes.

Page 28: 05 Patrones Arquitecturales

28/124

Layers: Implementación

• Definir los niveles de abstracción para agrupar las tareas.

– Considerando la distancia desde el hardware o la complejidad conceptual;

– Ej. Ajedrez: piezas, movimientos básicos, tácticas (ej.: defensa Siciliana), estrategias globales del juego.

• Determinar el número de capas.

– decisión de compromiso; no siempre coinciden con los criterios definidos para los niveles de abstracción.

• Designar y asignar tareas a las distintas capas.

– la capa superior es el sistema tal como lo ve el usuario.

Page 29: 05 Patrones Arquitecturales

29/124

Layers: Implementación

• Especificar los servicios de cada capa.

– es conveniente poner la funcionalidad dependiente de la aplicación en las capas superiores, y mantener las inferiores genéricas y sencillas.

• Refinar las capas iterando sobre los pasos anteriores.

– reorganizar las tareas de modo que sólo se invoquen servicios de la capa inmediatamente anterior.

• Especificar la interfaz de cada capa.

– se incluyen todos los servicios ofrecidos en la interfaz y la capa se trata como una caja negra.

Page 30: 05 Patrones Arquitecturales

30/124

Layers: Implementación

• Definir la estructura de cada capa.

– distintos patrones pueden usarse para la estructura interna.

• Especificar la comunicación entre las capas.

– push, pull, llamadas a procedimientos, RPCs, mensajes.

• Desacoplar capas adyacentes.

– la capa J no debe saber quien usa sus servicios.

• Diseñar una estrategia de manejo de errores.

– los errores deben manejarse en la capa más baja posible.

Page 31: 05 Patrones Arquitecturales

31/124

Ejemplo: FTP de UNIX

FTP

TCP

IP

Ethernet

FTP

TCP

IP

Ethernet

Protocolo FTP

Protocolo TCP

Protocolo IP

Protocolo Ethernet

Conexión Física

Cada protocolovirtual es estricto.

Page 32: 05 Patrones Arquitecturales

32/124

Variantes

• Layers relajados:

– cada capa puede acceder a servicios en cualquier capa inferior;

– capas parcialmente opacas;

– performance versus facilidad de mantenimiento.

Otras Aplicaciones

• Máquinas Virtuales.

• APIs.

• Sistemas de Información.

Page 33: 05 Patrones Arquitecturales

33/124

Layers: Consecuencias

• Beneficios:

– reutilización de niveles,

– soporte para la estandarización,

– los cambios en el código son locales a cada nivel.

• Desventajas:

– ineficiencia

– excesivo trabajo,

– difícil establecer la correcta granularidad de los niveles:

• pocos niveles no explotan el potencial de reuso, portabilidad e intercambiabilidad,

• muchos niveles crean complejidad e ineficiencia.

Page 34: 05 Patrones Arquitecturales

34/124

Arquitecturas de 2/3 Capas… para Web

3-Tiers Architecture

2-Tiers Architecture

Page 35: 05 Patrones Arquitecturales

35/124

Arquitecturas de 5 Capas… para Web

Page 36: 05 Patrones Arquitecturales

36/124

Data Access Interface (DAI)

Una alternativa para implementar la DAI:

Page 37: 05 Patrones Arquitecturales

37/124

Pipes y Filtros

El patrón de arquitectura de pipes y filtros provee una estructura para procesar flujos de datos. Cada paso de procesamiento se encapsula en un filtro. Los datos se pasan usando los “pipes” entre filtros adyacentes. Recombinando los filtros pueden construirse distintas familias de sistemas relacionados.

Page 38: 05 Patrones Arquitecturales

38/124

Ejemplo: Compilador Portable de MOCHA

• (lenguaje) MOCHA: Modular Object Computation with Hypothetical Algorithms.

• (codigo intermedio) AuLait: Another Universal Language for Intermediate Translation.

• (maquina virtual) CUP: Concurrent Uniform Processor.

• AuLait corre en la máquina virtual CUP.

AnálisisLexicográfico

AnálisisSintáctico/Parsing

AnálisisSemántico

Generación deCódigo Intermedio

Optimización

IntelMIPS SPARC Intérprete

texto ASCII (programa)

secuencia de tokens

árbol sintáctico abstracto

programa AuLait

árbol sintáctico aumentado

programa AuLait optimizado

Page 39: 05 Patrones Arquitecturales

39/124

Pipes y Filtros• Contexto

– Procesamiento de flujos de datos

• Problema

– La funcionalidad del sistema debe ser descompuesto en una serie de actividades.

– Las actividades transforman uno o más flujos de datos de entrada, en uno o más flujos de datos de salida en forma incremental.

– Cada actividad es un filtro.

– Los filtros se comunican solamente a través de pipes:

• operación del sistema operativo que envía una secuencia de datos de un proceso a otro.

Page 40: 05 Patrones Arquitecturales

40/124

Pipes y Filtros: Problema

• El sistema es una secuencia de transformaciones de los datos.

• Las transformaciones son:

– bien ordenadas,

– sin estado interno,

– independientes.

Page 41: 05 Patrones Arquitecturales

41/124

Pipes y Filtros: Problema

• Fuerzas:

– es posible implementar cambios intercambiando algunos filtros (el orden suele no ser una prioridad);

– pequeñas transformaciones son más fácilmente reutilizadas;

– los datos pueden tener diferentes formatos.

Page 42: 05 Patrones Arquitecturales

42/124

Pipes y Filtros: Solución

• Involucra 4 elementos (según Mary Shaw):

– Modelo de sistema: flujo de datos entre

componentes;

– Componentes: filtros (transformaciones,

procesamiento local, asíncrono);

– Conectores:pipes (streams);

– Estructura de control: flujo de datos.

Page 43: 05 Patrones Arquitecturales

43/124

Pipes y Filtros: Solución

• Según Buschmann:

– el sistema se divide en varios pasos secuenciales de procesamiento;

– los pasos se conectan con flujos de datos;

– cada filtro consume y procesa sus datos en forma incremental;

– el origen de los datos, el destino y los filtros se conectan con “pipes” que implementan el flujo de datos entre los pasos de procesamiento.

Page 44: 05 Patrones Arquitecturales

44/124

Pipes y Filtros: Estructura

• Filtros:

– unidades de procesamiento;

– enriquece, refina y/o transforma datos;

– el procesamiento se inicia:• el elemento siguiente solicita datos (pull),

• el elemento anterior envía datos (push),

• el filtro tiene un ciclo interno que solicita datos del filtro anterior y envía datos al siguiente (filtro activo);

– los filtros no comparten estado;

– los filtros no saben de la existencia o identidad de otros filtros.

Page 45: 05 Patrones Arquitecturales

45/124

Pipes y Filtros: Estructura

• Pipes:

– conecta origen-filtro, filtro-filtro, y filtro-destino;

– transferencia de datos con un buffer First-In-First-Out.

Page 46: 05 Patrones Arquitecturales

46/124

Pipes y Filtros: Dinámica

• Escenario 1: Push Pipeline.

– La acción se inicia “empujando” los datos hacia el siguiente filtro.

Fuente de Datospush

Filtro 1push

Filtro 2push

Destino de Datos

data

data

data

f1

f2

Page 47: 05 Patrones Arquitecturales

47/124

Pipes y Filtros: Dinámica

• Escenario 2: Push/Pull Pipeline:

– origen y destino de datos pasivos,

– el filtro 2 juega el rol activo iniciando el proceso.

Fuente de DatosFiltro 1

pullFiltro 2

pull/pushDestino de Datos

data

data

data

f1

f2

read

write

read

Page 48: 05 Patrones Arquitecturales

48/124

Pipes y Filtros: Implementación

• Dividir las tareas en una secuencia de pasos de procesamiento:

– los procesos deben ser independientes y ordenados.

• Definir el formato de los datos transmitidos a través de cada pipe:

– flexibilidad vs. performance.

• Decidir implementación de cada pipe:

– determina la implementación de los filtros (activo o pasivo).

• Diseñar e implementar filtros.

• Diseñar política de errores.

• Instalar el sistema.

Guía de Implementación

Page 49: 05 Patrones Arquitecturales

49/124

Ejemplo: Compilador MOCHA

• Los sucesivos filtros comparten un cierto estado: la tabla de símbolos.

• No es una arquitectura Pipes y Filtros estricta.

• La implementación es un único programa.

AnalizadorLexicográfico

AnalizadorSintáctico/Parser

AnalizadorSemántico

Generador deCódigo Intermedio

Tabla de S

ímbolos

Page 50: 05 Patrones Arquitecturales

50/124

Pipes y Filtros: Consecuencias

• Beneficios:

– los archivos intermedios no son necesarios,

– flexibilidad,

– reutilización de filtros,

– rápida prototipación,

– eficiencia con procesamiento paralelo.

• Desventajas:

– compartir información de estado es caro y poco flexible,

– ineficiencia por conversión de datos,

– errores pueden implicar reiniciar el sistema.

Page 51: 05 Patrones Arquitecturales

51/124

Pizarrón (Blackboard)

El patrón de arquitectura de pizarrón es útil para problemas en que no se conoce una estrategia determinista para calcular la solución. Varios subsistemas especializados reúnen su conocimiento para construir una solución parcial aproximada.

Variantes del Patrón: REPOSITORIO y CLIENTE-SERVIDOR

Page 52: 05 Patrones Arquitecturales

52/124

Ejemplos

• Visión artificial, reconocimiento de imágenes y voz.

• Inteligencia artificial.

• Sistemas colaborativos de apoyo a la toma de decisiones.

Pizarron(datos compartidos)

bc1bc2

bc3

bc7

bc6 bc5

bc4

cómputomemoria

accesodirecto

Page 53: 05 Patrones Arquitecturales

53/124

Pizarrón: Contexto

• Un dominio inmaduro en el cual no existe una solución conocida o factible de antemano.

Page 54: 05 Patrones Arquitecturales

54/124

Pizarrón: Problema

• La descomposición del problema abarca muchas áreas de especialidad.

• Cada solución parcial requiere distintas representaciones y paradigmas.

• El conocimiento es incierto o aproximado.

Page 55: 05 Patrones Arquitecturales

55/124

Pizarrón: Problema

• Fuerzas:

– una búsqueda exhaustiva de soluciones no es factible,

– los módulos deben ser intercambiables porque ninguno es seguro que obtenga la mejor solución,

– existen algoritmos que obtienen soluciones parciales,

– input, output y algoritmos usan datos con diferentes representaciones,

– algunos algoritmos usan los resultados de los otros.

Page 56: 05 Patrones Arquitecturales

56/124

Pizarrón: Solución

• Colección de programas independientes que trabajan colaborativamente sobre datos compartidos.

• Cada programa se especializa en resolver parte del problema.

• Los programas no se comunican directamente sino a través de los datos.

• Existe un control central que coordina los programas dependiendo del estado de los datos (moderador): resolución oportuna de problemas.

• Se experimenta con soluciones parciales, se las combina y se las desecha.

• Los programas también pueden tomar iniciativa e interactuar con los datos.

Page 57: 05 Patrones Arquitecturales

57/124

Pizarrón: Estructura

• Pizarrón:

– almacenamiento central de información,

– vocabulario: conjunto de todos los datos que aparecen en el pizarrón.

• Bases de Conocimiento:

– subsistemas independientes especializados,

– escriben y leen del pizarrón,

– parte de diagnóstico y parte de acción.

• Control:

– monitorea el estado del sistema y decide la próxima acción,

– las decisiones se basan en el progreso o costo del conocimiento,

– detecta estados finales aceptables e insolubles.

Page 58: 05 Patrones Arquitecturales

58/124

Categorías de Patrones Arquitectónicos

• Patrones Simples– Layers, Tubos-y-Filtros, Pizarrón, Repositorio

• Sistemas Distribuidos– Broker (Microkernel, Pipes-y-Filtros), CAGS, Cliente-Servidor

• Sistemas Interactivos– Modelo-View-Controlador, Presentación-Abstracción-Control

• Patrones Adaptables– MicroKernel, Reflexion

Page 59: 05 Patrones Arquitecturales

59/124

Patrones Arquitectónicos para Sistemas Interactivos

Page 60: 05 Patrones Arquitecturales

60/124

Patrones para Sistemas Interactivos

– Modelo-Vista-Controlador: divide a una aplicación interactiva en tres componentes: modelo, vistas y controladores.

– Presentación-Abstracción-Control: define al sistema como una jerarquía de agentes que cooperan entre sí para implementar la funcionalidad de la aplicación.

Page 61: 05 Patrones Arquitecturales

61/124

Modelo-Vista-Controlador

El patrón de arquitectura de modelo-vista-controlador (MVC) divide una aplicación interactiva en tres partes.

– El modelo contiene los datos y la funcionalidad esencial.

– Las vistas (views) despliegan la información al usuario.

– Los controladores manejan el input.

Las views y los controladores juntos componen la interfaz con el usuario. El mecanismo de cambio-propagación asegura la consistencia de la interfaz con el modelo.

NOTA: Puede ser considerado un patrón de diseño o arquitectural, dependiendo del contexto y la granularidad de su uso

Page 62: 05 Patrones Arquitecturales

62/124

Modelo-Vista-Control (MVC)

• Utilizado para construir interfaces de usuario en Smalltalk-80.

• Basado en tres tipos de objetos:

– Modelo: objeto aplicación. Encapsula el núcleo funcional y los datos involucrados.

– Vistas: presentación de información por pantalla (al usuario).

– Controlador: define la forma en la que debe reaccionar la interfaz del usuario, frente a la entrada de datos (del usuario).

• Desacopla el modelo de las vistas.

• Hace a los sistemas más mantenibles, flexibles y adaptables.

Page 63: 05 Patrones Arquitecturales

63/124

Ejemplo: Sistema de Información

• Sistema de elecciones políticas.

• Los usuarios votan a través de una interfaz gráfica.

• La información se muestra con distintos formatos.

• Los cambios por votación deben reflejarse en forma inmediata.

Negro: 43%Rojo: 39%Azul: 6%Verde: 10%Otro: 2%

Negro Rojo Azul Verde Otro

0

5

10

15

20

25

30

35

40

45

Negro 43Rojo 39Azul 6Verde 10Otro 2

Negro Rojo Azul Verde Otro

0

5

10

15

20

25

30

35

40

45

• Debe poderse integrar otras formas de presentación de los resultados tales como la distribución de candidatos en el parlamento.

• Las presentaciones deben ser portables.

Page 64: 05 Patrones Arquitecturales

64/124

Modelo-Vista-Control (MVC)

Contexto: Aplicaciones interactivas con interfaces humano-computador cambiantes y flexibles.

Problema:

– Las interfaces de usuario son muy frecuentemente cambiadas.

– Cambios en la funcionalidad deben reflejarse en las interfaces.

– Puede haber interfaces a medida para ciertos usuarios.

– Diferentes paradigmas de interfaz: • digitar información,

• seleccionar íconos.

– Construir un sistema monolítico es caro y difícil.

Page 65: 05 Patrones Arquitecturales

65/124

Modelo-Vista-Control (MVC)

Fuerzas:

– la misma información se presenta de distintas formas,

– cambios en los datos deben reflejarse en la interfaz inmediatamente,

– las interfaces deben modificarse fácilmente, ojalá durante la ejecución,

– distintas interfaces portables no deben afectar la operación esencial.

Page 66: 05 Patrones Arquitecturales

66/124

Modelo-Vista-Control (MVC)

Solución:• MVC divide la aplicación en

procesamiento, input y output.

• El modelo representa la funcionalidad y los datos esenciales, y es independiente de la representación en las interfaces.

• La view obtiene datos del modelo y los despliega para el usuario.

• Cada view tiene asociada un controlador. El controlador recibe eventos como input (movimientos del mouse, activación de botones) y los traduce a solicitudes de servicios del modelo o la view.

• El usuario interactúa con el modelo solamente a través de controladores.

Page 67: 05 Patrones Arquitecturales

67/124

Modelo-Vista-Control (MVC)

Estructura:

• Modelo

– encapsula la información esencial y exporta procedimientos que realizan procesamiento específico de la aplicación;

– provee funciones para que las views accedan a la información;

– el mecanismo de cambio-propagación mantiene informados a las views y a los controladores dependientes.

• View

– despliega los datos para el usuario;

– tienen procedimientos de actualización para recibir nuevos datos.

• Controlador

– existe un controlador para cada view;

– recibe los inputs de una view como eventos y los interpreta.

Page 68: 05 Patrones Arquitecturales

68/124

MVC: Estructura del Ejemplo

• El modelo guarda los votos acumulados para cada partido político y permite que las views accedan a los números de votos.

• Hay varias views: gráfico de barras, de torta o tabla.

Torta

Controlador_Tr

Barras

Controlador_Ba

Tabla

Controlador_Tb

Base de votos

Page 69: 05 Patrones Arquitecturales

69/124

MVC: Dinámica

• Escenario I: Input del usuario cambia el modelo y dispara el mecanismo de cambio-propagación.

Controlador Modelo View

evento servicio notificaciónactualizar

desplegar

obtener datosactualizar

obtener datos

Page 70: 05 Patrones Arquitecturales

70/124

MVC: Dinámica

Page 71: 05 Patrones Arquitecturales

71/124

Modelo-Vista-Control (MVC)

Implementación:

• Separar la funcionalidad esencial de la interacción humano-computador.

• Implementar el mecanismo de cambio-propagación.

• Diseñar e implementar las views.

• Diseñar e implementar los controladores.

• Diseñar e implementar la relación entre views y controladores.

• Implementar:

– La inicialización del MVC completo,

– La creación de dinámica de views,

– La controladores que capturan diferentes eventos,

– La infraestructura jerárquica para views y controladores,

– La más desacoplamiento de las dependencias del sistema.

Page 72: 05 Patrones Arquitecturales

72/124

Modelo-Vista-Control (MVC)Consecuencias:

• Beneficios:

– múltiples views para el mismo modelo,

– views sincronizadas,

– views y controladores intercambiables.

• Desventajas:

– mayor complejidad,

– excesivos cambios potenciales,

– relación estrecha entre views y controladores,

– gran acoplamiento entre views y controladores con el modelo,

– ineficiencia en el acceso a los datos desde la view,

– cambios inevitables a las views y controladores al portarlos,

– difícil usar MVC con herramientas gráficas modernas.

Page 73: 05 Patrones Arquitecturales

73/124

Modelo-Vista-Control

• Utiliza los siguientes patrones de diseño:

– Observer

– Composite

– Strategy

– Decorator

– Factory method

Page 74: 05 Patrones Arquitecturales

74/124

Presentación-Abstracción-Control (PAC)

El patrón de arquitectura PAC define una estructura jerárquica de agentes cooperativos. Cada agente es responsable de un aspecto específico de la funcionalidad de la aplicación y está compuesto por tres componentes: presentación-abstracción-control.Esta subdivisión separa los aspectos de HCI de los agentes, del núcleo funcional de cada uno y de los mecanismos de comunicación con otros agentes.

... ver archivos pdf adjuntos sobre PAC, y sobre MVC vs PAC

Page 75: 05 Patrones Arquitecturales

75/124

Categorías de Patrones Arquitectónicos

• Patrones Simples– Layers, Tubos-y-Filtros, Pizarrón, Repositorio

• Sistemas Distribuidos– Broker (Microkernel, Pipes-y-Filtros), CAGS, Cliente-Servidor

• Sistemas Interactivos– Modelo-View-Controlador, Presentación-Abstracción-Control

• Patrones Adaptables– MicroKernel, Reflexion

Page 76: 05 Patrones Arquitecturales

76/124

Patrones para Sistemas Adaptables

Page 77: 05 Patrones Arquitecturales

77/124

Patrones para Sistemas Adaptables

– MicroKernel: Es usado en sistemas de software que deben adaptarse a los cambios en los requisitos. Este separa el núcleo funcional, la funcionalidad extendida y los aspectos relativos al cliente.

– Reflexion: Provee un mecanismo para cambiar la estructura y el comportamiento de un sistema de software, en forma dinámica. Este patrón divide a una aplicación en dos partes: un meta nivel que provee información acerca de las propiedades del subsistema seleccionado, y un nivel base que provee la lógica de la aplicación.

Page 78: 05 Patrones Arquitecturales

78/124

MicroKernel• Ejemplos de sistemas MicroKernel son los sistemas operativos:

NextSTEP, UNIX System V, MS Windows, OS/2 Warp.

Contexto: Desarrollo de aplicaciones que utilizan interfaces de programación similares, sobre las cuales construye un núcleo de funcionalidad similar.

Problema: El desarrollo de software de dominio específico es una tarea no trivial (Sist. Operativos, GUIs, etc). Los tiempos de vida de estos sistemas son largos, y tienen que incorporar los cambios tecnológicos con el menor costos (y tiempo) posible.

Fuerzas:

- La plataforma de la aplicación debe contemplar los cambios tecnológicos tanto en hardware como en software. Sin embargo, considerar todas las posibilidades podría elevar el costo innecesariamente.

- La plataforma de la aplicación debe ser portable, extensible y adaptable, para permitir la integración de las tecnologías emergentes. Estas tecnologías pueden ser actuales o futuras.

Page 79: 05 Patrones Arquitecturales

79/124

MicroKernelSolución:

- Encapsular los servicios fundamentales de la plataforma de aplicación, en un componente microkernel. El microkernel incluye la funcionalidad que permite a otros componentes, ejecutar en forma separada (como proceso) y comunicarse entre ellos. Este es conocido como internal server.

- Encapsular los servicios periféricos al núcleo en subsistemas que agrupan servicio similares. Estos son conocidos como external servers.

- Los clientes se comunican con los external servers usando las facilidades de comunicación provistas por el microkernel.

Page 80: 05 Patrones Arquitecturales

80/124

MicroKernel

Page 81: 05 Patrones Arquitecturales

81/124

MicroKernel

Estructura: MicroKernel

Internal ServerExternal Server

Adapter ClientdoTask

executeServicereceiveRequest

executeMechanisminitComunicationfindReceivercreateHandlesendMsgcallInternalServer

callServicecreateRequest

receiveRequestdispatchRequestexecuteService

calls

sends request

Calls service

activate

Page 82: 05 Patrones Arquitecturales

82/124

MicroKernel

Dinámica: Idem a patrones anteriores.

Consecuencias:

- Beneficios: Portabilidad, flexibilidad, escalabilidad, confiabilidad, transparencia.

- Problemas: Performance, Complejidad del diseño e implementación.

Page 83: 05 Patrones Arquitecturales

83/124

Categorías de Patrones Arquitectónicos(resumen)

• Patrones Simples– Layers, Tubos-y-Filtros, Pizarrón, Repositorio

• Sistemas Distribuidos– Broker (Microkernel, Pipes-y-Filtros), CAGS, Cliente-Servidor

• Sistemas Interactivos– Modelo-View-Controlador, Presentación-Abstracción-Control

• Patrones Adaptables– MicroKernel, Reflexion

Page 84: 05 Patrones Arquitecturales

84/124

Otros Estilos de Vistas de Componentes y Conectores

Page 85: 05 Patrones Arquitecturales

85/124

Más Estilos C&C

Publicador-suscriptor

Cliente-servidor

Peer-to-peer

Procesos comunicantes

C&C: Component & Connector. Especifican patrones de interacción que prescriben como los componentes interactúan en runtime.

Page 86: 05 Patrones Arquitecturales

86/124

C & C

Page 87: 05 Patrones Arquitecturales

87/124

Publicador-suscriptor

Los componentes interactúan a través de eventos anunciados.

Las componentes pueden suscribirse a una serie de eventos.

La infraestructura de ejecución de un sistema publicador-suscriptor es responsable de distribuir los eventos a todos los suscriptores.

La forma esencial de conector es un bus de eventos.

Los componentes publican los eventos en el bus y el conector los dirige a las componentes apropiadas.

Page 88: 05 Patrones Arquitecturales

88/124

Elementos, Relaciones y Propiedades

En un sistema de publicación-suscripción:

– conjunto de procesos independientes

– un proceso reacciona con algún evento generado por el ambiente

– esta reacción puede producir eventos que se publicarán

– como consecuencia, la reacción de una componente puede causar reacciones en otras componentes a través de los eventos.

No es posible saber, al desarrollar una componente, cuántos ni cuáles serán los destinatarios de los eventos que publique.

Este desacoplamiento inherente maximiza la modificabilidad de las partes pero dificulta las pruebas.

Page 89: 05 Patrones Arquitecturales

89/124

Invocación Implícita

Es una forma particular del estilo publicador-suscriptor.

Las componentes tienen interfaces procedurales, y cada componente se registra para ciertos eventos asociándolos con estos procedimientos.

Cuando se anuncia un evento, se invocan los procedimientos asociados en el orden determinado por la infraestructura de ejecución.

Un ejemplo típico es Visual Basic: se agrega código que será asociado a determinados eventos preestablecidos.

Page 90: 05 Patrones Arquitecturales

90/124

Otras Formas

En otras modalidades, es responsabilidad de cada componente el definir

– el tipo de eventos a los cuales se habrá de reaccionar,

– el orden en que se ejecutarán en caso de ocurrir más de un evento.

Estos sistemas suelen ser más complejos pero también tienen mayor flexibilidad.

Page 91: 05 Patrones Arquitecturales

91/124

Propiedades

Debe documentarse si durante la ejecución es posible:

– suscribir un nuevo evento

– crear un nuevo tipo de evento

– crear nuevos publicadores de eventos

Como propiedades de los conectores:

– forma de manejar los eventos publicados

– forma sincrónica o asincrónica

– existencia de prioridades

– orden causal o temporal usado

– confiabilidad de la distribución de eventos

– semántica de los eventos

– otra funcionalidad del conector (e.g. Crear o destruir componentes)

Page 92: 05 Patrones Arquitecturales

92/124

Relación con Otros Estilos

Un sistema puede verse como un pizarrón sin persistencia cuando se usa para distribuir mensajes.

Cuando las componentes operan en distintos threads de control, el estilo publicador-suscriptor es un refinamiento del estilo de procesos comunicantes.

Publicador-suscriptor se combina frecuentemente con el estilo peer-to-peer en el que los procesos interactúan tanto implícita como explícitamente.

Page 93: 05 Patrones Arquitecturales

93/124

Resumen de Publicador-Suscriptor

Elementos Tipos de componentes: cualquier tipo de componente con una interfaz que publica y/o suscribe eventos.Tipos de conectores: publicar-suscribir

Relaciones La relación de vínculo asocia componentes con el conector publicar-suscribir

ModeloComputacional

Un sistema de componentes independientes que anuncian eventos y reacciones ante otros eventos anunciados

Propiedades Todas las propiedades de C&C y además: qué componentes anuncian qué eventos, qué componentes reaccionan con qué eventos y cuándo se permite a una componente suscribir un evento

Topología Todas las componentes se conectan a un distribuidor de eventos que puede ser considerado como un conector (un bus) o bien una componente

Page 94: 05 Patrones Arquitecturales

94/124

Estilo Cliente-Servidor

En el estilo cliente-servidor, las componentes interactúan solicitando servicios de otras componentes.

La esencia del estilo radica en que la comunicación se da de a pares y es iniciada por el cliente.

Una solicitud de un cliente se relaciona con un servicio ofrecido por un servidor.

Los servidores ofrecen uno o más servicios a través de una o más interfaces.

Puede haber uno o más servidores dentro del sistema.

Page 95: 05 Patrones Arquitecturales

95/124

Elementos, Relaciones y Propiedades

Los tipos de componentes son clientes y servidores.

El tipo de conector principal es solicitud-respuesta que se usa para invocar servicios.

Los servidores tienen interfaces que describen los servicios ofrecidos.

Los servidores pueden, a su vez, actuar como clientes de otros servidores, formando una jerarquía.

Page 96: 05 Patrones Arquitecturales

96/124

Dinámica

El flujo de control en los sistemas cliente-servidor es asimétrico.

En un sistema cliente-servidor puro:

– la acción es iniciada por el cliente solicitando un servicio del servidor (el cliente debe conocer la identificación del servidor y el servicio requerido)

– los servidores desconocen sus clientes potenciales, y responden a quienes los invoquen

Invocación sincrónica:

– el solicitante del servicio espera o se bloquea hasta que el servicio sea concluido posiblemente con un resultado devuelto.

Page 97: 05 Patrones Arquitecturales

97/124

Forma especializada: n-tiered

Estructura:

– los clientes y servidores forman una jerarquía de n niveles

– los niveles superiores están formados por clientes que invocan servidores en niveles inferiores

Generalmente se usan en aplicaciones de procesamiento de información, donde n = 3

– la primera capa es la aplicación cliente

– la segunda incluye los servicios de la lógica del negocio

– la tercera capa incluye la administración de los datos

Aplicación cliente

Lógica del negocio

Administración de datos

Page 98: 05 Patrones Arquitecturales

98/124

Propiedades

Posibilidad de crear dinámicamente clientes y servidores

Límite al número de clientes que pueden interactuar con un servidor

Protocolo de solicitud-respuesta:

– forma de manejar los errores

– inicialización y finalización de las interacciones

– manejo de sesiones

– localización de los servidores

– existencia de middleware

Page 99: 05 Patrones Arquitecturales

99/124

Usos de Cliente-Servidor

Los sistemas cliente-servidor desacoplan los prestadores de servicios de los usuarios de estos servicios.

Da apoyo a la comprensibilidad y la distribución del sistema agrupando servicios relacionados.

La división en clientes y servidores facilita la estructuración jerárquica permitiendo la escalabilidad de la performance y la confiabilidad.

Page 100: 05 Patrones Arquitecturales

100/124

Relación con otros estilos

Cliente-servidor es una generalización de los llamados a procedimiento/función/método de los lenguajes de programación.

Es como peer-to-peer pero asimétrico.

Los clientes y servidores se agrupan y distribuyen en distintas máquinas dando lugar a una jerarquía de n-capas

– n-tier es una especialización de C&C y no un tipo de arquitectura de capas que es una forma de tipo de vista de módulos.

Page 101: 05 Patrones Arquitecturales

101/124

Resumen de Cliente-Servidor

Elementos Tipos de componentes: clientes (solicita servicios de otra componente) y servidores (proporciona servicios a otras componentes)Tipos de conectores: solicitud/respuesta, invocación asimétrica de un servicio del servidor por parte de un cliente

Relaciones La relación de vínculo asocia los clientes con el rol de solicitud del conector y a los servidores con el rol de respuesta del conector, y determina qué servicios pueden ser invocados por qué cliente

Modelo Computacional

Los clientes inician la acción solicitando servicios cuando lo requieran de los servidores y esperando por los resultados

Propiedades Propiedades de C&C agregando el número y tipo de clientes que pueden vincularse y propiedades de performance tales como transacciones por segundo

Topología En general, sin restricciones. Las especializaciones pueden imponer algunas: número de vínculos a un determinado puerto o rol, posibilidad de relacionar servidores, capas.

Page 102: 05 Patrones Arquitecturales

102/124

Estilo Peer-to-Peer

Los componentes interactúan directamente como pares intercambiando servicios.

La comunicación es una especie de solicitud/respuesta sin la asimetría de cliente-servidor

– en principio cualquier componente puede interactuar con cualquier otra

Los conectores pueden involucrar protocolos complejos bidireccionales

Típicos sistemas peer-to-peer son los basados en infraestructuras de objetos distribuidos tales como CORBA, COM+ y Java RMI.

Un sistema diseñado con un estilo más restrictivo puede aún ser implementado usando orientación a objetos y una infraestructura de objetos/componentes distribuidos.

Page 103: 05 Patrones Arquitecturales

103/124

Peer-to-PeerElementos, Relaciones y Propiedades

Los típicos elementos son objetos, objetos distribuidos y clientes.

El conector principar es invocación-procedimiento.

La interacción puede ser inciada por cualquiera de las partes.

Cada componente tiene interfaces que describen los servicios que solicitan de otras componentes y los servicios que ofrecen.

Las propiedades esenciales son la modificabilidad y la escalabilidad.

Page 104: 05 Patrones Arquitecturales

104/124

Peer-to-PeerDinámica

El flujo de control es simétrico:

– un par inicia la acción para realizar una operación mediante la cooperación con otros pares y para ello se solicitan servicios entre ellos.

La propagación de las invocaciones puede, eventualmente ser restringida.

Page 105: 05 Patrones Arquitecturales

105/124

Aplicaciones Peer-to-Peer

El sistema se particiona en áreas de colaboración.

Esta partición facilita la distribución.

Los pares interactúan jugando alternativamente roles de cliente y/o de servidor.

Esto permite una forma de cliente-servidor con la información distribuida en varios elementos.

Page 106: 05 Patrones Arquitecturales

106/124

Resumen de Peer-to-PeerElementos Tipos de componentes: pares

Tipos de conectores: invocación de procedimiento

Relaciones La relación de vínculo asocia pares con los conectores de invocación a procedimientos y determina el grafo de interacciones posibles entre componentes

Modelo Computacional

Los pares cuentan con interfaces en encapsulan su estado. El cómputo se realiza mediante la cooperación entre pares que solicitan servicios a otros pares.

Propiedades Propiedades de C&C con énfasis en protocolos de interacción y propiedades orientadas a la performance. Los vínculos pueden cambiar durante la ejecución.

Topología Puede haber restricciones acerca del número de vínculos a un cierto puerto o rol. Otras restricciones de visibilidad pueden imponerse para restringir qué componentes saben de la existencia de otras componentes.

Page 107: 05 Patrones Arquitecturales

107/124

Estilo de Procesos Comunicantes

Las componentes son procesos independientes ejecutando en forma concurrente y comunicándose a través de variados mecanismos.

Los conectores pueden ser: sincronización, pasaje de mensajes, intercambio de datos, inicialización, destrucción, etc.

Los procesos comunicantes son frecuentes en grandes sistemas, e imprescindibles en sistemas distribuidos.

El estilo de procesos comunicantes ayuda a comprender el comportamiento asociado a la concurrencia.

Page 108: 05 Patrones Arquitecturales

108/124

Elementos, Relaciones y Propiedades

Un sistema se representa como un conjunto de unidades que ejecutan en forma concurrente conjuntamente con su interacción.

Una unidad concurrente puede ser una tarea, o proceso o un thread.

Los conectores permiten la comunicación de datos entre las componentes y también su sincronización.

Page 109: 05 Patrones Arquitecturales

109/124

Aplicaciones de Procesos Comunicantes

El estilo pone de manifiesto

– qué partes del sistema pueden ejecutarse en paralelo

– qué grupo de componentes conforman un proceso

– threads de control existentes dentro del sistema

Una vista con este estilo puede usarse para analizar performance y confiabilidad.

También es útil en la asignación de componentes a procesadores.

Page 110: 05 Patrones Arquitecturales

110/124

Relación con otros estilos

Este estilo es raramente usado en forma pura, sino en combinación con otros.

Usos comunes:

– resaltar los threads de control dentro de un sistema cliente-servidor

– poner un proceso monitor que controle a otros procesos y reporte el progreso del procesamiento

Page 111: 05 Patrones Arquitecturales

111/124

Resumen de Procesos Comunicantes

Elementos Tipos de componentes: unidades concurrentes tales como tareas, procesos y threadsTipos de conectores: intercambio de datos, pasaje de mensajes, sincronización, control y otros tipos de comunicación

Relaciones La relación de vínculo tal como se define en C&C

ModeloComputacional

Componentes que ejecutan concurrentemente interactúan a través de mecanismos de conexión específicos

Topología Grafos arbitrarios

Page 112: 05 Patrones Arquitecturales

112/124

Recomendaciones Generales en las

Arquitecturas de Software

Page 113: 05 Patrones Arquitecturales

113/124

Recomendaciones Generales• Desempeño.

– Si el desempeño es un requisito crítico, la arquitectura debe estar diseñada para albergar las operaciones críticas, dentro de un número reducido de subsistemas (menos cambios de contexto).

– Es deseable una poca comunicación entre los subsistemas.

– Esto significa utilizar componentes de grano grueso, de esa manera habrá menos componentes en el sistema.

• Seguridad.

– Si la seguridad es un requisito crítico, se debe utilizar una arquitectura estratificada (por capas).

– Los recursos más críticos deben alojarse en las capas más inferiores (internas).

– Cada capa debe proveer un mecanismo de validación, de acuerdo a la información que ésta maneja.

Page 114: 05 Patrones Arquitecturales

114/124

Recomendaciones Generales

• Protección (de operaciones).

– Si la protección es un requisito crítico, la arquitectura debe estar diseñada de tal forma que las operaciones relacionadas con la protección, se localicen en único subsistema o en un conjunto muy reducido de estos.

– Esto reduce los costos y los problemas de validación, y hace posible crear sistemas de protección relacionados.

• Disponibilidad.

– Si la disponibilidad es un requisito crítico, como parte de la arquitectura se deben incluir componentes redundantes.

– Estos podrán reemplazar a los componentes con problemas, en caso de fallas.

Page 115: 05 Patrones Arquitecturales

115/124

Recomendaciones Generales

• Mantenibilidad.

– Si la mantenibilidad es un requisito crítico, la arquitectura debe estar diseñada utilizando componentes autocontenidos de grano fino.

– Estos componentes pueden ser módulos o componentes de software bien definidos.

– Estos podrán cambiarse o reemplazarse con facilidad, y con un mínimo efecto sobre el resto del sistema.

– Los productores de datos deben estar separados de los consumidores.

– Las estructuras de datos compartidas deben evitarse.

– La circulación de órdenes de control entre módulos o subsistemas, también debe evitarse.

Page 116: 05 Patrones Arquitecturales

116/124

Conclusiones

• Hay arquitecturas de son mejores que otras, dependiendo del escenario de trabajo (dominio + infraestructura previa), del tipo de software a desarrollar, y de lo que se pretende obtener.

• Los patrones arquitectónicos brindan una sugerencia (genérica) acerca de cómo resolver algunos de los problemas arquitectónicos mas comunes.

• Los patrones arquitectónicos no son la salvación de nadie, pero generalmente ayudan….

• Lo más lógico es que se mezclen patrones, y adaptaciones de ellos según cada contexto.

Page 117: 05 Patrones Arquitecturales

117/124

Antipatrones

Definen patrones que no se deben seguir.

Page 118: 05 Patrones Arquitecturales

118/124

Antipatrones

Nos ofrecen una forma de resolver un problema típico, documentando lo que no se debe hace.

Nos hablan de actitudes o formas de enfrentarse a los problemas que ya sabemos suelen tener consecuencias negativas.

También reflejan experiencia, pero de este caso, de los errores cometidos.

Page 119: 05 Patrones Arquitecturales

119/124

Objetivos de los Antipatrones

Dar a conocer y clasificar los errores mas comunes a la hora de desarrollar software.

Proponer un proceso para atacar esos problemas.

Evitar que se repitan constantemente. Difundir la experiencia de otros

desarrolladores.

Page 120: 05 Patrones Arquitecturales

120/124

Clasificacinde los Antipatrones

Desarrollo de Software Arquitectura de Software Gestión de Proyectos de Software

Page 121: 05 Patrones Arquitecturales

121/124

Antipatrones de Desarrollo de Software

The Blob (Clases Gigantes) Lava Flow (Código Muerto). Functional Decomposition (Diseño no Orientado a

Objetos) Poltergeists (No se sabe lo que hace alguna clase) Golden Hammer (Para un martillo todos son clavos) Spaghetti Code (Sobre anidamiento de IF’s o

SWITCH’s) Cut-and-Paste Programming (Copiar y pega código)

Page 122: 05 Patrones Arquitecturales

122/124

Antipatrones de Arquitectura de software.

Stovepipe Enterprise: Aislamiento en la empresa o desarrollo de sistmas aislados y parchados

Stovepipe Systems: Sistemas que por su mala arquitectura se comportan como si sus componentes hubieran sido desarrollados por separado.

Vendor Lock-In: Arquitectura dependiente del Producto. Architecture by implication: Arquitectura implícita. Design by Commite: El proyecto es diseñado por un

comité demasiado numerosos e inexperto. Reinvent the Whell: Desarrollo desde cero.

Page 123: 05 Patrones Arquitecturales

123/124

Antipatrones de Gestión de Proyectos de Software

Analysis paralysis: Síndrome del gran proyecto

Dirigido por una gran cantidad de personal muy inteligente.

Se identifican con nombres de gran, 2000, mega, super, etc.

Se pretende que el sistema lo haga todo Termina cuando el proyecto se cancela

Page 124: 05 Patrones Arquitecturales

124/124

… que hacer?