code generation with mda and xuml

56
Welcome A Practical Guide to Code Generation using Model Driven Architecture and Executable UML 25 Jun 2008 Chris Raistrick, Kennedy Carter [email protected] KC.COM

Upload: chris-raistrick

Post on 06-May-2015

1.288 views

Category:

Technology


1 download

DESCRIPTION

Provides an overview of how to generate high quality code from Executable UML models.

TRANSCRIPT

Page 1: Code Generation with MDA and xUML

WelcomeA Practical Guide to Code Generationusing Model Driven Architecture and Executable UML

25 Jun 2008 Chris Raistrick, Kennedy Carter [email protected]

KC.COM

Page 2: Code Generation with MDA and xUML

K E N N E D Y C A R T E R2

Agenda

Evolution or (Industrial) Revolution?Platform Independent ProgrammingThe M Word and Code GenerationOptimised ArchitecturesComplex ArchitecturesPortable ArchitecturesReuse of MappingsSummary

Page 3: Code Generation with MDA and xUML

Adopting MDA

K E N N E D Y C A R T E R

The information contained in this document is the property of Kennedy Carter Limited.No part of it may be reproduced or used except by written permission.

The copyright and foregoing restrictions on reproduction and use extend to all the media in which the information may be embodied.

www.kc.com

Evolution or(Industrial) Revolution?

Page 4: Code Generation with MDA and xUML

K E N N E D Y C A R T E R4

The Industrial Revolution

Before 1800

• Hand crafting by skilled practitioners

• Idiosyncratic design strategies• Every item different• Premium is on the practitioner

After 1800

• Automated production lines• Consistent design strategies• Every item identical• Premium is on the process

Page 5: Code Generation with MDA and xUML

K E N N E D Y C A R T E R5

Elaboration Based Process

manually build a Platform Specific

Model…

PSM

(UML)

manually code a Platform Specific Implementation

PSI

(Ada/C++)

The deliverables are up to 300%

redundant…… and

maintenance costs are

correspondingly high

Requirements(Text /

Use Cases)

manually build a Platform

Independent Model…

PIM

(UML)

This must be changed…or become obsolete

This must be changed…or become obsolete

This must be changed

When this changes

Processdefinition

Designpolicies

Imp’nrules

Page 6: Code Generation with MDA and xUML

K E N N E D Y C A R T E R6

Elaboration vs. Translation

PSM

(UML)

Processdefinition

Designpolicies

Codingrules

manually build a Platform Specific

Model…

manually code a Platform Specific Implementation

PSI

(Ada/C++)

manually build a Platform

Independent Model…

PIM

(UML)

PSI

(Ada/C/C++)

automatically generate a

Platform Specific Implementation using PIM-PSI

mappings

PIM-PSIMappings

(xUML)

manually specify mappings onto the

platform…

manually build a Platform

Independent Model…

PIM

(xUML)

Requirement Change impact

Technology Change impact

Elaborate Translate

Page 7: Code Generation with MDA and xUML

K E N N E D Y C A R T E R7

Translation Based Process

PSI

(Ada/C/C++)

automatically generate a

Platform Specific Implementation using PIM-PSI

mappings

PIM-PSIMappings

(xUML)

manually specify mappings onto the

platform…

manually build a Platform

Independent Model…

PIM

(xUML)

TranslateThe knowledge in the heads of developers is:

- Formalized

- Accessible

- Reusable

- Refinable

Processdefinition

Designpolicies

Codingrules

Page 8: Code Generation with MDA and xUML

K E N N E D Y C A R T E R8

Processdefinition

Designpolicies

Codingrules

Formalized Application and Software Design Expertise

PSI

(Code)

PIM-PSIMappings

(xUML)

automatically generate a

Platform Specific Implementation using PIM-PSI

mappings

manually specify mappings onto the

platform…

manually build a Platform

Independent Model…

PIM

(xUML)

Rules and policies for organising

aircraftRules and

policies for organising software

