Вы находитесь на странице: 1из 30

Arquitectura de software

dirigida por modelos


(Model-Driven Architecture)
Liliana Favre
UNCPBA
2006
Model-Driven Architecture (MDA)
Es una evolución de estándares definidos por OMG
(Object Management Group) para mejorar
procesos de desarrollo de sistemas de software dirigidos
por modelos.
Ideas centrales en MDA
 Separar la especificación de la funcionalidad del
sistema de su implementación sobre una plataforma en
una tecnología específica.
 Controlar la evolución desde modelos abstractos a
implementaciones tendiendo a aumentar el grado de
automatización.
Plataforma en MDA
Plataforma
Es un conjunto de subsistemas y tecnologías que
proveen un conjunto coherente de funcionalidad
que puede ser usada en cualquier aplicación sin
tener en cuenta detalles de cómo la
funcionalidad
es implementada
Modelos y MDA
Distingue diferentes tipos de modelos:

 CIM (Computation Independent Model)

 PIM (Platform Independent Model)

 PSM (Platform Specific Model)

 ISM (Implementation Specific Model)


Modelos y MDA
Computation Independent Model (CIM)
 Es una descripción de la lógica del negocio desde una
perspectiva independiente de la computación. Es un
modelo del dominio

Platform Independent Model


 Es una descripción de la funcionalidad del sistema en
forma independiente de las características de
plataformas de implementación específicas.
Modelos y MDA
Platform Specific Model (PSM)
Es una descripción del sistema en términos de
una plataforma específica. Por ejemplo, .NET,
J2EE, relacional,…

Implementation Specific Model


Es una descripción (especificación) del sistema a
nivel de código. Por ejemplo, Java, C#, …
MDA
 Clasificación de modelos

 Independencia de plataformas específicas

 Transformación de modelos y refinamiento


Model-driven Development (MDD)
Un desarrollo MDD distingue al menos las siguientes
etapas:
 Construir un PIM en un alto nivel de abstracción,
independiente de una tecnología específica.
 Transformar al PIM en uno o más modelos
dependientes de una paltaforma específica,
denominados PSM. Por ejemplo, relacional, J2EE,
.NET
 Transformar los PSM a código.
MDD (Model-Driven Development)
CIM

PIM

PSM PSM PSM


J2EE REL dotNET

CODE CODE CODE


Transformaciones y MDA
Una transformación es el proceso para convertir
un modelo en un lenguaje en un modelo en otro
lenguaje.
 Refinamientos horizontales
 Refinamientos verticales
 Antirefinamientos
 Refactorings
 Puentes
Transformaciones y MDA
La evolución desde modelos CIM a ISM es alcanzada
por:
 Refinamientos que permiten construir una
especificación más específica a partir de una más
abstracta
 Verticales (por ejemplo, PIM a PSM, PSM a
ISM)
 Horinzontales (por ejemplo, PIM a PIM, PSM a PSM)
 Refactorings que permiten transformar modelos en un
determinado nivel (PIM, PSM, ISM) sin cambiar su
funcionalidad, pero mejorando algunos factores de
calidad no funcionales.
Transformaciones y MDA
Otras transformaciones:
 Puentes entre diferentes PSMs, ISMs. Por
ejemplo de COBOL a JAVA, de J2EE a
.NET,…

 Anti-refinamientos que permiten construir


una especificación más abstracta a partir de
una más específica. Por ejemplo, de ISM a
PSM, de PSM a PIM,….
Transformaciones en MDA

PIM tool PSM tool ISM

Transformaciones automáticas
MDA- Beneficios
 Productividad

 Portabilidad

 Interoperabilidad

 Evolución del software


Metamodelos y MDA
En MDA es crucial analizar, automatizar y transformar
modelos:
 Mantener trazas y relaciones entre diferentes modelos
 Lograr interoperabilidad en diferentes niveles

Descripciones precisas de la semántica de los modelos

Metamodelos
Modelos, Transformaciones y
Metamodelos
OMG provee un framework conceptual y estándares
para expresar modelos, relaciones y transformaciones
modelo-a-modelo.

UML/OCL Modelos

MOF Metamodelos
(Meta Object Facility)

QVT Transformaciones
(Query-View-Transformation)
Arquitectura de metamodelado
Arquitectura de metamodelado de 4 niveles:
 Meta-metamodelo

(MOF) MOF
 Metamodelo

(Metamodelo UML, SPEM) SPEM


 Modelo

(UML, RUP) RUP


 Objetos

“es-una-instancia”
Transformaciones y metamodelos

Metamodelo
PIM
“es-instancia-de” PIM

Refinamiento Refinamiento PIM-PIMmetamodelo


PIM-PSM PSM- PSMmetamodelo

Metamodelo
PSM PSM

“es-instancia-de”
MDA y Reingeniería
Domain Model

CIM

PIM Metamodel PIM Metamodel


Classifi er Associati on Class

Relations hip Generalizat ion


Generalization
Target Adaptee
1

Target

1
1
Adaptee

1
OCL 1

1..*
0..* OCL
Constraints Constraints
0.. * AdapteeAdapter
T
argetAdapter
Assoc EndAdaptee
1..* Attribute
TargetAdapter 0..* 1 1..* 0..*
AdapteeAdapter 1
1 1
1..* AdapterAdaptee
0..* Adapter
1
1 1 0..* Adaptees
1
Adapter 1
1 {or} 0.. * AssocEndAdapter 1 1
GetAdaptees
1 Operat ion

Class AssociationEnd 1
SetAdaptees

