14 Persistencia UML

27
1 Fundamentos de Ingeniería de SW 1 Fundamentos de Ingeniería de Software Marcello Visconti y Hernán Astudillo Departamento de Informática Universidad Técnica Federico Santa María {visconti,hernan} en inf.utfsm.cl Fundamentos de Ingeniería de SW 2 Esquemas, Patrones y Persistencia Esquemas, Patrones y Persistencia ? Objetivos: ? Definir el concepto de esquema (Framework) ? Aplicar patrones para el diseño de un modelo persistente ? Método de la Plantilla ? Instanciación de Objetos complejos ? Uso de Agentes virtuales

Transcript of 14 Persistencia UML

11

Fundamentos de Ingeniería de SW 1

Fundamentos de Ingeniería de Software

Marcello Visconti y Hernán AstudilloDepartamento de Informática

Universidad Técnica Federico Santa María{visconti,hernan} en inf.utfsm.cl

Fundamentos de Ingenier ía de SW 2

Esquemas, Patrones y PersistenciaEsquemas, Patrones y Persistencia

? Objetivos:? Definir el concepto de esquema (Framework)? Aplicar patrones para el diseño de un modelo persistente

?Método de la Plantilla? Instanciación de Objetos complejos?Uso de Agentes virtuales

22

Fundamentos de Ingenier ía de SW 3

Esquemas, Patrones y PersistenciaIntroducción

? En los sistemas actuales es necesario guardar información en medios de almacenamiento persistente (Bases de Datos)

? ¿Cómo guardar objetos en dichos medios?? Se introducirá un esquema de persistencia para enfrentar esta

problemática? Objeto persistente: Objeto instanciado en memoria que debe ser

almacenado en un medio no volátil ? por ej., EspecificacionDeProducto

? Objetivo: Diseñar un esquema que permita diseñar objetos que den servicios (métodos) a otros objetos para ser almacenados en un medio persistente

Fundamentos de Ingenier ía de SW 4

Esquemas, Patrones y PersistenciaMecanismos de Almacenamiento

? Mecanismos de Almacenamiento más comunes son:

? Bases de datos Orientadas a Objeto:?Presentan la ventaja de no necesitar servicios específicos de

persistencia.

? Bases de datos Relacionales:?Son las más utilizadas hoy en día.?No poseen métodos para almacenamiento de objetos.?Se requieren de servicios especiales para almacenar objetos en las

tablas.

33

Fundamentos de Ingenier ía de SW 5

Esquemas, Patrones y PersistenciaEsquema (Framework)

? Esquema: subsistema expandible de un conjunto de servicios afines.? Conjunto cohesivo de clases que prestan servicios a la parte fundamental

e invariable de un sistema lógico.? Contiene clases concretas y abstractas definiendo las interfaces e

interacciones en que participarán.? En general es necesario que el usuario defina subclases adaptando los

servicios definidos en el esquema.? Posee clases abstractas que pueden incluir métodos abstractos y

concretos.

Fundamentos de Ingenier ía de SW 6

Esquemas, Patrones y PersistenciaEsquema de Persistencia [1]

? Esquema de persistencia es un conjunto reutilizable de clases que presentan servicios a los objetos persistentes

? Se utiliza para trabajar con bases de datos relacionales, una API de servicios de datos orientados a registros (Microsoft ODBC) u otro mecanismo de almacenamiento

? No se utiliza en Bases de Datos orientadas a objetos? En general, este esquema debe traducir los objetos a registros para

guardarlos en una base de datos y viceversa

44

Fundamentos de Ingenier ía de SW 7

Esquemas, Patrones y PersistenciaEsquema de Persistencia [2]

Base de Base de Datos Datos

RelacionalRelacional

Esquema relacional de Esquema relacional de persistencia de objetospersistencia de objetos

Traduce los objetos a registros y a la inversa para almacenarlos en

algún medio de almacenamiento

DefiniciDefinicióón del sisteman del sistemaObjetos realizan llamadas a servicios implementados en el esquema de persistencia

Fundamentos de Ingenier ía de SW 8

Esquemas, Patrones y PersistenciaEsquema de Persistencia - Requerimientos

? Un Esquema de Persistencia debería ofrecer los siguientes servicios:? Almacenamiento y recuperación de objetos ? Transacciones del tipo commit y rollback

