*Es el diseño de la estructura del software desde el más alto nivel
*Son un conjunto de abstracciones
*Son un conjunto de patrones
*Arquitectura es ensamblar algunos elementos
*Se diseña en base a los objetivos
Funcionalidad
Mantenibilidad
Auditabilidad
Flexibilidad
Interacción con otros sistemas
Confiabilidad
Escalabilidad
Portabilidad
Disponibilidad
*Se diseña en base a las restricciones
Limitaciones en cuanto a la tecnología disponible
*La arquitectura define:
Componentes
Interfaces entre componentes
Comunicación entre componentes
*Toda arquitectura se implementará de forma física en uno o varios equipos
*Permiten describir los sistemas de una manera mas comprensible
*Puede existir varias vistas
*Cada modelo o vista puede describir una parte
*Existen 3 vistas fundamentales para cualquier arquitectura:
Visión estática: Describe los componentes de la arquitectura
Visión funcional: Describe que hace cada componente
Visión dinámica: Como se comportan los componentes en el tiempo y su interacción
*Los modelos o vista se expresan con lenguajes:
Natural
Diagramas de estado
Diagramas de flujo de datos
*Normalmente se escoge solo una arquitectura para un sistema de información:
*Las arquitecturas más comunes son:
Monolítica: Se estructura en grupos funcionales muy acoplados Cliente - servidor: dos o más procesos colaboran entre si Arquitectura de 3 niveles: La carga de trabajo se divide en 3 capas.
Arquitectura n capas: Se crean más dándoles especialización
Arquitectura orientada a servicios: expone servicios e integra plataformas
*Otras arquitecturas:
Pipe line: Línea de comandos
Entre pares: peer to peer
Pizarra: sistemas expertos
Dirigida por eventos: producción, detección, reacción y consumo de eventos
Máquinas virtuales: Especialización de equipos
*Base para la búsqueda de problemas comunes en el diseño, desarrollo de software
*Es la solución a un problema de diseño
*Solo es un patrón cuando se ha probado su efectividad y su reutilización
*Es un lenguaje de programación de alto nivel
*Es el conocimiento o experiencia
*Proporcionar los catálogos de elementos reusables
*Evitar la pérdida de tiempo en la búsqueda de soluciones ya establecidas
*Estandarizar el vocabulario entre diseñadores
*Condensar el conocimiento para las nuevas generaciones
*No debe inhibir la creatividad
Patrones de arquitectura. Representan esquema y estructura de los sistemas de software
Patrones de diseño: Define esquemas para estructuras de diseño y sus relaciones
Dialectos: Patrones de bajo nivel para lenguajes de programación
Interacción: Patrones para el diseño de interfaces tipo web
ANTIPATRONES
*Previene errores comunes en el diseño de software
Una plantilla poseerá:
· Nombre del patrón: nombre estándar
· Clasificación del patrón: creacional, estructural o de comportamiento.
· Intención: Problema a resolver
· También conocido como: Otros nombres
· 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 con las clases que intervienen
· Participantes: Entidades abstractas 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
· Implementación: Técnicas o comentarios oportunos
· 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.
Object Pool: Cuando hay objetos complejos se los puede clonar para reducir costos
Buider: abstrae el proceso de creación del objeto
Factory method: Centraliza la creación de sub tipo de objeto
Prototype: crea nuevos objetos clonándolos de uno existente
Singleton: garantiza la creación de una única instancia para el objeto
Abstract factory: Permite trabajar con objetos de distintas familias sin mezclarse
PATRONES ESTRUCTURALES
Adapter: Adapta una interfaz para que pueda ser usada por una clase
Bridge: Desacopla una abstracción de su implementación
Composite: Permite tratar varios objetos como si fuera uno
Decorator: Añade funcionalidad a una clase dinámicamente
Facade: Provee una interfaz simple para acceder a varias interfaces
Flyweight: Reduce la redundancia en objetos que poseen la misma información
Proxi: Mantiene un representante de un objeto
Modulo: Agrupa varios elementos (Clases, métodos, etc)
PATRONES DE COMPORTAMIENTO
Chain of responsability: Establece la linea que deben llevar los mensajes
Command: encapsula y permite la ejecución de una operación
Interpreter: Define una gramática para el lenguaje
Iterator: Permite realizar recorridos sobre los objetos
Mediator: Coordina la comunicación entre objetos
Memento : Permite volver a estados anteriores del sistema
Observer: Defina la relación de uno a muchos. Cuando hay una actualización se actualizarán todos los que dependan del uno
State: Modifica su comportamiento cada vez que cambie el estado
Strategy: Permite seleccionar en tiempo de ejecución el objeto mas adecuado a usar
Template Method: Define el esqueleto de un algoritmo
Visitor: Permite definir nuevas operaciones sin modificar las clases
PATRONES DE PROGRAMACION
*Consiste en reutilizar programas
*Se debe identificar patrones de instrucciones repetitivas
Patrones de acumulación:
*Hay que utilizar el concepto de programación genérica
*Estas estrategias de programación ayudan cuando hay grupos de trabajo
*Utilizar los conceptos de herencia, polimorfismo, sobrecarga
*Centralizar funciones, métodos, módulos, paquetes comunes a todo el sistema
*Todo caso repetitivo e programación solo se elabora una sola vez
*En lectura de datos, acumulación, etc se puede: utilizar sentencias de repetición
*No se debe quemar datos en código en su lugar se debe usar tablas
*Utilizar variables de configuración
*Desarrollar programas parametrizables
*El uso de de programación genérica
EJEMPLO DE PATRON
Encapsulación (ocultación de datos)
Problema: Los atributos pueden ser manipulados desde el exterior
Solución: esconda algunos componentes, permitiendo sólo accesos estilizados al objeto.
Desventajas: la interfaz no puede, eficientemente, facilitar todas las operaciones deseadas. El acceso indirecto puede reducir el rendimiento.
PATRONES DE ARQUITECTURA
MODELO DE CAPAS
*Consiste en la división de la aplicación en capas
*Cada capa posee una especialidad
*La evolución del modelo de capas es:
Cliente servidor 2 capas
Aplicación distribuida de 3 capas
Aplicación distribuida de n capas
*Layering son los patrones para dividir en capas
PATRONES DE LOGICA DE NEGOCIO
*Procedimental
Organización del código en funciones
Utilización de estructuras de datos simples
Paso de parámetros a funciones
Uso de librerías
Fácil de usar
No hace falta conocer de diseño
Usado por programadores si experiencia
Utilizado en lógica de negocio simple
*Orientado a objetos
Organización del código en objetos
Los objetos poseen atributos y métodos
Utilización de herencia
Utilizado en sistemas más complejos
El modelo del dominio es conocido al conjunto de clases con estado y funcionamiento
PATRONES DE PRESENTACION WEB
PATRONES DE DISTRIBUCION
PATRONES DE ESTADO DE SESION
PATRONES DE DISTRIBUCION
Ver Diapositivas introducción a los patrones de diseño Ing. Pablo Almeida Haro Mgs.
FRAMEWORKS
*Es un marco de trabajo
*Es una estructura de soporte para desarrollo de software
*Posee programas, librerías, scripts, lenguajes, herramientas para unificación, etc.
*Facilita el desarrollo de software
*Provee estructura y metodología
*Los Frameworks con el aparecimiento de:
CGI
Jsp
*Algunos frameworks pueden convertirse en estándares
TIPOS DE FRAMEWORKS
*Frameworks de persistencia
EJB
Hibernate
Toplink
JDO
JPA
*Frameworks de aplicación: Algunos son Orientados a interface
Tapertry
*Frameworks para propósito general: poseen un conjunto de herramientas para interfase, persistencia, seguridades, componentes, etc
EJEMPLOS DE FRAMEWORKS
JSF
STRUTS,TAPESTRY,JSF,(sirven
para aplicaciones web).
MAVEN(se enfocan para la Aplicacion de proyectos).
SPRING(inyeccion de dependencias)
HIBERNATE(Para dar soporte a los ORM(object relational mapping), enfocado a
bases de datos)
y hay muchos mas que no recuerdo.
.NET
FRAMEWORKS para php (Symfony, Zend, cakePHP, etc)
Frameworks para Ajax (Dojo, Script.aculo.us, Prototype, AJAX Engine, ATLAS, ConfortASP .NET, MagicAJAX .NET, etc)