Ing. Pablo Almeida Haro Msc.
ARQUITECTURAS DE SOTWARE
CONCEPTOS
*Son formas, guías generales para resolver problemas
*Conjunto de decisiones significativas las cuales implicarían un impacto
*Indican estructura e interacción entre las partes del software
*Es una definición de la estructura global sin considerar algoritmos o detalles de programación
*Es una definición amplia
*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
MODELOS O VISTAS
*Permiten describir los sistemas de una manera comprensible
*Puede existir varias vistas
*Cada modelo o vista puede describir una parte o todo el sistema
*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
ARQUITECTURAS
*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
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
PATRONES DE DISEÑO
*Base para la búsqueda de problemas comunes en el diseño 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 el conocimiento o experiencia
OBJETIVOS DE LOS PATRONES
*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
CATEGORIAS DE PATRONES SEGUN ABSTRACCION
*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
PLANTILLAS DE PATRONES
Es un medio para describir un patrón de una forma estandarizada
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.
PATRONES CREACIONALES
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 línea 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
Mement .- Permite volver a estados anteriores del sistema
Observer.- Define 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 de programación solo se elabora una sola vez
*En lectura de datos, acumulación, 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
EJEMPLO PATRON DISEÑO JEE
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 inician 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)
.NET
FRAMEWORKS para php (Symfony, Zend, cakePHP, etc)
Frameworks para Ajax (Dojo, Script.aculo.us, Prototype, AJAX Engine, ATLAS, ConfortASP .NET, MagicAJAX .NET, etc)