Page 9: Code Generation with MDA and xUML

Adopting MDA

K E N N E D Y C A R T E R

The information contained in this document is the property of Kennedy Carter Limited.No part of it may be reproduced or used except by written permission.

The copyright and foregoing restrictions on reproduction and use extend to all the media in which the information may be embodied.

www.kc.com

Platform Independent Modelling

Page 10: Code Generation with MDA and xUML

K E N N E D Y C A R T E R10

Platform Independent Modelling

xUML Model(PIM)

Platform-SpecificConfiguration

System Model

Populate

xUML-CodeMappings

iCCGCode Generator

Code Generator

Generate

GeneratedCode

xUML RuntimeLayer

Generated System

AdaptationLayer

A typical code generation process consists of:Build and test a system model, using a precise modelling formalismBuild a code generatorPopulate the code generator with the system model, and generate the system

Page 11: Code Generation with MDA and xUML

K E N N E D Y C A R T E R11

DomainsClasses

Operations

States

The xUML Model Structure

xUML Model(PIM)

Platform-SpecificConfiguration

System Model

Page 12: Code Generation with MDA and xUML

K E N N E D Y C A R T E R12

Isn’t xUML with ASL Just Coding in Another Language?

Yes…but…

…as xUML “programmers”, we do not need to clutter our minds or our models with:

Code distribution decisions, with consequential additional components such as inter-node communication skeletons and stubsData distribution and replication, with consequential additional components to manage the distributed collectionData structure decisions, with consequential code to access the structuresShared resource locking

…and we can easily change our minds about:Static or dynamic memory managementThreading strategyData persistenceTarget language

…without changing the xUML model

Page 13: Code Generation with MDA and xUML

Adopting MDA

K E N N E D Y C A R T E R

The information contained in this document is the property of Kennedy Carter Limited.No part of it may be reproduced or used except by written permission.

The copyright and foregoing restrictions on reproduction and use extend to all the media in which the information may be embodied.

www.kc.com

Metamodel Based Code Generation

Page 14: Code Generation with MDA and xUML

K E N N E D Y C A R T E R14

The Code Generator: Domains

(Part of) Code Generator Domain Chart

Populate Generate

xUML Model(PIM)

Platform-SpecificConfiguration

System Model Code Generator

GeneratedCode

xUML RuntimeLayer

Generated System

AdaptationLayer

xUML-CodeMappings

iCCGCode

Generator

The code generator itself is a set of domain models expressed using

xUML.

The domains represent the various components of an xUML system.

Page 15: Code Generation with MDA and xUML

K E N N E D Y C A R T E R15

(Part of) Configurable Code Generator

Domain Chart

The Code Generator: Classes and Methods

iCCGCode

Generator

Code Generator

xUML-CodeMappings

(Part of)Executable UML

Class Model

the classes in each domain represent the elements that make up those components.

Method to Generate Java

Method to Generate Ada

Method to Generate C++