? commit - completar la transacción de guardar? rollback - deshacer la transacción, restaurar el estado anterior

? El diseño de un EP debe considerar lo siguiente:? Extendible para otros medios de almacenamiento? Realizar la menor cantidad posible de modificaciones al código

55

Fundamentos de Ingenier ía de SW 9

Esquemas, Patrones y PersistenciaTérminos [1]

? Mapeo? Relación entre una clase y su almacenamiento persistente (p.ej. una tabla

de la BD), y entre los atributos del objeto y los campos (columnas) de un registro.

? Identidad del Objeto? Los registros y los objetos deben tener un identificador único para

relacionarlos fácilmente y evitar duplicados.

? “Broker” (Intermediario de Base de Datos)? Agente especializado (“broker”) de la Base de Datos se encarga de

materializar y desmaterializar.

? Materialización? Es el acto de transformar una representación no orientada a objetos (e.g

registros) a objetos.

? Desmaterialización? Acto contrario a Materializar.

Fundamentos de Ingenier ía de SW 10

Esquemas, Patrones y PersistenciaTérminos [2]

? Caché? Los Brokers poseen un caché (generalmente en memoria principal) en

donde almacenan los objetos materializados.

? Materialización lenta por demanda (MLPD)? La materialización se lleva a cabo únicamente cuando el objeto

almacenado es necesitado por otro.

? Referencias inteligentes? Para hacer transparente la MLPD se crea una referencia inteligente

llamada agente virtual.

? Objetos complejos? Materializaciones de estructuras complejas de objetos.

66

Fundamentos de Ingenier ía de SW 11

Esquemas, Patrones y PersistenciaTérminos [3]

? Estado de la transacción del Objeto? El estado de un objeto persistente puede modificarse en una transacción,

por lo que es deseable llevar un registro de los cambios que sufre para realizar la actualización.

? Operaciones de transacciones? Operaciones commit y rollback.

? Búsqueda? Localización y materialización de los objetos a partir de algunos criterios.

Fundamentos de Ingenier ía de SW 12

Esquemas, Patrones y PersistenciaMapeo

? ¿Cómo mapear un objeto a un archivo o a un esquema de bases de datos relacional?

? El patrón Representación de objetos como tablas propone definir una tabla por objeto persistente, en donde sus atributos equivalgan a una columna de la tabla? Es una buena aproximación para tipos primitivos de datos, pero para tipos

complejos, este método no es tan simple

77

Fundamentos de Ingenier ía de SW 13

Esquemas, Patrones y PersistenciaIdentidad del Objeto [1]

? ¿Cómo identificar a que instancia de objeto corresponden los registros de la tabla?? Conviene contar con un medio que relacione los registros con los objetos y

que asegure la no duplicidad de éstos.

? El patrón Identificador de Objetos (IDO) propone asignar un IDO a cada registro y objeto (o agente de un objeto) que los relacione.? En general, es un valor alfanumérico.

? Toda tabla de la base de datos relacional tiene un IDO como clave primaria, el que también está contenido como atributo en el objeto.

Fundamentos de Ingenier ía de SW 14

Esquemas, Patrones y PersistenciaIdentidad del Objeto [2]

? Ejemplo:

Venta

Fecha

IDO

hora

seTermina()

14:002/2/1997Abc345

10:001/1/1997Xyz123

HoraFechaIDO

:Venta

fecha=1/1/1997

Ido=xyz123

Hora=10:00

:Venta

fecha=2/2/1997

Ido=Abc345

Hora=14:00

Clave PrimariaClave Primaria

El IDO puede El IDO puede definirse en un definirse en un objeto Agenteobjeto Agente

88

Fundamentos de Ingenier ía de SW 15

Esquemas, Patrones y PersistenciaBroker (Intermediario de la BD) [1]

? ¿Quién es responsable de materializar y desmaterializar los objetos desde un almacenamiento persistente, p.ej. EspecificacionDeProducto?

? El patrón Experto señala que debería hacerlo la clase de objeto persistente EspecificacionDeProducto.

? No es muy buena solución:? Existiría un muy alto acoplamiento.? Se pierde la cohesión pues la responsabilidad está fuera del dominio del

objeto.

Fundamentos de Ingenier ía de SW 16

Esquemas, Patrones y PersistenciaBroker (Intermediario de la BD) [2]

