Business Informatics Group Institute of Software Technology and Interactive Systems Vienna University of Technology Favoritenstraße 9-11/188-3, 1040 Vienna,

Slides:



Advertisements
Similar presentations
Eugene Syriani and Huseyin Ergin University of Alabama Software Modeling Lab Software Engineering Group Department of Computer Science College of Engineering.
Advertisements

HORIZONT TWS/WebAdmin TWS/WebAdmin for Distributed
Towards an Expressivity Benchmark for Mappings based on a Systematic Classification of Heterogeneities M. Wimmer, G. Kappel, Angelika Kusel, W. Retschitzegger,
Semantics Static semantics Dynamic semantics attribute grammars
Budapest University of Technology and EconomicsDagstuhl 2004 Department of Measurement and Information Systems 1 Towards Automated Formal Verification.
June 9, 2006 Transforming models with ATL © 2006 ATLAS Nantes Transforming models with ATL The A TLAS Transformation Language Frédéric Jouault ATLAS.
CS 290C: Formal Models for Web Software Lecture 4: Implementing and Verifying Statecharts Specifications Using the Spin Model Checker Instructor: Tevfik.
Higher-Order Transformation Eugene SyrianiandHans Vangheluwe.
Hüseyin Ergin University of Alabama Software Modeling Lab Software Engineering Group Department of Computer Science College of Engineering.
OBJECT ORIENTED PROGRAMMING M Taimoor Khan
McGill University School of Computer Science Ph.D. Candidate in the Modelling, Simulation and Design Lab MPM’09 Explicit Transformation Modelling Thomas.
Train Control Language Teaching Computers Interlocking By: J. Endresen, E. Carlson, T. Moen1, K. J. Alme, Haugen, G. K. Olsen & A. Svendsen Synthesizing.
Chapter 10 Class and Method Design
Business Informatics Group Institute of Software Technology and Interactive Systems Vienna University of Technology Favoritenstraße 9-11/188-3, 1040 Vienna,
Slide 1 Chapter 10 Class and Method Design. Slide 2 REVISITING THE BASIC CHARACTERISTICS OF OBJECT-ORIENTATION.
IBM Software Group © 2005 IBM Corporation University of Nantes Eclipse dayMarch 2005 The Eclipse Modeling Framework and the IBM Model Transformation Framework.
ANHAI DOAN ALON HALEVY ZACHARY IVES Chapter 6: General Schema Manipulation Operators PRINCIPLES OF DATA INTEGRATION.
Chapter 3 Object-Oriented Analysis of Library Management System(LMS)
The POSTGRES Next - Generation Database Management System Michael Stonebraker Greg Kemnitz Presented by: Nirav S. Sheth.
Overview of ATL and ETL (Jouault and Kurtev 2006, ‘Transforming Models with ATL’, Proc. MODELS 2005 Workshops, LNCS, vol. 3844, pp Kolovos et.
Early Testing. 2 1.Introduction 2.Extension of NDT 3.Conclusions Index Table of Contents.
Advanced Applications Of Model-to-Model Transformation © 2008 INRIA Advanced Applications Of Model-to-Model Transformation Hugo Bruneliere & Frédéric.
Behaviour-Preserving Model Transformation Arend Rensink, University of Twente IPA Spring Days, 18 April 2012.
A novel approach to modeling Zvezdan Protić, Tom Verhoeff, Mark van den Brand.
Logic Programming Based Model Transformations An overview of related work.
UML2 Package Merge Usage scenarios and their effect on XMI and Java API interoperability Bran Selic, Jim Amsden, Kenn Hussey Oct, 2003.
Yu SunUniversity of Alabama at Birmingham PAR Works Jeff Gray University of Alabama Montpellier, France July 3rd, 2013 This research is supported.
Business Informatics Group Institute of Software Technology and Interactive Systems Vienna University of Technology Favoritenstraße 9-11/188-3, 1040 Vienna,
AToM 3 : A Tool for Multi- Formalism and Meta-Modelling Juan de Lara (1,2) Hans Vangheluwe (2) (1) ETS Informática Universidad Autónoma de Madrid Madrid,
1 MDWE'2008, Toulouse, France, September 30, 2008 A Comparative Analysis of Transformation Engines for User Interface Development Juan Manuel González.
Object-Oriented Modeling
Copyright 2002 Prentice-Hall, Inc. Modern Systems Analysis and Design Third Edition Jeffrey A. Hoffer Joey F. George Joseph S. Valacich Chapter 20 Object-Oriented.
Alignment of ATL and QVT © 2006 ATLAS Nantes Alignment of ATL and QVT Ivan Kurtev ATLAS group, INRIA & University of Nantes, France
Formalizing the Asynchronous Evolution of Architecture Patterns Workshop on Self-Organizing Software Architectures (SOAR’09) September 14 th 2009 – Cambrige.
Copyright 2002 Prentice-Hall, Inc. Chapter 2 Object-Oriented Analysis and Design Modern Systems Analysis and Design Third Edition Jeffrey A. Hoffer Joey.
University of Paderborn Software Engineering Group Prof. Dr. Wilhelm Schäfer Towards Verified Model Transformations Holger Giese 1, Sabine Glesner 2, Johannes.
Abstract We present two Model Driven Engineering (MDE) tools, namely the Eclipse Modeling Framework (EMF) and Umple. We identify the structure and characteristic.
Chapter 12: Design Phase n 12.1 Design and Abstraction n 12.2 Action-Oriented Design n 12.3 Data Flow Analysis n Data Flow Analysis Example n
UHD::3320::CH121 DESIGN PHASE Chapter 12. UHD::3320::CH122 Design Phase Two Aspects –Actions which operate on data –Data on which actions operate Two.
Hybrid Transformation Modeling Integrating a Declarative with an Imperative Model Transformation Language Pieter Van Gorp
Business Informatics Group Institute of Software Technology and Interactive Systems Vienna University of Technology Favoritenstraße 9-11/188-3, 1040 Vienna,
Matt Arena, Fermilab.  Overview of SPMS  SPMS History & Statistics  Fermilab  Users, Roles & Privileges (Fine-grained Access)  System Parameters.
This material is approved for public release. Distribution is limited by the Software Engineering Institute to attendees. Sponsored by the U.S. Department.
Disciplined Software Engineering Lecture #2 Software Engineering Institute Carnegie Mellon University Pittsburgh, PA Sponsored by the U.S. Department.
Copyright © 1994 Carnegie Mellon University Disciplined Software Engineering - Lecture 1 1 Disciplined Software Engineering Lecture #2 Software Engineering.
Automated Transformation of Statements Within Evolving Domain Specific Languages Peter Bell CEO/CTO, SystemsForge 7th OOPSLA Workshop on Domain-Specific.
E.Bertino, L.Matino Object-Oriented Database Systems 1 Chapter 5. Evolution Seoul National University Department of Computer Engineering OOPSLA Lab.
Chapter 3 Part II Describing Syntax and Semantics.
Copyright © 2006 Addison-Wesley. All rights reserved. Ambiguity in Grammars A grammar is ambiguous if and only if it generates a sentential form that has.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
Learners Support Publications Object Oriented Programming.
1 Model-based Aspect Weaver Construction Suman Roychoudhury Frédéric Jouault Jeff Gray {roychous, jouault, cis.uab.edu This project is supported.
An approach for Framework Construction and Instantiation Using Pattern Languages Rosana Teresinha Vaccare Braga Paulo Cesar Masiero ICMC-USP: Institute.
Slide 13.1 © The McGraw-Hill Companies, 2002 Object-Oriented and Classical Software Engineering Fifth Edition, WCB/McGraw-Hill, 2002 Stephen R. Schach.
® A Proposed UML Profile For EXPRESS David Price Seattle ISO STEP Meeting October 2004.
Testing OO software. State Based Testing State machine: implementation-independent specification (model) of the dynamic behaviour of the system State:
ISP RAS Java Specification Extension for Automated Test Development Igor B. Bourdonov, Alexei V. Demakov, Andrei A. Jarov, Alexander S. Kossatchev, Victor.
Introduction To Model-to-Model Transformation © 2008 INRIA Introduction To Model-to-Model Transformation Hugo Bruneliere & Frédéric Jouault INRIA.
Top-K Generation of Integrated Schemas Based on Directed and Weighted Correspondences by Ahmed Radwan, Lucian Popa, Ioana R. Stanoi, Akmal Younis Presented.
Presentation OLOMOLA,Afolabi( ). Update Changes in CSV/SVN.
Concepts and Realization of a Diagram Editor Generator Based on Hypergraph Transformation Author: Mark Minas Presenter: Song Gu.
® IBM Software Group A Metamodeling Approach to Pattern Specification Maged Elaasar 1,2, Dr. Lionel Briand 1, Dr. Yvan Labiche 1 1 Carleton University,
Chapter – 8 Software Tools.
1© 2007 BIG Vienna University of Technology A Semi-automatic Approach for Bridging DSLs with UML 7th OOPSLA Workshop on Domain-Specific Modeling Montréal.
Model Transformation By Demonstration Yu Sun, Jules White, Jeff Gray This work funded in part by NSF CAREER award CCF CIS Dept. – University of.
On Combining Multi-formalism Knowledge to Select Models for Model Transformation Testing Sagar Sen (1 st year PhD student), Benoit Baudry, Jean-Marie Mottu.
Unified Modeling Language
Dealing with Changes of Time-Aware Processes
Towards Automatic Model Synchronization from Model Transformation
Chapter 20 Object-Oriented Analysis and Design
Presentation transcript:

Business Informatics Group Institute of Software Technology and Interactive Systems Vienna University of Technology Favoritenstraße 9-11/188-3, 1040 Vienna, Austria phone: +43 (1) (secretary), fax: +43 (1) On using In-place Transformations for Model Co-evolution* M. Wimmer, A. Kusel, J. Schönböck, W. Retschitzegger, W. Schwinger, and G. Kappel 2nd International Workshop on Model Transformation with ATL Johannes Schönböck *This work has been partly funded by the Austrian Science Fund (FWF) under grant P21374-N13.

Introduction 2  Metamodel evolution and model co-evolution are essential for the adoption of MDE in practice Approach Motivation Introduction ExampleFuture Work Original Metamodel Original Models conform to Revised Metamodel evolution Co-evolved Models conform to co-evolution How to perform the co-evolution process?

Current Approaches for Co-evolution (1/2) Dedicated Co-evolution languages such as COPE* 3 Original Metamodel Original Models conform to Revised Metamodel Co-evolved Models conform to co-evolution 1 1 User has to learn a new language Approach Motivation Introduction ExampleFuture Work *M. Herrmannsdoerfer, S. Benz, and E. Juergens. COPE - Automating Coupled Evolution of Metamodels and Models. In Proceedings of the 23rd European Conference on Object-Oriented Programming (ECOOP'09), pages Springer-Verlag, 2009.

Current Approaches for Co-evolution (2/2) Employment of M2M transformation languages Original Metamodel Original Models conform to Revised Metamodel Co-evolved Models conform to co-evolution Copying of unchanged elements is necessary Approach Motivation Introduction ExampleFuture Work

 Employment of in-place transformations for co-evolution No new language has to be learned No rules for copy operations are needed  Prerequisite for this approach Allow all models (orginal and co-evolved) to be conformant to one metamodel (merge of original and evolved metamodel)  Proposed Process (work in progress) Approach (1/2) 5 Automatic Metamodel Merge Co-evolution by in-place transformation Automatic check-out transformation Approach Motivation Introduction ExampleFuture Work

Approach (2/2)  Step 1: Automatic Metamodel Merge  Step 2: Co-evolution by in-place transformation Elements get only added but never deleted (done by step 3) Therefore a merge of the original and the co-evolved model arises  Step 3 : Automatic check-out transformation 6 Original MM Evolved MM Original MM  Evolved MM Original Model Original Model  Co-evolved Model Co-evolved Model load check-out merge In-place trafo for co-evolution conforms to Approach Motivation Introduction ExampleFuture Work

Evolution Example 7 NamedElement attributes 0..* isAbstract: Boolean Class name : String Attribute ID_AttributeDesc_Attribute Reference upperMult: Int lowerMult: Int type : String references type 0..* 1..1 opposite extends 0..1 NamedElement attributes 0..* isAbstract: Boolean Class name : String AttributeReference upperMult: Int lowerMult: Int type : String id: Boolean type 1..1 superClass 0..1 Association refEnds2..3 Original Metamodel Evolved Metamodel Modeling of ternary Associations 1 1 Change Attribute Type dynamically Inheritance Feature renamed to superClass to be more platform-independent Approach Motivation Introduction Example Future Work

Step 1 – Automatic Metamodel Merge (first proposal) (1/2)  Classes Are merged, if they exhibit the same name If classes are merged, the merged class gets the union of the features and superclasses of the original classes  Features Are only merged, if they are fully equivalent, i.e., same name, same type, same multiplicity constraints, same unique constraints, … 8 Original MM Evolved MM Original MM  Evolved MM Original Model Original Model  Co-evolved Model Co-evolved Model load check-out merge In-place trafo for co-evolution conforms to Approach Motivation Introduction Example Future Work

Step 1 – Automatic Metamodel Merge (2/2) 9 opposite Original MM  Evolved MM NamedElement attributes 0..* isAbstract: Boolean Class name : String AttributeReference upperMulti: Int lowerMulti: Int type : String id: Boolean type 1..1 superClass 0..1 Association refEnds2..3 ID_AttributeDesc_Attribute extends references 0..*  Result of merge phase for the example Approach Motivation Introduction Example Future Work

Step 2 – Co-evolution by in-place Transformation (1/4)  Usually a co-evolution transformation consists of Create Operations, Update Operations and Delete Operations  The proposed approach needs only create (adding) and update operations, since delete operations are realized during the final check-out transformation, in case of projection  Only selection scenario requires delete operation 10 Original MM Evolved MM Original MM  Evolved MM Original Model Original Model  Co-evolved Model Co-evolved Model load check-out merge In-place trafo for co-evolution conforms to Approach Motivation Introduction Example Future Work

Step 2 – Co-evolution by in-place Transformation (2/4) 11 NamedElement attributes 0..* isAbstract: Boolean Class name : String Attribute ID_AttributeDesc_Attribute Reference upperMult: Int lowerMult: Int type : String references type 0..* 1..1 opposite extends 0..1 NamedElement attributes 0..* isAbstract: Boolean Class name : String AttributeReference upperMult: Int lowerMult: Int type : String id: Boolean type 1..1 superClass 0..1 Association refEnds2..3 Original Metamodel Evolved Metamodel Modeling of ternary Associations 1 1 Change Attribute Type dynamically Inheritance Feature renamed to superClass to be more platform-independent NAC LHS ref1 : Reference ref2 : Reference 1 : opposite Rule 1 assoc1: Association name = x+ “2“ + y 3 : refEnds RHS ref1 : Reference ref2 : Reference 4 : refEnds assoc2 : Association 2 : opposite name = x name = y 2 : opposite1 : opposite ref1 : Reference ref2: Reference 5 : refEnds6 : refEnds Rule 2 LHS cl1 : Class att2 : Attribute name = x type = t id = true 2 : attributes cl1 : Class att1: ID_Attribute RHS 1 : attributes name = x type = t Rule 3 LHS cl1 : Class att2 : Attribute name = x type = t id = false 2 : attributes cl1 : Class att1: Desc_Attribute RHS 1 : attributes name = x type = t Rule 4 LHS superCl : Class subCl: Class 2 : superClass RHS superCl : Class subCl: Class 1 : extends Approach Motivation Introduction Example Future Work

module CoEvolution; create OUT : MM refining IN : MM; --Rule 1 rule GenerateAssociations { from ref1 : MM!Reference, ref2 : MM!Reference (ref1.opposite = ref2) -- missing NAC to dummy : MM!Reference, assoc : MM!Association (refEnds <- Set{ref1,ref2}) } --Rule 2 rule GenerateAttributes { from id_att : MM!ID_Attribute to dummy : MM!ID_Attribute, att : MM!Attribute ( name <- id_att.name, type <- id_att.type, id <- true, class <- id_att.class ) } Step 2 – Co-evolution by in-place Transformation (3/4) ATL Refinement Mode as in-place transformation language 12 Too many Association objects get generated, since no unique lazy rule is allowed in the ATL refinement mode (and no imperative code) Approach Motivation Introduction Example Future Work Old objects must be explicitly kept C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Original Model C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Model after Rule 1 A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Model after Rule 2 A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds I3:Attribute name=‘id‘ type=‘Integer‘ id=true attributes

Step 2 – Co-evolution by in-place Transformation (4/4) ATL Refinement Mode as in-place transformation language 13 --Rule 3 rule GenerateAttributes { from id_att : MM!Desc_Attribute to dummy : MM!Desc_Attribute, att : MM!Attribute ( name <- id_att.name, type <- id_att.type, id <- false, class <- id_att.class ) } --Rule 4 rule setSuperClassRefs { from c1 : MM!Class to c2 : MM!Class ( superClass <- c1.extends ) } Old objects must be explicitly kept Approach Motivation Introduction Example Future Work C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Model after Rule 3 A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds I3:Attribute name=‘id‘ type=‘Integer‘ id=true attributes I4:Attribute name=‘name‘ type=‘String‘ id=false attributes C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Model after Rule 4 A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds I3:Attribute name=‘id‘ type=‘Integer‘ id=true attributes I4:Attribute name=‘name‘ type=‘String‘ id=false attributes superClass

Step 3 – Automatic Check-out Transformation  Is responsible for pruning the elements that no longer covered by the evolved metamodel, i.e., out-dated model elements 14 Original MM Evolved MM Original MM  Evolved MM Original Model Original Model  Co-evolved Model Co-evolved Model load check-out merge In-place trafo for co-evolution conforms to Original MM Check-out load Original Model Elements Original MM  Evolved MM Evolved MM Added Elements stemming from the Evolution In-place Trafo for co-evolution Approach Motivation Introduction Example Future Work C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references Model after check-out transformation A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds I3:Attribute name=‘id‘ type=‘Integer‘ id=true attributes I4:Attribute name=‘name‘ type=‘String‘ id=false attributes superClass

 Merge algorithm can be implemented by using an ATL M2M transformation  Based on the Ecore meta-metamodel  Automatically generated  In-place transformation rules  Restrictions of ATL refinement mode prohibits specification of co- evolution rules  No queryable execution state, no type change, no imperative code  Verification of approach using AGG graph transformation language  Check-out transformation can be implemented using a Higher-Order transformation  Generates matched rules for classes of the evolved model  Feature assignments for corresponding features Lessons Learned of Example 15 Co-evolution rules in AGG Approach Motivation Introduction Example Future Work

 Investigate on improving ATL Refinement Mode  Improvement of Merging Algorithm  EMF Compare to find renames (and automatic derivation of copy operation)  Generate skeleton transformations by tracking and analyzing the metamodel edit operations  Application of the approach to more complex evolution scenarios  Case studies with students of MDE course 16 Approach Motivation Introduction Example Future Work

Thank you for your attention! 17

Backup 18

19 C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Original Model

20 C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Model after Rule 1 A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds

21 C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Model after Rule 2 A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds I3:Attribute name=‘id‘ type=‘Integer‘ id=true attributes

22 C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Model after Rule 3 A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds I3:Attribute name=‘id‘ type=‘Integer‘ id=true attributes I4:Attribute name=‘name‘ type=‘String‘ id=false attributes

23 C1:Class name=‘Person‘ isAbstract = true C2:Class name=‘Man‘ isAbstract=false C3:Class name=‘Woman‘ isAbstract=false extends R1:Reference name=‘wife‘ upperMulti=1 lowerMulti=0 R2:Reference name=‘husband‘ upperMulti=1 lowerMulti=0 opposite references type I1:ID_Attribute name=‘id‘ type=‘Integer‘ I2:Desc_Attribute name=‘name‘ type=‘String‘ attributes Model after Rule 4 A1:Association name=‘wife_husband‘ A2:Association name=‘husband_wife‘ refEnds I3:Attribute name=‘id‘ type=‘Integer‘ id=true attributes I4:Attribute name=‘name‘ type=‘String‘ id=false attributes superClass