300 likes | 528 Views
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
E N D
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 J2EE PSM REL PSM 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: • Puentesentre 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 Transformaciones automáticas tool tool PIM PSM ISM
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/OCLModelos MOFMetamodelos (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 PIM “es-instancia-de” Refinamiento PIM-PSM Refinamiento PIM-PIMmetamodelo PSM- PSMmetamodelo Metamodelo PSM PSM “es-instancia-de”
Especificación de transformacionescomo contratos OCL TRANSFORMATION transformationName PARAMETERS<parameterList> PRE: <preconditionList> POST: <postconditionList> Additional Operations def:… def:… END
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