? El patrón “Intermediario de Base de Datos” propone construir una clase que se encargue de materializar, desmaterializar y guardar un objeto en un objeto caché (Clase intermediaria).

? Cada objeto persistente puede tener su propia clase intermediaria y que los mecanismos de almacenamiento pueden contar con varias clases de Intermediarios.

IntermediariodeEP

IntermediariodeEPRelacional

Intermediariode

EPArchivos

IntermediarioRelacional

deEspecifdeProducto

Intermediario

RelacionaldeVentas

IntermediariodeArchivos

EspecifdeProductos

Intermediariode

ArchivodeVentas

Superclase abstracta de todos los intermediarios de bases de datos relacionales

Clase concreta encargada de materializar los objetos Ventas a partir de una base de datos relacional

99

Fundamentos de Ingenier ía de SW 17

Esquemas, Patrones y PersistenciaDiseño de Intermediarios: Método de la Plantilla

? El patrón utilizado para el diseño de clases intermediarias.? Se define una clase plantilla, la cual puede ser utilizada para definir el

esqueleto de un algoritmo:? con partes variables que se pueden modificar al heredarse a una subclase. ? e invariables, que no pueden ser modificadas.

? Estos métodos pueden o no estar en una subclase y por general llaman a otros métodos.

? Se sigue el Principio de Hollywood: “no nos llame, nosotros le llamaremos” .? Es decir, un método de una subclase será ejecutado sólo si este es

llamado desde la clase en la cual fue definido.

Fundamentos de Ingenier ía de SW 18

Esquemas, Patrones y PersistenciaDiseño de Intermediarios: Método de la Plantilla

? Ejemplo:

Clase Abstracta

MetododePlantilla()

operacionPrimitiva()

operacionConcreta()

Clase Concreta

operacionPrimitiva()

metododePlantilla

{…..

operacionPrimitiva()

operacionConcreta()

…}

Operaciones abstractas primitivas:

-partes variables

-se desplazan (emiten) en la subclase

Operaciones concretas

-comportamiento por omisión

-si puede ser desplazado en una subclase, recibe el nombre de método de gancho

Método de plantillas: define el esqueleto de un algoritmo con partes variables e invariables.

1010

Fundamentos de Ingenier ía de SW 19

Esquemas, Patrones y PersistenciaMaterialización: Patrón método de plantillas [1]

? La lógica de materialización suele requerir que se genere una instancia de la clase apropiada y que luego se desplacen los datos del registro hacia los atributos de la nueva instancia.

IntermediarioRelacionaldeVentas

currentRecordAsObject() : Sale

IntermediariodeEP

objectWith(anOID) : ObjectinCache(anOID) : ObjectmaterializeWith(anOID) : Object

IntermediariodeEPdeArchivos

materializeWith(OID) : Object

IntermediarioRelacionaldeEspecificaciondeProducto

currentRecordAsObject() : ProdSpec

IntermediarioEPRelacional

currentRecordAsObject() : ObjectmaterializeWith(OID) : ObjectselectFirst(query) : Object

RegistrodeBDR

campo(nombredeArchivo) : Objeto1

1Registro-actual-de

1

1Una técnica totalmente diferente para materializar a partir de archivos planos.

Fundamentos de Ingenier ía de SW 20

Esquemas, Patrones y PersistenciaMaterialización : Patrón método de plantillas [2]

? Tener un Intermediario para los mecanismos de almacenamiento persistente es muy útil para desarrollador.? Puede agregar más clases para adaptarla a nuevos medio o a los ya

existentes.

? Clase IntermediariodeEP se comporta como un agente virtual.? A través del método objectWith(anOID) toma el identificador como

parámetro y devuelve su objeto.? Posee manejo de Caché.

? Si el objeto ya ha sido referenciado antes, no será materializado nuevamente.

? El método de la plantilla define partes variables e invariables:? Invariables: Métodos que no pueden ser modificados.? Variables: Métodos que pueden ser adaptados por los programadores para

amoldar el esquema a un tipo específico de tecnología o método.

1111

Fundamentos de Ingenier ía de SW 21

Esquemas, Patrones y PersistenciaMaterialización : Patrón método de plantillas [3]

? Características clásicas del diseño de esquemas:? Uso de métodos definidos con anterioridad en superclases abstractas.? Incorporación de subclases definidas por el programador.? Definición de los métodos de “operación primitiva” en las subclases para

