algoritmos y programación iii 8. patrones de despliegue, arquitectura y gof carlos fontela, 2006
TRANSCRIPT
Algoritmos y Programación III
8. Patrones de despliegue,
arquitectura y GoF
Carlos Fontela, 2006
Temario
Patrones de despliegue
Patrones de componentes 3 capas y N capas
Persistencia Enfoque, formas de encararla Serialización, bases de datos
Patrones muy comunes Decorador Otros patrones
Arquitectura de despliegue
Cómo se despliega un sistema en el hardware
Aplicaciones stand-alone El sistema está desplegado enteramente en la
máquina del usuario
Aplicaciones distribuidas El usuario accede a un sistema corriendo
parcialmente en una máquina remota Las máquinas remotas pueden ser varias
Patrones: cliente - servidor
Ventajas Especialización de equipos
Seguridad, en algunos casos
Si es web...• Más sencillos despliegue y
actualización
Cliente
Servidor de aplicaciones
Patrones: tres capas
Capas = Tiers
Ventajas
Ídem anterior,
ampliadas
Muy “de moda”
Cliente
Base de datos
Servidor de aplicaciones
Arquitecturas y UML (I)
Diagrama de despliegue
Servidor Base de Datos
Servidor de Aplicaciones
Servidor Web
Servidor ComercialPC Empleado
Consulta Catálogo Intranet
Sistema Compras
Servicio Web CatálogoPáginas JSP
Clases de Negocio Catálogo (Java)
Sistema Ventas
HTTP
Ethernet
HTTP
Ethernet
Base de Datos Catálogo
Arquitecturas y UML (II)
Consulta Catálogo Intranet Sistema Compras
Servicio Web CatálogoPáginas JSP
Clases de Negocio Catálogo (Java)
Sistema Ventas
iCatalogo
Interfaz Web XML SOAP
Base de datos de Catálogo
Diagrama de componentes
Arquitecturas de componentes
Simplemente arquitectura Descripción de componentes de software y
sus interacciones Separación garantiza posibilidad de cambios Generalmente basada en patrones
MVC 3 capas N capas
Combinables con las anteriores Por lo tanto, independientes
Patrón de 3 capas
No confundir con
homónimo de
despliegue
Capas = layers
Ventajas
Cambios en IU y DAL
Varios IU o DAL
Otras interfaces
Interfaz de usuario
Modelo de negocio
Acceso a datos
Interfaz de usuario
Modelo de negocio
Acceso a datos (DAL)
Patrones de N capas: ejemplo
Interfaz de usuario
Modelo de negocio
Acceso a datos
Seguridad
Adm
inistración Operativa
Com
unicación
Interfaz de usuario
Modelo de negocio
Acceso a datos
Seguridad
Adm
inistración Operativa
Com
unicación
Patrones de N capas ++
Seguridad
Adm
inistración
Com
unicación
Componentes de la IU
Componentes de procesos de la IU
Servicios de IU
Flujos delmodelo
Componentesdel modelo
Entidadesdel modelo
Componentes lógicosde acceso a datos
Agentes deservicios
Seguridad
Adm
inistración
Com
unicación
Componentes de la IU
Componentes de procesos de la IU
Servicios de IU
Flujos delmodelo
Componentesdel modelo
Entidadesdel modelo
Componentes lógicosde acceso a datos
Agentes deservicios
Capa de acceso a datos
También DAL “Data Access Layer”
Dos enfoques Como persistencia de objetos
• (diseño orientado a objetos)
Como abstracción de la base de datos• (diseño por datos)
Persistencia
Capacidad de un objeto de trascender el tiempo o el espacio Guardar el estado de un objeto Enviar un objeto por una red
Debiera ser transparente Y no lo es casi nunca
Separación de identidad y estado En diagrama de clases de UML
{persistent}
Persistencia y agregación
Simple Casi siempre incorrecta Persistir sólo el objeto principal, con sus
referencias
Polimórfica Mantiene referencias y valores
Isomórfica Recuperación sin conocer el tipo
Serialización
Cadenas de bytes Soportada en varios lenguajes
• Java, .Net
Multiplataforma si lo es el lenguaje• Java, .Net
No es multilenguaje
XML Con APIs especiales en cada lenguaje: SAX,
DOM, JDOM, dom4j Multiplataforma y multilenguaje
Entrada y salida en Java (I)«interface»
DataOutputStream«interface»
DataInputStream
OutputStream InputStreamRandomAccessFile ReaderWriter
1 1 1 1
File
1 1 1 1
OutputStream
FileOutputStream PipedOutputStream ByteArrayOutputStreamFilterOutputStream
DataOutputStream PrintStream BufferedOutputStream
ObjectOutputStream
Entrada y salida en Java (II)
Ejemplo:BufferedReader entrada = new BufferedReader
(new FileReader("Datos.txt"));
while ( (s = entrada.readLine()) != null)
System.out.println(s);
entrada.close();
Cambios en 1.4 A java.io se le agrega java.nio Mejor desempeño Mejor soporte de redes
Serialización en Java (I)
Implementar java.io.Serializable Cáscara vacía Permite al compilador generar información de
serialización Evita el lanzamiento de
NotSerializableException Por el resto es automático y permite usar
ObjectOutputStream y ObjectInputStream para leer y escribir
Serialización en Java (II)
Ejemplo:class Fraccion implements Serializable {
// …public void serializar (String archivo) throws IOException {
ObjectOutputStream salida = new ObjectOutputStream(new FileOutputStream(archivo));
salida.writeObject(this);}public Fraccion hidratar (String archivo)
throws IOException,ClassNotFoundException {ObjectInputStream entrada = new ObjectInputStream(
new FileInputStream(archivo));return (Fraccion)entrada.readObject();
}}
Serialización en Java (III)
Realiza persistencia isomórfica Si las clases de los objetos contenidos
implementan Serializable Si las clases ancestros implementan
Serializable
Y persistencia polimórfica Si se usa reflexión
Object o = entrada.readObject();
if (o.getClass() == Fraccion.class)
Fraccion z = (Fraccion)o;
Serialización .Net
.Net tiene una anotación (“atributo”) Serializable Semántica similar a Java
Persistencia y bases de datos
Vimos que la persistencia no necesariamente se hace sobre bases de datos
Pero las bases de datos son centrales en las organizaciones
Bases de datos y OO (I)
La BDR no es OO Problemas con identidad de objetos No almacena objetos, con atributos y
comportamiento Pero se usa en el 90% de las
aplicaciones corporativas Se construye una capa filtrante que
haga el cambio de paradigma• De eso estamos hablando: DAL
Bases de datos y OO (II)
BDOO Definición imprecisa Sin éxito comercial destacable Muchas ni siquiera soportan herencia y
polimorfismo Ejemplos
Gemstone, Objective/DB, ObjectStore, Ontos, O2, Itasca, Matisse, Versant, Poet, Objectivity, db4o
Visión J2EE
Es la más audaz Propone que todo EJB de tipo “CMP entity”
mantenga su estado en un repositorio permanente sin que el programador se deba preocupar de ello Con bases de datos relacionales o no
Fuertes críticas Restricciones sobre el modelo de clases Dificultades de implementación Bajo desempeño
Bases de datos y Java
JDBC SQL multiplataforma desde Java Paquete java.sql
Ejemplo, luego de compleja inicialización:ResultSet r = s.executeQuery("SELECT NOMBRE, APELLIDO
FROM alumnos WHERE TELEFONO Is Not Null ORDER BY APELLIDO");
// iteramos para encontrar los resultados:
while (r.next())
// r es una especie de iterador
System.out.println(r.getString("APELLIDO")+", "+r.getString("NOMBRE"));
Frameworks de persistencia (I)
Se ocupan de hacer un mapeo del mundo de los objetos al mundo relacional “O/R-mapping”
Generalmente trabajan con archivos XML que definen cómo se hace el mapeo
Muchas soluciones comerciales muy buenas Ahorran mucho trabajo A veces me evitan desarrollar la DAL
Frameworks de persistencia (II)
Casos Hibernate JDO OJB DataObjects Varios más
Cuando no son suficientes, puedo construir mi propio framework
Decorador: presentación (I)
Para agregar responsabilidades dinámicamente Respetando el principio abierto-cerrado Ejemplo:
un modelo de automóvil en tres variantes, llamadas sedán, coupé y familiar, y cada variante tiene un precio básico de venta;
a cada variante se le pueden agregar opcionales como techo corredizo, aire acondicionado, sistema de frenos ABS, motor diesel y motor de 16 válvulas, y cada uno tiene un precio que se suma al básico;
cada auto podrá tener ninguno, uno o más opcionales.
¿Cómo calculamos los precios?
Decorador: presentación (II)
Solución tradicional: herencia. Una clase para cada combinación posible Con 3 variantes y 5 opcionales, las
combinaciones posibles son 3 x 25 = ¡96 clases!
Otra: atributos booleanos Diseño difícil de cambiar (p.ej. nuevos
opcionales)
Solución con Decorador: Diseño inicial más complejo Más escalable
Decorador: solución (I)
Decorador: solución (II)
public interface Auto {double costoTotal();
}public class Sedan implements Auto {
private double costo = 30000.0;public double costoTotal() {
return costo;} }
public class Familiar implements Auto {private double costo = 40000.0;public double costoTotal() {
return costo;} }
Decorador: solución (III)
public abstract class DecoradorOpcionales implements Auto {
protected Auto basico;
public Decorador (Auto comp) { basico = comp; }
public double costoTotal() {
return basico.costoTotal();
} }
public class TechoCorredizo extends DecoradorOpcionales {
private double costo = 1500.0;
public TechoCorredizo (Auto comp) { super(comp); }
public double costoTotal() {
return basico.costoTotal() + costo;
} }
public class AireAcondicionado extends DecoradorOpcionales { …
Decorador: solución (IV)
Instanciación:Auto a = new TechoCorredizo(
new AireAcondicionado(new Sedan()));
Un nuevo opcional Con herencia, 96 clases más Con Decorador, una clase más
Cambio del precio de un opcional Con herencia, 48 cambios Con Decorador, 1 cambio
Decorador: uso general
Agregar comportamiento a métodos de un objeto Antes o después de llamarlos Mediante envoltorios a la clase servidora
(“wrappers”)
Ejemplo Clases de java.io
Decorador: otro ejemplo (I)
Supongamos que deseo contar cada vez que se llama el método dibujar en cualquier clase
Decorador: otro ejemplo (II)
Solución con Decorador:
Figura f = new Contador (new Elipse() );
Decorador: otro ejemplo (III)
¿Pero, cómo nos aseguramos de que siempre asocie un Contador a cada Figura creada? Podemos encapsular la creación de
figuras y allí envolver cada objeto en un Decorador
Esto es otro patrón
Otros patrones habituales (I)
Estrategia Permite variar dinámicamente un
algoritmo Adaptador
Adapta un servicio para usarlo desde una clase
Fachada Simplifica el acceso (interfaz) a varios
servicios de un subsistema
Otros patrones habituales (II)
Proxy Objeto intermediario con la misma
interfaz que el objetivo Estado o State
Cuando cambia el estado de un objeto, que cambie su comportamiento
Compuesto o Composite Para definir objetos compuestos con la
misma interfaz que sus componentes
Otros patrones habituales (III)
Muchos más GoF Orden Memento Fábrica abstracta Son 23…
Muchos más de otros autores-recopiladores MVC es un patrón compuesto Patrones de Larman
Resumen
Arquitecturas Facilitar cambios y modificaciones
DAL: dos enfoques Persistencia de objetos Abstracción de BD
BDR se usan a través de un mapeo O/R
Decorador Agrega comportamiento antes o después de la
llamada a un método
Qué sigue
Vuelta a programación Concurrencia Buen código OO Aplicaciones distribuidas e integración de
aplicaciones
Bibliografía y otras fuentes
Patrones de diseño Gamma et al.
Head-First Design Patterns Eric Freeman – Elisabeth Freeman
UML y patrones Craig Larman
Orientación a objetos con Java y UML Carlos Fontela
Muchas Gracias.
Carlos Fontela, 2006