<instance of> <instance of>


PIM
Refactoring

Patterns

Rules + Strategies

Components
PSM Metamodel PSM Metamodel
+supplier DirectedRelationshi p

Rules
NamedElement Dependency
1..* (from Kernel )
*
+client

1..* * +supplier
NamedElement Dependency

OCL
1..*

OCL
*
Op
aq ue Expression +client
0..1 0..1 Abstraction
(from Kernel) Usa
ge
1..* *

Constraints Constraints
+mapping

0..1 0..1
OpaqueExpression
Realizati o
n Abstraction Usage
(from Kern
el)

+contract Realization
Su
bstitution * Classifier
1
* 1

<instance of> <instance of>


PSM
Refactoring

Rules + Strategies

Components
ISM Metamodel ISM Metamodel
Rules
+declari ngClass
0..1
+declari ngInterface 0..* JavaClass
Interface +declarin gClass

OCL OCL
+declaredClass isPublic DataType
(Jav
a_Li br ary) 0..1
isAbstract +declaringIn terface
isFi nal Interfac e 0..* JavaClass
+declaredInte rface +declaredClass isPublic
+declaringClass isAbstrac t

Constraints Constraints
isFinal
+declarin gClass
+declaringInterface
TypedElement
* +client +declaredClass
1 +client
*

+jav
aExceptions * *
Member
Member
isFinal
isFi nal * isStatic
* isStatic
NewClass
Method
isAbstra ct
1..* isNat ive
+localAtt Fi eld isSyncronized
Method
isConstru cto r
i sAbstract *
i sNative JavaParameter
*
i sSyncronized {ordered}
i sConstr uctor

<instance of> <instance of>


ISM

Refactoring

Rules + Strategies
Especificación de transformaciones
como contratos OCL
TRANSFORMATION transformationName
PARAMETERS<parameterList>
PRE: <preconditionList>
POST: <postconditionList>
Additional Operations
def:…
def:…
END
Ejemplo
BON-Metamodel simplificado
Model
* abstractions

source.target Abstraction
2

Dynamic Static
Abstraction Abstraction

Object Object
Cluster Cluster Class
name:String

0..1
feature 1
Relationship type
parameters

Attribute
Static Message
Relationship Routine
parameters

Inheritance Aggregation Association


constraints
Ejemplo
Metamodel UML simplificado

NameSpace Packageable
Element

Package
owningPackage *
0..1 ownedMember PackageableElement
Ejemplo
Metamodel UML simplificado
Classifier Structural
Feature Classifier Relationship

memberEnd Association
class ownedAttribute Property
Class 0..1 redefinedProperty
*
isDerived:Boolean ownedEnd 0..1
isComposite:Boolean
Type
aggregation….
0..1
superclasss 1..*
subsettedProperty
opposite

0..1 * Operation
ownedOperation

0..1
* Classifier
nestedClassifier
Ejemplo
Metamodel UML simplificado

Behavioral Feature

Operation 0..1 ownedParameter


Parameter

0..1 precondition
* Constraint
0..1 postcondition
*
type
0..1 Type
Especificación de transformaciones
TRANSFORMATION BASIC PACKAGE
PARAMETERS
source: UMLMetamodel :: Package
target: BON-PSM-Metamodel :: Model

PRE:
-- source es un Package simple, que sólo contiene clases y asociaciones
source.ownedMember ->
forAll (s / s.oclIsTypeOf (Class) or s.oclIsTypeOf(Association))

POST:….
Especificación de transformaciones
POST:
-- para cada clase en source existe una clase target que
tiene
--el mismo nombre
source.ownedMember ->
select (oclIsTypeOf (Class)) ->
forAll(classSource|target.abstractions->
select(oclIsTypeOf (Class)) ->
exists(classTarget|classSource.name=
classTarget.name )and …
Especificación de transformaciones
--para cada clase en el conjunto de superclases de
--source existe una relación de herencia en el target con
--el mismo nombre
classSource.superclasses ->
forAll (classParent |
target.relationships–>select(oclIsTypeOf(inheritance) ->
exists (rel | (rel.name = classParent.name)))
and …
Especificación de transformaciones
--para cada operación/atributo en source
--existe una rutina/atributo en el target…
classSource.ownedOperation ->
forAll (op |target.abstractions ->
select(oclIsTypeOf(Routine)->
exists(op1| operTransf (op, op1)))
and
classSource.ownedAttribute ->
forAll (at| target.abstractions ->
select(oclIsTypeOf(Attribute))->
exists(at1|attribTransf(at, at1))) )
Especificación de transformaciones
POST:
--para cada asociación en source existe una en
target..
source.ownedMember->
select(oclIsTypeOf(Association) ->
forAll (assoc|
exists(assoc1|assocTransf (assoc, assoc1))

Additional Operations
Especificación de transformaciones
Additional Operations
def:operTransf(O:Package::operation,F:Model::feature): Boolean =
if O.stereotype.name = ´constructor´
then F.name = ´make´ else F.name = O.name endif
and (F.type.conformsTo.O.type)
and O.parameters -> size () <= F.parameters ->size()
and Sequence { 1..(O.parameters ->size())} -> forAll (i:Integer |
F.parameters -> (at(i).name = O.parameters -> at(i).name) and
O.parameters ->at(i).type.conformsTo.(F.parameters->at(i).type))
def:
attribTransf(S:Package::Attribute,T:Model::Attribute):Boolean
def:
assocTransf(S:Package::Association,T:Model::Association):Boolean.
END-TRANSFORMATION

Вам также может понравиться