Method to Generate C…$FORMAT header_filetypedef struct C[I:this.class_ID]_struct { /* "[T:this.class_name]" Class Header */ struct s_object *next_instance;$ENDFORMAT…

Each element contains operations which specify how to map that xUML element onto a specific

target language.

Page 16: Code Generation with MDA and xUML

K E N N E D Y C A R T E R16

Platform Independent Model : Class Diagram

Build a PIM

The domain experts build PIMs using xUML, such as this one:

Populate Generate

xUML Model(PIM)

Platform-SpecificConfiguration

System Model

xUML-CodeMappings

iCCGCode

Generator

Code Generator

GeneratedCode

xUML RuntimeLayer

Generated System

AdaptationLayer

Page 17: Code Generation with MDA and xUML

K E N N E D Y C A R T E R17

Domain Instance

Class Instances

Attribute Instances

Instantiate the Formalism Metamodel

Populated Executable

UMLClass Model

Populate

xUML Model(PIM)

Platform-SpecificConfiguration

System Model

xUML-CodeMappings

iCCGCode

Generator

Code Generator

When the Executable

UML domain is populated with

the PIM components, we see these instances…

Page 18: Code Generation with MDA and xUML

K E N N E D Y C A R T E R18

The Metamodels Embody the Code Generation Rules

Domain.generateCode

Class.generateCode

Attribute.generateCode

The task of translation involves iterating

through these instances and

generating suitable code from them.

iCCGCode

Generator

Code Generator

xUML-CodeMappings

Page 19: Code Generation with MDA and xUML

K E N N E D Y C A R T E R19

Platform Independent Model : Class Diagram

Generated C Code

Generate

Generate the Code

Generate

xUML-CodeMappings

iCCGCode

Generator

Code Generator

GeneratedCode

xUML RuntimeLayer

Generated System

AdaptationLayer

Page 20: Code Generation with MDA and xUML

K E N N E D Y C A R T E R20

polymorphic operation with different

polymorphic methods to generate code for each different ASL

statement

We have illustrated generation of data structures from the class model. The

process of generating code from the action

language is the same, and based upon populating and

translating instances in the “Action Language”

domain…

Generating Code from Action Language

Note that the “generateCode” operation of the “ASL Statement” class is polymorphic, allowing

us to implement rival versions of this method for each type of ASL statement, represented as the

subclasses “Create Statement”, “Delete Statement” and so on

Page 21: Code Generation with MDA and xUML

K E N N E D Y C A R T E R21

Generate the Code Generator

Project Code

Generator

Code

Generator

PIM

(part of) xUML Metamodel

Domain

Class

Attribute

xUML Metamodels xUML to Code Mappings in ASL

Pre-Existing

Code Generator

Project Domain Models

Project Code

Page 22: Code Generation with MDA and xUML

K E N N E D Y C A R T E R22

Code Generation Overview

Populate Generate

xUML Model(PIM)

Platform-SpecificConfiguration

System Model

xUML-CodeMappings

iCCGCode Generator

Code Generator

GeneratedCode

xUML RuntimeLayer

Generated System

AdaptationLayer

PLATFORM SPECIFIC CONFIGURATION FILE

PROCESS "Process One" ONE 1 127.0.0.1 1000 1600PROCESS "Process Two" TWO 1 127.0.0.1 1001 1601

CLASS-PROCESS WM TGT ONECLASS-PROCESS WM WPN TWO

(part of) xUML Metamodel

Domain

Class

Attribute

owning_domain = this -> R2

$FORMAT header_filetypedef struct D[I:owning_domain.domain_ID]_C[I:this.class_ID]_struct { /* "[T:this.class_name]" Class Header */ struct s_object *next_instance; /* Linked list of */ struct s_object *prev_instance; /* object instances */ struct s_object *rel_ptr; /* list of rel'ns */ struct s_object *cpr_ptr; /* list of cp rel'ns */$ENDFORMAT

{attributes_in_class} = this -> R3for the_attribute in {attributes_in_class} do [] = ATT1:generateCode [header_file] on the_attributeendfor

$FORMAT header_file};

$ENDFORMAT

Multi-node multi-process runtime

Windows Vista adaptation layer

Page 23: Code Generation with MDA and xUML

Adopting MDA

K E N N E D Y C A R T E R

The information contained in this document is the property of Kennedy Carter Limited.No part of it may be reproduced or used except by written permission.

The copyright and foregoing restrictions on reproduction and use extend to all the media in which the information may be embodied.

www.kc.com

Optimisation

Page 24: Code Generation with MDA and xUML

K E N N E D Y C A R T E R24

Structured or Object-Oriented?

addinjectiondemand

getinjection

time

removeinjectiondemand

injectiondemand

addinjectiondemand

getinjection

time

removeinjectiondemand

injectiondemand

create get time deleteget volume

Encapsulated data structure containing dynamically

allocated injection demand records

Application code modules

Consider these two designs…

Global data structure containing a static array of injection

demand records

Page 25: Code Generation with MDA and xUML

K E N N E D Y C A R T E R25

How do they compare?

The non Object-Oriented Scheme (left):Requires application module recoding if the data structure needs to changeIs faster because:

No dynamic memory managementNo access module calls

Is smaller because:No access module code

addinjectiondemand

getinjection

time

removeinjectiondemand

injectiondemand

addinjectiondemand

getinjection

time

removeinjectiondemand

injectiondemand

create get time deleteget volume

Application code modules

Encapsulated data structure containing dynamically

allocated injection demand records

Global data structure containing a static array of injection

demand records

Page 26: Code Generation with MDA and xUML

K E N N E D Y C A R T E R26

With automatic code generation?

The non Object-Oriented Scheme (left):Requires application module recoding if the data structure needs to changeIs faster because:

No dynamic memory managementNo access module calls

Is smaller because:No access module code

addinjectiondemand

getinjection

time

removeinjectiondemand

injectiondemand

addinjectiondemand

getinjection

time

removeinjectiondemand

injectiondemand

create get time deleteget volume

Application code modules

Encapsulated data structure containing dynamically

allocated injection demand records

Global data structure containing a static array of injection

demand records

Page 27: Code Generation with MDA and xUML

K E N N E D Y C A R T E R27

Avoiding Memory Management

Attributes of a class can be realized as fixed-length arrays, with a flag for each index to indicate whether that instance exists...

Customer

custIdcustNamecustAddress

The maximum number of objects in each class must be available at code generation time and may bedetermined automatically (static populations only),specified using a Max_Number_of_Instances tag.

Read-only attributes can be declared const and may be located in ROM.

An object handle is implemented as a simple array index……which will use less space than a pointer

custId array

custName array

custAddress array

Page 28: Code Generation with MDA and xUML

K E N N E D Y C A R T E R28

Optimized Instance Handles

The first element is a status indicator: 0

means “undefined”, 1

means “defined”.

Customer

custIdcustNamecustAddress

The second element (which is defined only if the first element is 1) is an index into the attribute arrays of the object it references, i.e. an object “pointer”.

An instance handle can be realised as a 2-element array of

integers.

Instance attributes can be realised as fixed-length arrays, with a flag for each index to indicate whether that instance exists

Page 29: Code Generation with MDA and xUML

K E N N E D Y C A R T E R29

Optimized Associations

accountIddateOpenedbalanceownerIdstatus

Account

owns

is owned by

1..*

0..1

R1

Customer

custIdcustNamecustAddress

note that creating and deleting objects and

links does not involve any dynamic memory

management…

…even though there are ‘create’ and ‘delete’

statements in the PIM

A binary association is implemented as two 2-

dimensional arrays. Each array implements the association in

one direction only.

CustomerEnd

AccountEnd

Customer 0 owns Account 2

Account 6 is owned by Customer 2

Page 30: Code Generation with MDA and xUML

Adopting MDA

K E N N E D Y C A R T E R

The information contained in this document is the property of Kennedy Carter Limited.No part of it may be reproduced or used except by written permission.

The copyright and foregoing restrictions on reproduction and use extend to all the media in which the information may be embodied.

www.kc.com

Generating Complex Architectures

Page 31: Code Generation with MDA and xUML

K E N N E D Y C A R T E R31

Formalism vs. Architecture Centric Metamodels

UMLMetamodel

UMLMetamodel

PIMPIM

Instantiate

DefineMapping

ApplyMapping

PSIMetamodel

PSIMetamodel

PSIPSI

So far, we have looked at a code generation approach based upon formalism centric metamodels. These work well for targets in which:

There is a single task;

The code is homogeneous:

Uniform memory management strategy;

All calls are local;

All signals are either synchronous or asynchronous

Formalism Centric

UMLMetamodel

UMLMetamodel

PIMPIM

Instantiate

PSMMetamodel

PSMMetamodel

DefineMapping

PSMPSMApplyMapping

PSIMetamodel

PSIMetamodel

DefineMapping

PSIPSIApplyMapping

More sophisticated architectures require a more sophisticated approach……based upon building architecture centric metamodels

Architecture Centric

Page 32: Code Generation with MDA and xUML

K E N N E D Y C A R T E R32

Formalism Centric Metamodels

In formalism centric metamodels, the

“generateCode” method iterates over the contents of

the xUML (i.e. formalism) meta-models….

{allDomains} = find-all Domainfor theDomain in {allDomains} do {allClasses} = theDomain -> R2.Class for theClass in {allClasses} do [] = generateCode [] on theClass endforendfor

UMLMetamodel

UMLMetamodel

PIMPIM

Instantiate

DefineMapping

ApplyMapping

PSIMetamodel

PSIMetamodel

PSIPSI

Page 33: Code Generation with MDA and xUML

K E N N E D Y C A R T E R33

Architecture Centric Metamodels

{allNodes} = find-all Nodefor theNode in {allNodes} do {allProcesses} = theNode -> R2.Process for theProcess in {allProcesses} do [] = generateCode [] on theProcess endforendfor

UMLMetamodel

UMLMetamodel

PIMPIM

Instantiate

PSMMetamodel

PSMMetamodel

DefineMapping

PSMPSMApplyMapping

PSIMetamodel

PSIMetamodel

DefineMapping

PSIPSIApplyMapping

In architecture centric metamodels, the

“generateCode” method iterates over the contents of the PSM (i.e. architecture)

meta-models….

Page 34: Code Generation with MDA and xUML

K E N N E D Y C A R T E R34

The Platform Metamodel

The Platform (meta)model is added to the standard set of metamodels……and provides some key benefits:

xUML model of Abstract Platform Architecture provides a clear basis for understanding the system designEach pass (Population and Code Generation) becomes simpler and therefore easier to test and debug

Page 35: Code Generation with MDA and xUML

K E N N E D Y C A R T E R35

Two Stage Transformation

When a platform model is used, model compilation takes place in two stages:

Action Language

xUML Formalism

MDA Process

Build Sets

Platform

Code

The first stage takes the instances in the meta-models (the user PIM) and creates instances in the platform model(s)The second stage takes the instances in the platform model(s) and creates codeIn principle, other UML notations (component and deployment diagrams) could be used to visualise the instances in the platform model

Page 36: Code Generation with MDA and xUML

K E N N E D Y C A R T E R36

Platform Domain

The platform domain models the distribution of code and data across multiple processes.

Data DistributionCode Distribution

This metamodel holds the PIM-PSM mappings

Page 37: Code Generation with MDA and xUML

K E N N E D Y C A R T E R37

Code and Data Distribution: Consequences

Code Distribution across processes gives rise to the

need for inter-process signals and operation calls,

and optimisation of inter-process communications

Data DistributionCode Distribution

Data Distribution across processes gives rise to the need for data protection, to guard against multiple concurrent accesses

Page 38: Code Generation with MDA and xUML

K E N N E D Y C A R T E R38

Distributing PIM Code: Inter-Process Operation Calls

Remote procedures are implemented using the classic client-server model.Stubs and skeletons are automatically generated.

Client Process Server Process

A BA calls remote B

B Stub B Skeleton

Communication Middleware

2. B Stub packsInput parameters and

calls IPC send

5. B Skeleton packsoutput parameters andcalls IPC send

6. B Stub unpacksoutput parameters

3. B Skeletonunpacks input parameters

1. A calls B stub with inputparameters : later, B stub returns

output parameters

4. B Skeleton calls B withinput parameters, B returnsoutput parameters

Page 39: Code Generation with MDA and xUML

K E N N E D Y C A R T E R39

Distributing PIM Data: Automatic Object Locking

The code generator can augment the generated code

with calls to obtain and release read and write locks

this.latitude = newLat

this.longitude = newLong

Target

latitudelongitude

Weapon

statusR1

myTarget = this -> R1.TargettargetLat = myTarget.latitudetargetLong = myTarget.longitude

xUML Runtime Model

Automatically generatedcalls to xUML runtimeobtain

write semaphore (Target) hererelease write semaphore (Target) here

obtain read

semaphore (Target)

hererelease read

semaphore (Target)

here

Page 40: Code Generation with MDA and xUML

K E N N E D Y C A R T E R40

Complexity Simplified

Even when the system architecture is complex, the model can be kept relatively simple by omission of rules and policies governing:

Memory management

Code and data optimization strategies

Process and data distribution

Shared resource protection

All of which can be automatically incorporated into the target system by the code generator.

Page 41: Code Generation with MDA and xUML

K E N N E D Y C A R T E R41

xUML centric Architecture centric

xUML Centric vs. Architecture Centric

Code generators can be:

formalism-centric, iterating over the UML metamodel

architecture-centric, iterating over the execution platform metamodel

{allDomains} = find-all Domainfor theDomain in {allDomains} do {allClasses} = theDomain -> R2.Class for theClass in {allClasses} do [] = generateCode [] on theClass endforendfor

{allNodes} = find-all Nodefor theNode in {allNodes} do {allProcesses} = theNode -> R2.Process for theProcess in {allProcesses} do [] = generateCode [] on theProcess endforendfor

Page 42: Code Generation with MDA and xUML

Adopting MDA

K E N N E D Y C A R T E R

The information contained in this document is the property of Kennedy Carter Limited.No part of it may be reproduced or used except by written permission.

The copyright and foregoing restrictions on reproduction and use extend to all the media in which the information may be embodied.

www.kc.com

Portable Architectures

Page 43: Code Generation with MDA and xUML

K E N N E D Y C A R T E R43

Adaptation Layer on the Domain Model

The runtime layer uses operating system and middleware resources to distribute xUML models across multiple threads in multiple processes.The runtime accesses these resources via a low-level, platform-independent interface, to enable it to support as wide a range of operating systems and middleware products as possible.A platform-specific implementation of this interface must be developed for each operating system and middleware product that the runtime is required to support.platform-

specific implementati

on

platform-independent

interface

GeneratedCode

xUML RuntimeLayer

Generated System

AdaptationLayer

Page 44: Code Generation with MDA and xUML

K E N N E D Y C A R T E R44

Generated System

Runtime Metamodel

This metamodel holds the PSM-PSI mappings

GeneratedCode

xUML RuntimeLayer

AdaptationLayer

Page 45: Code Generation with MDA and xUML

K E N N E D Y C A R T E R45

Adaptation Layer Interfaces

Run Time

Specific Adaption Layer

The adaptation layer is implemented using inheritance.An “adaptation” is an implementation of a set of derived classes.

GeneratedCode

xUML RuntimeLayer

Generated System

AdaptationLayer

Page 46: Code Generation with MDA and xUML

Adopting MDA

K E N N E D Y C A R T E R

The information contained in this document is the property of Kennedy Carter Limited.No part of it may be reproduced or used except by written permission.

The copyright and foregoing restrictions on reproduction and use extend to all the media in which the information may be embodied.

www.kc.com

Reuse of Mappings

Page 47: Code Generation with MDA and xUML

K E N N E D Y C A R T E R47

MDA Limits the Impact of Business Rule and Technology Changes

UMLMetamodel

UMLMetamodel

Platform & implementation environmentPlatform & implementation environmentchanges impact only herechanges impact only here

PIMPIM

Instantiate

Business rule & requirementBusiness rule & requirementchanges impact only herechanges impact only here

Manual or Automated

PSMMetamodel

PSMMetamodel

DefineMapping

PSMPSMApplyMapping

PSIMetamodel

PSIMetamodel

DefineMapping

PSIPSIApplyMapping

Page 48: Code Generation with MDA and xUML

K E N N E D Y C A R T E R48

Reusable Mappings Are Defined at the Metamodel Level

(part of)UML Metamodel

Class

Attribute

Signal

PSMMetamodel

PSMMetamodel

PSIMetamodel

PSIMetamodel

DefineMappingxUML

Metamodel

xUMLMetamodel

DefineMapping

(part of)PSM Metamodel(object-based)

Class

PrivateDatum

PublicMethod

(part of) Ada 83 Metamodel

Package

BodyVariable

SpecSubprogram

PSMMetamodel

PSMMetamodel

PSIMetamodel

PSIMetamodel

DefineMapping

PSIPSIPSMPSMPIMPIM

Instantiate

PIMMetamodel

PIMMetamodel

ApplyMapping

DefineMapping

ApplyMapping

Page 49: Code Generation with MDA and xUML

K E N N E D Y C A R T E R49

Reusable Mappings Are Defined at the Metamodel Level

(part of)UML Metamodel

Class

Attribute

Signal

PSMMetamodel

PSMMetamodel

PSIMetamodel

PSIMetamodel

DefineMappingxUML

Metamodel

xUMLMetamodel

DefineMapping

(part of)PSM Metamodel(object-based)

Class

PrivateDatum

PublicMethod

(part of) Java Metamodel

Class

Attribute

Operation

PSMMetamodel

PSMMetamodel

PSIMetamodel

PSIMetamodel

DefineMapping

PSIPSIPSMPSMPIMPIM

Instantiate

PIMMetamodel

PIMMetamodel

ApplyMapping

DefineMapping

ApplyMapping

Page 50: Code Generation with MDA and xUML

K E N N E D Y C A R T E R50

The Code Structure Domain

The code generator can be further augmented with a “Code Structure” domain, which embodies the detailed language structure and syntax…

…allowing the Platform Model to be reused with different language-specific code structure domains

Page 51: Code Generation with MDA and xUML

K E N N E D Y C A R T E R51

The Code Structure Domain

The code generator can be further augmented with a “Code Structure” domain, which embodies the detailed language structure and syntax…

…allowing the Platform Model to be reused with different language-specific code structure domains

Page 52: Code Generation with MDA and xUML

K E N N E D Y C A R T E R52

The Code Structure Domain

Page 53: Code Generation with MDA and xUML

Adopting MDA

K E N N E D Y C A R T E R

The information contained in this document is the property of Kennedy Carter Limited.No part of it may be reproduced or used except by written permission.

The copyright and foregoing restrictions on reproduction and use extend to all the media in which the information may be embodied.

www.kc.com

Summary

Page 54: Code Generation with MDA and xUML

K E N N E D Y C A R T E R54

Summary

The subject matter of “design” is now seen as just another subject matter for analysis……because the design and implementation rules are specified using UML

The Platform-Specific Implementation can be optimized without sacrificing maintainability and reuse ……because only the PIMs are maintained and reused.

Page 55: Code Generation with MDA and xUML

K E N N E D Y C A R T E R55

Maintainability vs. Executability

PSM

(UML)

manually build a Platform Specific

Model…

manually code a Platform Specific Implementation

PSI

(Code)

manually build a Platform

Independent Model…

PIM

(UML)

Elaborate

Compromise between

maintainability and

executability

In classic approaches, the PSI (code) must be built to be maintainable, typically by incorporating layering and encapsulation……which have a detrimental effect on speed and size of the executing system

PSI

(Code)

automatically generate a

Platform Specific Implementation using PIM-PSI

mappings

manually build a Platform

Independent Model…

PIM

(xUML)

Translate

Built for executability

Built for maintainabilit

y

In translation-based approaches, the maintained entity (the PIM) is built for maintainability with

layering and encapsulation…

…while the executable entity (the PSI) is optimized for

execution efficiency

Page 56: Code Generation with MDA and xUML

The EndA Practical Guide to Code Generationusing Model Driven Architecture and Executable UML

25 Jun 2008 Chris Raistrick, Kennedy Carter [email protected]

KC.COM