completar los métodos de plantilla heredados.

Fundamentos de Ingenier ía de SW 22

Esquemas, Patrones y PersistenciaCaché

? El mecanismo de caché puede ser utilizado para dos cosas:? Mejorar el desempeño.

?Materializar es lento.

? Soporte de las operaciones de administración de transacciones.

? El patrón Administración de Caché propone asignar a los intermediarios la responsabilidad de administrar el caché.? Si se tiene un intermediario diferente para cada tipo de objeto

persistente, cada uno de ellos deberá tener su propia caché.

? Al materializar un objeto este se deja en caché con su identificador como clave.? El intermediario primero buscará en este antes de materializar un objeto.

1212

Fundamentos de Ingenier ía de SW 23

Esquemas, Patrones y PersistenciaCaché: Administración de Transacciones

IntermediariodeEP

objectWith(anOID): Object

inCache(anOID): Object

materializeWith(anOID): Object

CachedeObjetos

Add(OID, Object)

Find(OID): Object

isEmpty (): Boolean

Guarda-objetos-en1 6

? Otra forma de conservar los objetos es en varias cachés, según el estado que presenten dentro del contexto de la transacción actual.

? El intermediario conserva hasta 6 tipos diferentes de cachés lo que permite sentar las bases para realizar las transacciones sobre la BD.

Fundamentos de Ingenier ía de SW 24

Esquemas, Patrones y PersistenciaCaché: Tipos

? Los 6 tipos de cachés son:? Caché Limpia y Nueva: Objetos nuevos sin modificaciones.? Caché Limpia y Vieja: Objetos viejos que se materializan de una BD sin

modificaciones.? Caché Sucia y Nueva: Objetos nuevos, modificados.? Caché Sucia y Vieja: Objetos viejos que se materializaron de una BD y

que fueron modificados.? Caché Eliminar Nueva: Objetos nuevos a eliminar.? Caché Eliminar Vieja: Objetos viejos que se materializaron a partir de una

base de datos y que deben ser eliminados.

1313

Fundamentos de Ingenier ía de SW 25

Esquemas, Patrones y PersistenciaReferencias Inteligentes

? Materialización lenta por demanda: materialización de un objeto sólo ocurre cuando sea absolutamente necesario.? Se puede implementar a través de un agente virtual.

? Agente Virtual (Proxy): “representante ” de un objeto real.? Este es el encargado de materializar al objeto real por primera vez cuando

se referencia.? Los clientes deberán interactuar con el agente en vez de hacerlo con el

objeto real.?Un objeto cliente tiene una referencia al objeto Agente Virtual y no al sujeto

real.? El agente virtual implementa la misma interfaz que ese sujeto.

Fundamentos de Ingenier ía de SW 26

Esquemas, Patrones y PersistenciaReferencias Inteligentes: Ejemplo

? Ejemplo con “VentasLineadeProductos” y “EspecificaciondeProducto”.? El diseño est á basado en el supuesto que los agentes conocen el identificador

de objetos de su sujeto real.? Cuando la materialización es requerida, el identificador sirve para localizar y

recuperar el sujeto real.

IEspecificaciondeProducto

descripcion()precio()cup()

<<Interfaz>>VentasLineadeProducto

cantidad

Subtotal()

<<Clase>>

ido : IDO

description()getRealSubject()materializeSubject()price()cup()

<<Clase>>

1

n

1

n

Descrita_por

EspecificaciondeProductodescripcionpreciocup

descripcion()precio()cup()

<<Clase>>

n

Agente_de

n 1

AgenteEspecificaciondeProducto

1414

Fundamentos de Ingenier ía de SW 27

Esquemas, Patrones y PersistenciaAgente Virtual (Proxy) Generalizado

? La especificación de todos los agentes puede definirse en una superclase llamada AgenteVirtual.? Así solo es necesario modificar las instancias específicas para atender a los

diferentes objetos reales que componen el sistema.

InterfazdeAgente

solicitud()

<<Interfaz>>

AgenteVirtualConcreto

solicitud()

<<Clase>>

AgenteVirtualido : IDO

getRealSubject()materializeSubject()

<<Clase>>

SujetoReal

solicitud()

<<Clase>>

1

n

Agente-de

n

1

comportamiento y atributos generales de todos los agentes

Fundamentos de Ingenier ía de SW 28

Esquemas, Patrones y PersistenciaAgentes Virtuales (Proxies) e intermediarios en BD

? Un agente virtual (AV) puede colaborar con un Intermediario de Bases de Datos (“Broker”) a fin de Materializar un objeto, utilizando el identificador de objetos usado por el agente.

AgenteVirtualido : IDO

getRealSubject()materializeSubject()

<<Clase>> IntermediariodeEP

objectWith()inCache()materializeWith()

11

Materializa-a partir de

1 1

if (realSubject not materialized)materializeSubject()

return realSubject

1515

Fundamentos de Ingenier ía de SW 29

Esquemas, Patrones y PersistenciaConexión entre AV e Intermediario de BD

? ¿Cómo un AV concreto sabe cuál intermediario de BD habrá de utilizar?

? Utilizando el patrón Método de Fábrica: La operación primitiva se encarga de crear una instancia.? El agente es responsable de pedir el representante para la BD.? Es conveniente tener una sola instancia de cada intermediario.

? Cuando se usan agentes virtuales, conviene que toda referencia aobjetos se efectúe a través de objetos agente y no a través de referencias directas.? Todas las definiciones de atributos se refieren a objetos agentes a

interfaces, no a objetos directos.? Todos los parámetros se refieren a objetos agente o a interfaces.

Fundamentos de Ingenier ía de SW 30

Esquemas, Patrones y PersistenciaConexión entre AV e Intermediario de BD

AgenteEspecificaciondeProducto

createBroker()description()price()upc()

<<Clase>>

AgenteVirtualido : IDO

createBroker()getBroker()getRealSubject()materializeSubject()

<<Clase>>

IntermediariodeEPRelacional

ObjectWith()11 1

intermediario

1

realSubject:=getBroker().objectWith(ido)

//método de plantillaif(broker not created)

broker:=createBroker()Return broker

returnProductSpecificationRelationalBroker.Instance()

Método Fabrica

IntermediariodeEPRelacional

1616

Fundamentos de Ingenier ía de SW 31

Esquemas, Patrones y PersistenciaCómo representar Relaciones en Tablas

? ¿Cómo representar las relaciones de objetos en una tabla de una base de datos relacional?? Utilizando el patrón Representación de objetos como tablas.

? Según la relación entre los objetos se propone:? Asociaciones uno a uno.

? Colocar una clave foránea del IDO en una o en las dos tablas que representan los objetos en la relación.

? Asociaciones uno a muchos:? Crear una tabla asociativa que registre los identificadores de cada objeto en la

relación.

? Asociaciones muchos a muchos:? Crear una tabla asociativa que registre todos los identificadores de objetos en la

relación.

Fundamentos de Ingenier ía de SW 32

Esquemas, Patrones y PersistenciaPatrón Instanciación de Objetos Complejos [1]

? Problema: ¿Cuándp implementar Agentes Virtuales e Intermediarios de BD?? Cuando los objetos pueden pertenecer a una jerarquía de composición

profunda.

? Cuando si se quiere materializar un objeto es posible que haya que materializar también decenas de objetos relacionados.

? La materialización de una jerarquía integra de composición usa el espacio lenta e ineficientemente.

? Solución: Aplazar la materialización de los objetos, dependiendo de los patrones de acceso y los requerimientos de desempeño, hasta que sea necesario.? Hay veces en que conviene materializar uno o dos niveles de profundidad? Con un intermediario distinto para cada objeto persistente, es posible

decidir, intermediario por intermediario, el grado de materialización de los objetos persistentes y sus objetos asociados

1717

Fundamentos de Ingenier ía de SW 33

Esquemas, Patrones y PersistenciaPatrón Instanciación de Objetos Complejos [2]

? Ejemplo: Materializar la instancia VentasLineadeProducto.? Suponer que la información se encuentra almacenada en las siguientes

tablas.

2vli2

1vli1

CantidadIDO

2222.25tempehp2

1111.50pañuelosp1

cuppreciodescripcionIDO

P2vli2

P1vli1

EP-IDOVLI -IDO

ventasLineadeProducto-a-EspecifdeProducto

ventasLineadeProducto EspecifdeProducto

Fundamentos de Ingenier ía de SW 34

Esquemas, Patrones y PersistenciaPatrón Instanciación de Objetos Complejos [3]

? Se sabe que el IDO de VentasLineadeProducto es “vli1”.

? Si se ejecuta el siguiente código:

//Crear el agente

AgenteVentasLineadeProducto unVLI=

new AgenteVentasLineadeProducto(“vli1”),

//Causa materialización de los objetos

Int total = unVLI.subtotal();

1818

Fundamentos de Ingenier ía de SW 35

Esquemas, Patrones y PersistenciaPatrón Instanciación de Objetos Complejos [4]

: AgenteVentasLineaDeProducto

Crear("vli1")

t:=subtotal()o : VentasLineaDeProducto

2: t:=subtotal()

1: o:=getRealSubject()

: AgenteVentasLineaDeProducto

o:=getRealSubject()

b : IntermediarioVentasLineaDeProducto

1: [not materialized] materializeSubject()

1.1: b:=getBroker ()

1.2: o:=objectWith((ido)

N: o:=currentRecordAsObject()

Finalmente, llega a este mensaje

VentasLineadeProducto vli:=new VentasLineadeProductovli.cantidad(currentRecord.field("cantidad”))//recuperar el IDO de EspecifDeProducto asociadoSELECT *

from VentasLineadeProducto-a-EspecifiDeProductowhereVLI-IDO= :ido

EspecifDeProdIDO=currentRecord.field("EP-IDO")//crear el intermediario a la EspecifDeProductoIntermediarioEspecifdeProducto intermediario =

new IntermediarioEspecifiDeProducto(EspecifDeProdIDO)//guardar intermediario en VLIvli.especifdeProducto=intermediarioreturn vli

Fundamentos de Ingenier ía de SW 36

Esquemas, Patrones y PersistenciaPatrón Instanciación de Objetos Complejos [5]

? VentasLineadeProducto referencia a un agente, no a la EspecificaciondeProductos real.? Esta última no se materializará mientras no se le envíe el mensaje precio.

1919

Fundamentos de Ingenier ía de SW 37

Esquemas, Patrones y PersistenciaPatrón Instanciación de Objetos Complejos [6]

: VentasLineaDeProductot:=subtotal()

: AgenteEspecifDeProducto

1: p:=precio()

: AgenteEspecifDeProducto

o:=getRealSubject()

b : IntermediarioEspecifDeProducto

1: [not materialized] materializeSubject()

1.1: b:=getBroker ()

1.2: o:=objectWith(()ido)

N: o:=currentRecordAsObject()

Finalmente, llega a este mensaje

EspecificacionDeProducto ep:=new EspecificacionDeProducto

ep.descripcion=currentRecord.field("descripcion")ep.precio=currentRecord.field("precio")ep.cup=currentRecord.field("cup")

return ep

2: o:=getRealSubject()

o : EspecificacionDeProducto

3: p:=precio()

Fundamentos de Ingenier ía de SW 38

Esquemas, Patrones y PersistenciaOperaciones Transaccionales [1]

? Estado de transacción de los objetos:? Limpio y nuevo. Objetos nuevos, sin modificaciones? Limpio y viejo. Objetos viejos, sin modificaciones? Sucio y nuevo. Objetos nuevos, sin modificaciones? Sucio y viejo. Objetos viejos materializados a partir de una base de datos

con modificaciones? Eliminar nuevo. Objetos nuevos que deben ser eliminados? Eliminar viejo. Objetos viejos que fueron materializados a partir de una

base de datos y que deben ser eliminados

? El Intermediario de BD conservará cachés especiales para cada uno de estos estados y garantizará con ello que un objeto está en la cachéapropiada.

2020

Fundamentos de Ingenier ía de SW 39

Esquemas, Patrones y PersistenciaOperaciones Transaccionales [2]

? ¿Cómo se ensucia un objeto?? Un objeto se ensucia al modificar uno de sus atributos a través de un

método mutador (establecedor)? Por ejemplo:

// clase EspecificacióndeProductovoid price(float p){

price = p;BrokerServer.instance().dirty(this);

}

? Al ServidordeIntermediario (Fachada) se le notificará que un objeto est ásucio? Este encontrará el Intermediario apropiado de la BD para esta clase de objetos

y le notificará que el objeto está sucio? El Intermediario introduce el objeto en una caché sucia. Vieja y sucia si era un

objeto materializado

Fundamentos de Ingenier ía de SW 40

Esquemas, Patrones y PersistenciaOperaciones Transaccionales [3]

? ¿Cómo eliminar?? Es necesario registrar explícitamente el hecho para que se pueda realizar

la modificación correspondiente en la BD luego de una operación commit? Por ejemplo:

// clase CatalogodeProductosvoid removeProductSpec(ProductSpec p){

// eliminar p en la colección de ProductSpecProductSpec.remove(p);// notificarle al intermediario que p debe eliminarseBrokerServer.instance().delete(p);

}

? Al ServidordeIntermediario se le notificará que un objeto est á sucio

2121

Fundamentos de Ingenier ía de SW 41

Esquemas, Patrones y PersistenciaOperaciones Transaccionales [4]

? Operación commit? Una vez se decide instalar la transacción, se envía un mensaje commit a la

Fachada ServidordeIntermediarioBrokerServer.instance().commit();

? El método ServidordeAgente.commit simplemente dirige un mensaje commit a cada intermediario.

void BrokerServer.commit()

{for each broker b

b.commit()

}

Fundamentos de Ingenier ía de SW 42

Esquemas, Patrones y PersistenciaOperaciones Transaccionales [5]

? En una transacción los objetos pueden ser creados, modificados y eliminados.? Suponiendo que se encuentren en la caché del estado correspondiente de

la transacción, el mensaje commit debe cumplir con las siguientes reglas:? Caché Nueva y Limpia - Insertar en BD, Dirigirse a Caché Vieja y Limpia? Caché Vieja y Limpia - Ignorar, no han cambiado? Caché Nueva y Sucia - Insertar en BD, Dirigirse a Caché Vieja y Limpia? Caché Vieja y Sucia - Actualizar en BD, Dirigirse a Caché Vieja y Limpia? Caché Nueva Eliminada - Eliminar en caché? Caché Vieja Eliminada - Eliminar en DB, Eliminar en caché

2222

Fundamentos de Ingenier ía de SW 43

Esquemas, Patrones y PersistenciaOperaciones Transaccionales [6]

? Operación rollback.? Una vez decidido someter la transacción a un rollback, se envía un

mensaje rollback a la Fachada ServidordeIntermediarioBrokerServer.instance().rollback();

? El método ServidordeAgente.rollback simplemente dirige un mensaje rollback a cada intermediario.

? Las reglas del rollback son las siguientes:? Caché Vieja y Limpia - Ignorar, no han cambiado.

? El resto de las cachés - Eliminar en la caché.

Fundamentos de Ingenier ía de SW 44

Esquemas, Patrones y PersistenciaBusca de objetos en almac. persistente [1]

? Recuperar un registro a partir de un almacenamiento persistente depende de las herramientas, bibliotecas y del sistema operativo.? Por ejemplo, en Windows se puede utilizar los servicios del DAO.? Dentro del esquema se definió el método

IntermediariodeEPRelacional.SeleccionarPrimero(consulta) para localizar el primer registro que cumpla con los criterios de la consulta.

? En general, un Intermediario de BD debe ofrecer 2 formas de búsqueda:? Búsqueda mediante el identificador de objetos.? Búsqueda mediante criterios arbitrarios, como las clave primaria del

dominio, por ejemplo, RUT.

2323

Fundamentos de Ingenier ía de SW 45

Esquemas, Patrones y PersistenciaBusca de objetos en almac. persistente [2]

? ¿Con qué criterio debería recuperarse el objeto raíz en una jerarquía de composición?? Los objetos raíz no pueden materializarse utilizando Agentes Virtuales y

realizando una búsqueda con sus identificadores de objeto como clave de consulta.? Por ejemplo, una instancia Venta y sus instancias asociadas

VentasLineadeProductos y sus EspecificacionesdeProductos.

? Las instancias asociadas se materializan utilizando Agentes Virtuales en base al valor de identificador de objetos del raíz (Venta), pero ¿cómo se prepara la escena y se introduce en la memoria esta primera instancia de Venta?

Fundamentos de Ingenier ía de SW 46

Esquemas, Patrones y PersistenciaBusca de objetos en almac. persistente [3]

? Este problema indica la necesidad de contar con capacidad de búsqueda orientada al dominio.

? En el ejemplo se podría utilizar la fecha y hora para buscar una instancia de Venta.

IntermediarioRelacionaldeVentas

CurrentRecordasObject():Venta()VentaconFechayHora(fecha,hora):Venta()

selectFirst("date = ",fecha,"and time = ",hora)return currentRecordasObject()

2424

Fundamentos de Ingenier ía de SW 47

Esquemas, Patrones y PersistenciaDiseños Alternativos [1]

? Metadatos e Intermediarios parametrizados? Definir Metadatos (datos acerca de datos) respecto al mapeo de clases y

tablas, respecto al mapeo de nombres de atributos y campos, etc.? Los metadatos se pueden conservar en un

objeto.MetadatosdeAlmacenamientoPersistente.?No es necesario generar una jerarquía de intermedios.? Por ejemplo, es posible que el IntermediariodeEPRelacional sea una clase

instanciada y parametrizada con metadatos.o No se requieren subclases de IntermediarioEPRelacional.

? Metadatos es un enfoque más flexible y robusto que el de formación de subclases.? Se recomienda en aplicaciones que contengan muchas clases de objetos

persistentes.

Fundamentos de Ingenier ía de SW 48

Esquemas, Patrones y PersistenciaDiseños Alternativos [2]

? Objetos Consulta? A diferencia de las consultas de cadenas simples (por ejemplo “OID=123”)

es posible crear una clase Consulta cuyas instancias estén parametrizadas con expresiones booleanas.

? Este esquema tiene la ventaja de abstraer de cualquier lenguaje de manipulación de datos, p.ej. SQL.

? Cambio de intermediarios y de intermediarios de bases de datos en la memoria.? Consiste en crear un Intermediario en-la Memoria que no guarde objetos

en un almacenamiento persistente cuando se envía la señal de commit .? Es útil durante el desarrollo y las pruebas para evitar la complejidad y

desempeño de un intermediario real.

2525

Fundamentos de Ingenier ía de SW 49

Esquemas, Patrones y PersistenciaDiseños Alternativos [3]

? Se puede desconectar un intermediario y conectar otro, sin afectar a los objetos cliente.? Así, se puede utilizar in Intermedio en-la Memoria durante algún periodo y

luego reemplazarlo por un intermedio relacional o plano.

IntermediariodeEP

IntermediariodeEPenMemoriaIntermediariodeEPRelacional IntermediariodeEPdeArchivos

Intermediario utilizado en las pruebas

Fundamentos de Ingenier ía de SW 50

Esquemas, Patrones y PersistenciaDiseños Alternativos [4]

? Comparación entre estados de transacción y cachés múltiples.? Una forma eficiente de recordar el estado de transacción de un objeto es

colocándolo en una caché de intermediarios, por ej. ViejaLimpia o ViejaSucia.

? Un diseño alterno es donde cada objeto se asocia a un objeto EstadodeTransacción que indica si es viejo y limpio, viejo y sucio, etc.? Todos los objetos pueden estar en una caché, y el estado de transacción del

objeto se conoce mediante el objeto asociado de estado y no mediante su pertenencia a la caché.

? No conviene agregar directamente el conocimiento de la persistencia a las definiciones del objeto de dominio.

2626

Fundamentos de Ingenier ía de SW 51

Esquemas, Patrones y PersistenciaDiseños Alternativos [5]

? Se recomienda las siguientes opciones:? Si se usa una superclase común ObjetoPersistente, el estado es un

atributo definido en esa clase.? En un Mapa (Dictionary o Hashtable) que conserva el intermediario.

? La clave del Mapa es el objeto, el valor asociado Mapa es el EstadodeTransacción del objeto.

? Como un atributo del AgenteVirtual? Este diseño presenta una complicación: si varios agentes se relacionan con el

mismo objeto real, todos ellos deberán permanecer sincronizados.

Fundamentos de Ingenier ía de SW 52

Esquemas, Patrones y PersistenciaDiseños Alternativos [6]

EstadodeTra nsaccion

commit()()rollback()()

EstadoViejoLimpio

commit()()rollback()()

EstadoViejoSucio

commit()()rollback()()

2727

Fundamentos de Ingenier ía de SW 53

Esquemas, Patrones y PersistenciaQuiz

? ¿Cuál es la necesidad real de agentes e intermediarios?

? ¿Cómo el diseño de los agentes e intermediarios da soporte a alta cohesión y bajo acoplamiento?

? ¿Se cumple la arquitectura multicapa?