Upload
phunganh
View
242
Download
0
Embed Size (px)
Citation preview
Microsoft liebt UML
Interaktion von Enterprise Architekt mitMicrosoft ApplikationenMicrosoft Applikationen
Dr. Horst KarglSparxSystems Software GmbH, Ferrogasse 80/3, 1180 Wien, Österreich,
Tel: +43 (0)662 90 600 2041 Fax: +43 (0)662 90 333 3041Tel: +43 (0)662 90 600 2041, Fax: +43 (0)662 90 333 3041
Vorstellungsrunde
NameName
Position/Funktion/Aufgaben
Erfahrungen mit SW-EntwicklungErfahrungen mit SW Entwicklung, Objektorientierter Analyse/Design
UML- bzw. Enterprise Architect-KenntnisseU b e p se c ec e sse
Erwartungen
Agenda
Enterprise Architect
Aufbau von Enterprise Architect
M d lli UML 2 1++ it E t i A hit t
10:30
Modellieren von UML 2.1++ mit Enterprise Architect
Diskussion
Pause
G i C d it E t i A hit t
11:15
11 30 Generieren von Code mit Enterprise Architect
Enterprise Architect Code Generierung Features
Integration von Enterprise Architect mit Visual Studio
11:30
Diskussion
Mittagspause
Teamarbeit mit Enterprise Architect
12:30
13:30
EA im Team Nützen
Enterprise Architect + Team Foundation Server
Diskussion
Pause
Enterprise Architekt als Modellierungsplattform
Erweitern von UML 2.1 (erstellen einer DSL)
14:30
14:45
Forward und Reverse Engineering einer DSL
Diskussion
Enterprise Architect Überblick
Projekt-Vorgehen
UML 2.1
Enterprise Architect 7
Analyse Design Implementierung Testen Rollout
XMIEclipseMS Visual Studio .NetVisio
Business-Process-Diagram
UML-Diagramme
Reverse-Engineering
TestenVorfalls-verfolgung
Rollout-Dokumentation
Requirements ManagementDOORS XMI
Requirements Management
Projekt Management
EA unterstützt UML 2.1
cd UML 2.0 Diagrammfamilie
«Diagrammfamilie»
Diagramm
«Diagrammfamilie»
Strukturdiagramm
«Diagrammfamilie»
Verhaltensdiagramm
Objektdiagramm«überarbeitet»
AktivitätsdiagrammUse Case Diagram
«überarbeitet»
Klassendiagramm
«neues Diagramm»
Komponentendiagramm Verte ilungsdiagramm «überarbeitet»
Zustandsdiagramm
«Diagrammfamilie»
Interaktionsdiagramm
«neues Diagramm»
KompositionsstrukturdiagrammPaketdiagramm
«überarbeitet» «neues Diagramm»überarbeitet
Sequenzdiagramm
Kommunikationsdiagramm«neues Diagramm»
neues Diagramm
Timing Diagram
gInteraktionsübersichtsdiagramm
EA unterstützt weitere Diagramme
«control»
Order ScreenEriksson-Penker Extensions
Order Screen
Order Details
Ship Details
OrderTotal
View BasketBack
Cancel
SubmitOrder
«column» date: Date FK lineItemID: Integer*PK orderID: Integer FK orderStatusID: Integer deliveryInstructions: String orderNumber: String
StockItem
«column» Author: string*PK stockItemID: Integer catalogNumber: string costPrice: number listPrice: number title: string
«PK»PK St kIt (I t )
…
Account
«column»*PK accountID: Integer bil l ingAddress: String FK orderID: IntegerFK shoppingBasketID: Integer
LineItem
«column»*PK lineItemID: Integer
q antit Integer
«FK»+ FK_Order_LineItem(Integer)+ FK_Order_OrderStatus(Integer)
«PK»+ PK_Order(Integer)
+ PK_StockItem(Integer)
Transaction
«column»
+FK_Order_LineItem
(lineItemID = lineItemID)
+PK_LineItem+FK_LineItem_StockItem
(stockItemID = stockItemID)
+PK_StockItem
+FK_Account_Order
(orderID = orderID)
+PK_Order
Userinterface
REQ019 - Manage Inventory
REQ022 -Order Books
REQ023 -Store and Manage Books
REQ021 - List Stock Levels
FK shoppingBasketID: Integer closed: Boolean deliveryAddress: String emailAddress: String name: String
«FK»+ FK_Account_Order(Integer)+ FK_Account_ShoppingBasket(Integer)
«PK»+ PK_Account(Integer)
quantity: Integer FK stockItemID: Integer
«FK»+ FK_LineItem_StockItem(Integer)
«PK»+ PK_LineItem(Integer)
FK accountID: Integer date: Date FK lineItemID: Integer*PK transactionID: Integer orderNumber: String
«FK»+ FK_Transaction_Account(Integer)+ FK_Transaction_LineItem(Integer)
«PK»+ PK_Transaction(Integer)
+FK_Transaction_LineItem
(lineItemID = lineItemID)
+FK_Transaction_Account
(accountID = accountID)
+PK_Account
+PK_LineItem
+FK_Account_ShoppingBasket
REQ020 -Receive Books
REQ027 - Add Books
ShoppingBasket
«column» FK lineItemID: Integer*PK shoppingBasketID: Integer shoppingBasketNumber: String
«FK»+ FK ShoppingBasket LineItem(Integer)
+PK_LineItem
+FK_ShoppingBasket_LineItem
(lineItemID = lineItemID)
(shoppingBasketID = shoppingBasketID)
+PK_ShoppingBasket Modellieren von Requirements FK_ShoppingBasket_LineItem(Integer)
«PK»+ PK_ShoppingBasket(Integer)
Daten Modellierung (Relationenmodell)
EA Erweiterung durch Technologien
state01
+ do / aDoBehavior// do behaviors
Initial
SubStateMachine01
Initial
Substate01
Use RTUML->Options-->LanguageOptions "G d C t t " i bl t dif th
[att3 ==0]
Bankomat
DomainModels
Use CaseDiagram
// do behaviors+ entry / aEntryBehavior
// entry behaviors+ exit / anExitBehavior
// exit behaviors
Substate02 Substate03
The Effects and guard conditions of transitions through pseudo states ( fork / join / junction etc ) are cummulative
"Guard Concatenator" variable to modify the target languages' operator
[att2 ==false]
[att2 ==true]
[att1 == true/att1 = false[att1.var1 == true]/att1.var1 = false;
Bankomat
Dynamic Views
Requirements
[att3= 1][att3== 1]
[att3= 1][att3== 1]
ActivityDiagram
Mind MapSubstate04Substate04
History
"History" is child of SubStateMachine01
Ensure that the History States are encapsulated within respective SubStateMachines
ActiveClass01
- att1: CompositeDataTypett2 b l f l SubStateMachine02
Substate02
Initial
Substate02 Paste Substate02 ( parent = SubStatemachine02 ) state as a link model a transition to history state of SubStateMachine01
- att2: boolean = false- att3: int = 0
Attributes' type shall be composite ( struct, union, Class, etc ). For EA to render out the composite data type it should be a child classof the active class containing the state machine
Substate01
«struct»ActiveClass01::
CompositeDataType
+ var1: boolean = true+ var2: int = 0
Real Time UML
Flexible Vorgehensmodelle
Beliebige Vorgehensmodelle anwendbar: RUP, ICONIX, etc.
Traceability durch Views und Links
Requirem.Beliebige Views können eingebaut werden
…
Use Case
qRequ 2 UC
Beliebig
Latenzzeit kleiner als 1 sec.
(from Requirement)
Spielzug durchführen
extension pointsSpieler ist an der Reihe (a)
(from Monopoly)
t d
Activity D.
Class D.
gViele
IterationenLatenzzeit einhalten
(from Requirement)
(from Monopoly)
Würfeln
«extend»
Sequence D.
Requirement : Requirement
Monopoly : Monopoly
…
Agenda
Enterprise Architect
Aufbau von Enterprise Architect
Modellieren von UML 2.1++ mit Enterprise Architect
10:30
p
Diskussion
Pause
Generieren von Code mit Enterprise Architect
11:15
11:30 p
Enterprise Architect Code Generierung Features
Integration von Enterprise Architect mit Visual Studio
DiskussionDiskussion
Mittagspause
Teamarbeit mit Enterprise Architect
EA im Team Nützen
12:30
13:30
EA im Team Nützen
EA + TFS
Diskussion
Pause14:30 Pause
Enterprise Architekt als Modellierungsplattform
Erweitern von UML 2.1 (erstellen einer DSL)
Forward und Reverse Engineering einer DSL
14:30
14:45
Forward und Reverse Engineering einer DSL
Diskussion
Reverse Engineering
Import Soruce File
Import Source Directory
Rechte Maustaste in der Diagrammfläche
Reverse Engineering
Import Soruce File
Import Source Directory
Reverse Engineering
Import Binary Module
Java Archive ( jar)Java Archive (.jar)
.Net PE file (.exe, .dll)
Native Windows DLL und exe werden nicht unterstütztNative Windows DLL und exe werden nicht unterstützt
Intermediate Language file (.il)
Reverse Engineering
Modell ist vorhanden. Code wurde verändert. Änderungen in das Modell übernehmeng
Reverse Engineering
Code ist vorhanden. Modell wurde verändert. Änderungen in den Code übernehmen
Code Generation
… es wird gefragt wohin gespeichert werden soll.
Code wird in ein Verzeichnis generiert!Code wird in ein Verzeichnis generiert!
Code Generation
Generiere in V i h iVerzeichnis
Für jedes Package wird nun ein Verzeichnis angelegt!
Code Generation
Klassen sind fix mit Dateien verbunden
import/include:java, C#, C++ (im .h) etc.
Class1
Import/include (macro #define in C++):Import/include (macro, #define in C++): java (an vorige angehängt), C#,
C++ (im .cpp)
Code/Model Synchronisation
Code zu Model Synchronisation
Class 1 wird mit Code Synchronisiert
Class1
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->OptionsTools >Options
A B
bli l A {public class A {public B m_B;
public A(){p (){}
}
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options •Synchronice Package with CodeTools >Options
A
- value: int
B
•Synchronice Model with Code
public class A {public B m_B;private int value;
public class A {public B m_B;
delete
public A(){}
}
public A(){}
}} }
A B
+ m_B: B
+ A()
+ B()
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options •Synchronice Package with CodeTools >Options
A
- value: int
B
•Synchronice Model with Code
public class A {public B m_B;private int value;
public class A {
private int value;delete
public A(){}
}
public A(){}
}} }
A B
- value: int
+ A()
+ B()
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options •Synchronice Package with CodeTools >Options
A
- value: int
B
•Synchronice Model with Code
public class A {public B m_B;private int value;
public class A {public B m_B;
private int value;
public A(){}
}
public A(){}
}} }
!!! Hinweis!!!A B
+ m_B: B- value: int
+ A()
+ B()
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options •Synchronice Package with CodeTools >Options
•Synchronice Model with Code
A
+ m_B: B- value: int
B
+ B()+m_B value: int
+ A()
public class A {public B m_B;private int value;
public class A {public B m_B;
private int value;
public A(){}
} }
delete
} }
A B
+ m_B: B- value: int
+ B()+m_B
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options •Synchronice Package with CodeTools >Options
public class A {public B m_B;
•Synchronice Model with Code
A
private int value;
public A(){this value=0;
+ m_B: B- value: int
+ A()
this.value=0;}
}
Code/Model Synchronisation
KonfigurationsmöglichkeitenDoppelklick auf die KlasseDoppelklick auf die Klasse
A
+ m_B: B- value: int
+ A() ertie
s
!!! HINWEIS !!!
Initialer Code wird nur beimPro
pe
Initialer Code wird nur beim ersten Forwardengineering
angelegt !!!
P
angelegt !!!
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Attribute/OperationsTools >Options >Attribute/Operations
public class A {public B m B;
• Generate Code…
public B m_B;private int value;
public A(){}}
}
A
+ m_B: B- value: int
+ A()
B
+ B()+m_BA
- value: int
B
+ B()
!!!
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Attribute/OperationsTools >Options >Attribute/Operations
public class A {public B m B;public B m_B;private int value;
public A(){}}
}
A
+ m_B: B- value: int
+ A()
B
+ B()+m_BA
- value: int
B
+ B()
!!!
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Attribute/OperationsTools >Options >Attribute/Operations
public class A {public B m B;public B m_B;private int value;
public A(){}}
}
A
+ m_B: B- value: int
+ A()
B
+ B()+m_BA
- value: int
B
+ B()
public class A {
!!!p {
private int value;}
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Attribute/OperationsTools >Options >Attribute/Operations
public class A {public B m_B;private int value;
A
private int value;doSomething(){
System.out.println(“wert ”+value)}
}
- value: int
+ doSomething() : void
A
- value: int
+ doSomething(int) : void
!!!
• Generate Code…
Synchronisation
KonfigurationsmöglichkeitenTools->Options->Attribute/OperationsTools >Options >Attribute/Operations
public class A {public B m_B;private int value;
A
private int value;doSomething(){
System.out.println(“wert ”+value)}
}
- value: int
+ doSomething() : void
A
- value: int
+ doSomething(int) : void
Diese Methode ist im Code aber nicht im Modell.
!!!Hier kann definiert werden was damit passieren soll!
• Generate Code…
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Attribute/OperationsTools >Options >Attribute/Operations
public class A {public B m_B;private int value;
A
private int value;doSomething(){
System.out.println(“wert ”+value)}
}
- value: int
+ doSomething() : void
A
- value: int
+ doSomething(int) : void
!!!Methode im Code mit dieser Methodendefinition
überschreiben.
• Generate Code… Implementierung bleibt erhalten!!!
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Attribute/OperationsTools >Options >Attribute/Operations
public class A {public B m_B;private int value;
A
private int value;doSomething(){
System.out.println(“wert ”+value)}
}
- value: int
+ doSomething() : void
public class A {
A
- value: int
+ doSomething(int) : void
public class A {public B m_B;private int value;doSomething( int wert){
System.out.println(“wert ”+value)}
!!!}
}
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Source Code EngineeringTools >Options >Source Code Engineering
Generelle Ei t llEinstellungen
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Source Code EngineeringTools >Options >Source Code Engineering
Strg+Alt+Mg
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Source Code EngineeringTools >Options >Source Code Engineering
A B
public class A {}
A B
public class B {}
Generate Code… OHNE „Auto gener…“
Generate Code… MIT „Auto gener…“
A B
public class A {pubilic B m_B;
}
public class B {}
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options
Bei „undefined“ Navigationsenden wird nur von source2destination eine Referezn
angelegt !!!Tools >Options
public class A {pubilic B m_B;A B
source destination
g g
}
public class B {}
Generate Code… OHNE „Do not gen…“
Generate Code… MIT „Do not gen…“
public class A {}
A B
source destination
public class B {}
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Source Code Engineering
Bei „undefined“ Navigationsenden wird nur von source2destination eine Referezn
angelegt !!!Tools >Options >Source Code Engineering
public class A {pubilic B m_B;
source destination
g g
A B
}
public class B {public A m_A;
}
Generate Code… OHNE „Do not gen…“
Generate Code… MIT „Do not gen…“
source destination
A B
public class A {
}
public class B {public class B {public A m_A;
}
Code/Model Synchronisation
KonfigurationsmöglichkeitenTools->Options->Source Code EngineeringTools >Options >Source Code Engineering
Synchronice Model with CodeA
+ doSomething(D) : C+ doSomething(D) : C
C D
OHNE
A
+ doSomething(D) : C
MITOHNE
C D
Code Generation
Sprachenspezifische Einstellungen
Code Generation
Sprachenspezifische Einstellungen
Code Generation
Typisierte Collections
Mit #TYPE# i d b i d C d
Class1 Class2+c
Mit #TYPE# wird bei der Code Generierung der Typ des referenzierten
Elements angegebenClass1 Class2+c
1..*
public class Class1 {public Vector<Class2> c;
}
HINWEIS: <..> muss extra b d !!!angegeben werden !!!
Code Generation
Sprachenspezifische EinstellungenClass2
+ Class2()
Gilt nur für ausgewähltes Element
Class1
+ m_Class2: Collection<Class2>
+ Class1()
Class2
+ Class2()
* *()
Code Generation
Sprachenspezifische Einstellungen
Class1 Class2
* *
Projekteinstellungen
Reihenfolge der Berücksichtigung konfigurierter Collection Klassen
Code Generation
MDG Plugin für Eclipse und VisualStudio
Klassen die im Modell Klassen die im Code Klassen die im Modell vorhanden sind, aber nicht
im Code
vorhanden sind, aber nicht im Modell
Code Generation Template
Spezifiziert Transformationen von UML-Elementen in verschiedene Programmierspracheng p
Transformationen sind eine Mischung aus Mark-Up- und Script-Sprachep p
Jede Programmiersprache hat ihre base TemplatesAttribute, Class, Class Notes, Class Body, etc.
Jedes Template wird für ein bestimmtes UML-Elementausgeführt
Templates können andere Templates aufrufen -> Template Hierarchie
W i St t fü d UML El t d fi i t i tWenn ein Stereotyp für das UML-Element definiert ist, wird überprüft ob für dieses Stereotyp ein Template vorhanden istvorhanden ist
Temlpate Hirarchie
«CodeTemplate»Fi le
«CodeTemplate»Names pace0 *
+1
1
0..*
Fi le Names pace
«CodeTemplate»Cla ss
0..* 1
1
0..*
«CodeTemplate»Class Notes
«CodeTemplate»ClassDec laration
«CodeTemplate»ClassBody
11
1
11
1
«CodeTemplate»Attribute
«CodeTemplate»LinkedAttribute
«CodeTemplate»Opera tion
0..* 0..*1
0..*
«CodeTemplate»AttributeNotes
«CodeTemplate»LinkedAttributeDeclaration
«CodeTemplate»OperationNotes
«CodeTemplate»OperationDeclaration
1
1
1
1
1
11
1
«CodeTemplate»AttributeDeclaration
«CodeTemplate»LinkedAttr ibuteNotes
«CodeTemplate»Operationbody
«CodeTemplate»Parameter
Sprachelemente
Variablen$varName • Template Substitutions-Makros
• Feld Substitutions-Makros
Macros
• Feld Substitutions-Makros• Tagged-Value Substitutions-Makros• Kontroll-Makros• Funktions-Makros
%macroName%Funktions Makros
$str = „Ein String der einer Variablen zugewiesen wurde.„
$str += %LENGTH( "hall das ist ein Text )%$str + %LENGTH( hall das ist ein Text„ )%
$str += %LEFT( $str, 5 )%Funktions-Makros
$str += %LEFT( $str, 7 )%
$str += %LEFT( $str, 2 )%( , )
Code Templates
Resultat im Code
Code Templates
Substitut für ClassDeclaration
Feld Substitutions-Makros
Ermöglichen es auf die Daten eines Elementes zuzugreifeng
Pakete%packageAlias%, %packageName%,
%packageNote%, %packagePath%, …
Klasse
p g p g
%classAuthore%, %classPhase%, %classVersion%, %className%, …
Attribute %attAlias%, %attName%, %attNote%, %attType%, %attStereotype% %attScope%
Operationen
%attStereotype%, %attScope%, …
%attAlias%, %attName%, %attNote%, %attType%, %attStereotype% %attScope%
Parameter
%attStereotype%, %attScope%, …
%opReturnArray%, %opStatic%, %opScope%, %opReturnType%%opReturnType%, …
Feld Substitutions-Makros
Tagged-Value Substitution-Makros
Sind eine spezielle Art von Feld-MakrosDirekte SubstitutionDirekte Substitution
• Attribute, Klassen, Operationen, Pakete, Parameter, Verbindungen
• Struktur: %<macroName>:"<tagName>"%
• Beispiel: %opTag : „meinTagName“%
Bedingte SubstitutionBedingte Substitution• Es wird substituiert wenn die Bedingung erfüllt ist
• Struktur:Struktur:
%<macroName>:"<tagName>" [ == "<test>"] ? <subTrue> [ : <subFalse> ]%
• Beispiel: %opTag:"opInline" ? "inline" : ""%
Typ = boolean oder evaluiert zu true/false
Tag einer Operation
Name des Tags;
Typ=boolean
Wenn true, dann
inline
Wenn false, dann „“
Tagged-Value Sibstitution-Makros
Kontroll Makros
Kontroll Makros ermöglichen es die Abarbeitung der Templates zu beeinflussenp
Listen• Zum wiederholten Ausgeben von Elementen
• Kann auf folgende Templates angewendet werden:– Namespace, Class, ClassImpl, Attribute, InnerClass, InnerClassImpl,
Operation, OperationImpl, Parameter, ClassBase, ClassInterface, p , p p , , , ,Custom Template
• Struktur: •
%list=<TemplateName> @separator=<string> @indent=<string> [<conditions>]%
Zeichen zwischen den Listenelemeten
Zeichen für jede neue Zeile
Mögliche Bedingung
• Beispiel: (%list="Parameter" @separator=", "%)
output
… (para1, para2 , para3)…
output
Kontroll Makros
Resultat im Code
Anwendung des list Makros
Kontroll Makros
Kontroll Makros ermöglichen es die Abarbeitung der Templates zu beeinflussen
If-than-else• Struktur:
%if <test> <operator> <test> [elseIf <operator> <test> ] endIf%
Liste aller
• Beispiel: $bases=%list="ClassBase" @separator=", "%$interfaces=%list="ClassInterface" @separator=", "%
Basisklassen
Liste aller %if $bases != "" and $interfaces != ""%: $bases, $interfaces%elseIf $bases != ""%: $bases
Interfaces
Wenn es Basisklassen und Interfaces gibt, gib beide aus: $bases
%elseIf $interfaces != ""%: $interfaces%endIf%
Wenn es nur Basisklassen gibt, gib diese aus
Wenn es nur Interfaces gibt gib
Ausgabe
Wenn es nur Interfaces gibt, gib diese aus
Kontroll Makros
Kontroll Makros ermöglichen es die Abarbeitung der Templates zu beeinflussenp
Pl• Jedes Substitutionsmakro erzeugt ein NewLine
• Mittels Pl kann dieses NewLine formatiert werden
• Default Pl ist \n
Pl i d i ht f di l t t Z il i T l t d t• Pl wird nicht auf die letzte Zeile eines Templates angewendet
• Struktur: %PI=<value>%Struktur: %PI <value>%
• Beispiel: %Pl= „ “%, %Pl= „\n\n“%%Pl= „\t“%%Pl= „ beliebiger String “%g g
Template Description
Basis TemplatesAttribute A top-level template to generate member variables from UML attributes.Attribute Declaration Used by the Attribute template to generate a member variable declaration.Attribute Notes Used by the Attribute template to generate member variable notes.Class A top-level template for generating Classes from UML Classes.Class Base Used by the Class template to generate a base Class name in the inheritance list of a derived ClassClass Base Used by the Class template to generate a base Class name in the inheritance list of a derived Class,
where the base Class doesn't exist in the model.Class Body Used by the Class template to generate the body of a Class.Class Declaration Used by the Class template to generate the declaration of a Class.Class Interface Used by the Class template to generate an interface name in the inheritance list of a derived Class, where
th i t f d 't i t i th d lthe interface doesn't exist in the model.Class Notes Used by the Class template to generate the Class notes.File A top-level template for generating the source file. For languages such as C++, this corresponds to the
header file.Import Section Used in the File template to generate external dependencies.p p g pLinked Attribute A top-level template for generating attributes derived from UML Associations.Linked Attribute Notes Used by the Linked Attribute template to generate the attribute notes.
Linked Attribute Declaration Used by the Linked Attribute template to generate the attribute declaration.
Linked Class Base Used by the Class template to generate a base Class name in the inheritance list of a derived Class for aLinked Class Base Used by the Class template to generate a base Class name in the inheritance list of a derived Class, for a Class element in the model that is a parent of the current Class.
Linked Class Interface Used by the Class template to generate an Interface name in the inheritance list of a derived Class, for an Interface element in the model that is a parent of the current Class.
Namespace A top-level template for generating namespaces from UML packages. (Although not all languages haveNamespace A top level template for generating namespaces from UML packages. (Although not all languages have namespaces, this template can be used to generate an equivalent construct, such as packages in Java.)
Namespace Body Used by the Namespace template to generate the body of a namespace.Namespace Declaration Used by the Namespace template to generate the namespace declaration.Operation A top level template for generating operations from a UML Class's operationsOperation A top-level template for generating operations from a UML Class's operations.Operation Body Used by the Operation template to generate the body of a UML operation.Operation Declaration Used by the Operation template to generate the operation declaration.Operation Notes Used by the Operation template to generate documentation for an operation.Parameter Used by the Operation Declaration template to generate parameters.
Code Template Beispiel
«myStereotype»Person
Class Notes Template
Class BodyTemplate (Stereotype Overrides)
Code Template Beispiel
Linked Attribute Declaration Template
A B
+MyA +MyB
Agenda
Enterprise Architect
Aufbau von Enterprise Architect
Modellieren von UML 2.1++ mit Enterprise Architect
10:30
p
Diskussion
Pause
Generieren von Code mit Enterprise Architect
11:15
11:30 p
Enterprise Architect Code Generierung Features
Integration von Enterprise Architect mit Visual Studio
DiskussionDiskussion
Mittagspause
Teamarbeit mit Enterprise Architect
EA im Team Nützen
12:30
13:30
EA im Team Nützen
EA + TFS
Diskussion
Pause14:30 Pause
Enterprise Architekt als Modellierungsplattform
Erweitern von UML 2.1 (erstellen einer DSL)
Forward und Reverse Engineering einer DSL
14:30
14:45
Forward und Reverse Engineering einer DSL
Diskussion
EA Integration mit Visual Studio
Ein Vorhandenes EA Projekt in ein VS Projekt einfügen
… im Visual Studio
… einen neuen Solution-Folder anlegen
EA Integration mit Visual Studio
Ein Vorhandenes EA Projekt in ein VS Projekt einfügen
… mittels Project Menü im VS
h ö li h…auch möglich ein neues anzulegen
EA Integration mit Visual Studio
Ein Vorhandenes EA Projekt aus VS entfernen
… Kontextmenü der Solution
EA Integration mit Visual Studio
VS Projekt mit EA Projekt verbinden
Project Browser View in VS
Paket aus Project Browser auswählen
Link Existing UML Package to VS Project
Current Package -> Link Existing UML Package to Visual Studio Project
Projekt auswählen
vorher nachher
EA Integration mit Visual Studio
Simultanes Forward- und Reverse-Engineering Konfigurieren
EA VS
Project Browser View in VSProject Browser View im EA
EA VS
Agenda
Enterprise Architect
Aufbau von Enterprise Architect
Modellieren von UML 2.1++ mit Enterprise Architect
10:30
p
Diskussion
Pause
Generieren von Code mit Enterprise Architect
11:15
11:30 p
Enterprise Architect Code Generierung Features
Integration von Enterprise Architect mit Visual Studio
DiskussionDiskussion
Mittagspause
Teamarbeit mit Enterprise Architect
EA im Team Nützen
12:30
13:30
EA im Team Nützen
EA + TFS
Diskussion
Pause14:30 Pause
Enterprise Architekt als Modellierungsplattform
Erweitern von UML 2.1 (erstellen einer DSL)
Forward und Reverse Engineering einer DSL
14:30
14:45
Forward und Reverse Engineering einer DSL
Diskussion
Teamwork in Enterprise Architekt
ReplicationsReplications
Ein Master, mehrere Slaves
Übernimmt das Mergen von Modellen
XMI Export Import
Pakete als XMI exportieren und in anderem Projekt importieren
Händisches Verwalten von Modellen
Versionskontrolle auf .EAP bzw. DBMS
Concurrency auf Paketebene (für Private Models)
Ausgecheckte Pakete können nur von einem Benutzer bearbeitetAusgecheckte Pakete können nur von einem Benutzer bearbeitet werden
Security Feature für Modelle
Durch das Sperren kann es zu keinen Komplikationen kommen
Kann auf .EAP und DBMS Projekte angewendet werden
Teamwork in Enterprise Architekt
ReplicationsMacht Sinn, wenn ein Client nicht immer Zugang zum Server hat
Hinzufügen von Elementen ist Kumulativ
Löschen ist stärker als editierenLöschen ist stärker als editieren
deployment Deployment
Fileserv er
Master.EAP
Client 1 Client 2
«flow» «flow»
Replica_1.EAP Replica_2.EAP
Teamwork in Enterprise Architekt
XMI-Export/Import
«device»PC
«device»PC
«execution environ... «execution environ...UC.XMLEA EA
UC
«deploy» «deploy»
«flow»«flow»
myProject.EAP yourProject.EAP«invariant»{genau eine Ausprägung}
if t
«manifest»
myModel
1
«manifest»
«manifest»
RootPackage
1
**
SubPackage
Teamwork in Enterprise Architekt
XMI-Export/ImportM d ll l XML Fil i li iModell als XML-File serialisieren
Import von EMX und UML2 Format möglich
Unterstützte Formate• UML 1.3 (XMI 1.0) • UML 1.3 (XMI 1.1) • UML 1.4 (XMI 1.2) • UML 2 0 (XMI 2 1)
Unterstützte Formate
• UML 2.0 (XMI 2.1) • UML 2.1 (XMI 2.1) • MOF 1.3 (XMI 1.1) • MOF 1.4 (XMI 1.2)
Teamwork in Enterprise Architekt
Teamarbeit mittels Versionskontrolle
«device»Server
«execution environment»SVN
package_a.xmlExportiretes Paket
package_b.xml
«device»PC 1
«device»PC 2
«execution environment»EA
«execution environment»EA
SVN Konfigurieren
projact_x.eapproject_y.eap
Anfangs leeres Projekt
Teamwork in Enterprise Architekt
SVN pro Projektkonfigurieren Leeres Projekt
+ do / Mit EA arbeiten
Paket in einemProjekt erstellen
Projekt mit Inhalt
Elemente angelegt
Paket unterVersionkontrolle
stellen
+ do / Mit EA arbeiten
control package [SVN Konfiguriert]/Paket unter Versionkontrolle stellen
control package/Package aus Versionskontrolle lösen
Paket bearbeiten
[Paket einchecken]
[Paket ausgecheckt lassen]
Paket unter Versionskontrolle
+ do / mit Paket arbeiten
Paketeinchecken
Paket eingecheckt
Paket ausgecheckt
[einchecken] [ausgecheckt lassen]
Check In Branch
Check Outeinchecken
Security in Enterprise Architect
Zwei Security Strategien
StandardStandard• Alles ist frei, wenn auf Element gearbeitet werden soll, dieses
sperren, für Person und Gruppe
Rigoros• Alles ist gesperrt, wenn auf Element gearbeitet werden soll muss es
freigegeben werden, nur für eine Person
Umschalten ist möglich
Im ProjectBrowser -> rechte Maustaste auf [..Lock..] zeigt wer eien Lock auf das Element besitztLock auf das Element besitzt
sperrtAlle Elemente freiUser Element
sperrt
gibt frei
Alle Elemente frei
Alle Elemente gesperrt g
Teamwork mit dem Security-Feature
oprional
«device»Fileserv er
«device»Serv er
«execution environ...SVN .EAPSVN
CVS TFS SCC
«manifest»
CVS, TFS, SCC auch möglich
myModel«deploy»«flow»«flow»
«device»PC 1
«device»PC 2
«execution environment»EA
«execution environment»EA
RootPackagepackageName.xml«manifest»
*
1
«manifest»
SubPackage
«invariant»{genau eine Ausprägung}
SECURITY enabled
*
*
Teamwork mit dem Security-Feature
Agenda
Enterprise Architect
Aufbau von Enterprise Architect
Modellieren von UML 2.1++ mit Enterprise Architect
10:30
p
Diskussion
Pause
Generieren von Code mit Enterprise Architect
11:15
11:30 p
Enterprise Architect Code Generierung Features
Integration von Enterprise Architect mit Visual Studio
DiskussionDiskussion
Mittagspause
Teamarbeit mit Enterprise Architect
EA im Team Nützen
12:30
13:30
EA im Team Nützen
EA + TFS
Diskussion
Pause14:30 Pause
Enterprise Architekt als Modellierungsplattform
Erweitern von UML 2.1 (erstellen einer DSL)
Forward und Reverse Engineering einer DSL
14:30
14:45
Forward und Reverse Engineering einer DSL
Diskussion
EA und TFS
Anbindung des TFS wird mittels VSIntegration «device»Serv er
durchgeführt.
TFS als Versionierungssystem
TFS zur Verwaltung von Work Items
Serv er
«execution environment»TFS
TFS zur Verwaltung von Work-Items
«flow»«flow»
TCP
1. VS mit TFS verbinden«device»Laptop
«flow»*
2. Localfolder im VS erzeugen
3 TFS im EA
«execution environment»Visual Studio
«execution environment»Enterprise Architect
3. TFS im EA konfigurieren
4. Paket unter
«execution environ...Team Explorer projectName.eap
«execution e...MDG Integration «flow»
«flow»
Versionkontrolle stellen
Muss extra installiert werden
VS mit TFS verbinden
Localfolder im VS erzeugen
… um EA Pakete zu versionieren
… working Directory
angelegtes Teamproject.. angelegtes Teamproject
TFS im EA konfigurieren
EA-Menü: Project
Local Folder, erzeugt im VS
… automatisch ermittelt
… Account vom TFS Server
Default: C:\Program Files\Microsoft Visual Studio 9.0
\Common7\IDE\TF.exe
Paket unter Versionkontrolle stellen
Paket ist unter Versionskontrolle
… TFS konfiguragtiong g
Projekt-Vorgehen
Use Case
UML 2.1
Enterprise Architect 7
Requirements Design Implem. Test Maintainence
nch
nch
nch
nch
Imp
ort
/ sy
n
Imp
ort
/ sy
n
Imp
ort
/ sy
n
Imp
ort
/ sy
n
TFS Polarion Code Beamer DoorsWork Items
Use CaseRequire-ments
Bug Issue Task …
Paket mit TFS verbinden
link Project to TFS
TFS Server eintragen und
… link Project to TFS
EA Project Explorer im VSTFS Server eintragen und
TS Projekt auswählen
Work-Items nach EA importieren
EA Project Explorer im Visual StudioStudio
Work-Items nach EA importieren
Vorhandene Work-Items im TFS
Verwendetes UML Element
Abbildung der Work-Item Properties zu EA-Element Properties
Agenda
Enterprise Architect
Aufbau von Enterprise Architect
Modellieren von UML 2.1++ mit Enterprise Architect
10:30
p
Diskussion
Pause
Generieren von Code mit Enterprise Architect
11:15
11:30 p
Enterprise Architect Code Generierung Features
Integration von Enterprise Architect mit Visual Studio
DiskussionDiskussion
Mittagspause
Teamarbeit mit Enterprise Architect
EA im Team Nützen
12:30
13:30
EA im Team Nützen
EA + TFS
Diskussion
Pause14:30 Pause
Enterprise Architekt als Modellierungsplattform
Erweitern von UML 2.1 (erstellen einer DSL)
Forward und Reverse Engineering einer DSL
14:30
14:45
Forward und Reverse Engineering einer DSL
Diskussion
Entwickeln von EA Technologien
Zum Bündeln von EAFeatures …
Erweiterungsmöglichkeiten von UML
pkg Paketdiagramme
InfrastructureLibrary
Core Profiles
«import»
Neues Metamodell UML UML
«merge» «merge» «merge» M3
M2M2
Erweiterung und Veränderung Erweiterung
Erweiterung von UML im EAErweiterung von UML im EA
Aufbau von Modellierungssprachen
M3
Class Association Meta-Metamodell (MOF),zur Definition von Modellierungssprachen
M2
Klasse Assoziation
<<instanceOf>>
g p
UML-Metamodell,Verfügbare
M11 *
<<instanceOf>>
Verfügbare Modellierungselemente
Kunde Bestellung
M0
1 *
<<instanceOf>>
UML-Modell
M0
Laufzeitmodell
UML Profile mit Stereotypen
Jedes Metaklassenelement, außer Stereotyp selbst, kann mittels Stereotypen erweitert werden.
S h ä k M kl l hi i h li hSchränken Metaklassenelemente hinsichtlich Funktionalität und Notation auf M2 ein.
St t fü b ti tStereotypen für bestimmten Verwendungszweck werden zu Profilen gruppiert
class meinStereotyp
«metaclass»
class Stereotypen
«profile»zu Profilen gruppiert
Elemente eines Profils können auf M1 instanziiert werden
Class
+ isActive: Boolean
meinStereotyp
+ Bean
+ Class
+ Component
+ Dependency
NameDesSteretypen
- Einschraenkungen: int
«extends» Dependency
+ MyEntity
+ NameDesSteretypen
+ Session
+ StateKind
+ totaleAbhängigkeit+ totaleAbhängigkeit
Tagged-Value im EA verwenden
Tagged-Value pro Projekt vordefinieren
Tagged-Value pro Element
Set up: Configure Build
EA Element
Stereotypen vs. Schlüsselwörter
Schlüsselwörter dienen dazu mehrfach verwendete Notationselemente zu unterscheiden.
Konzept hat unterschiedliche Metaklassen aber gleiches Notationselement, z.B. Class und Interface.
«metaclass» «metaclass»«metaclass»Class
+ isActive: Boolean
«metaclass»Interface
myType
- myTag: int «extends»Stereotyp
Class1 «interface»«myType»
«instanceOf»«instanceOf»
«instanceOf»
M2M1
Class1 interfaceInterface1
myTypeClass2
tagsmyTag =
SchlüsselwortSchlüsselwortTagged Values
Spezielle Eigenschaften
Erstellen von Shape-Scripts
stereotype: myTypename: Class2
Agenda
Enterprise Architect
Aufbau von Enterprise Architect
Modellieren von UML 2.1++ mit Enterprise Architect
10:30
p
Diskussion
Pause
Generieren von Code mit Enterprise Architect
11:15
11:30 p
Enterprise Architect Code Generierung Features
Integration von Enterprise Architect mit Visual Studio
DiskussionDiskussion
Mittagspause
Teamarbeit mit Enterprise Architect
EA im Team Nützen
12:30
13:30
EA im Team Nützen
EA + TFS
Diskussion
Pause14:30 Pause
Enterprise Architekt als Modellierungsplattform
Erweitern von UML 2.1 (erstellen einer DSL)
Forward und Reverse Engineering einer DSL
14:30
14:45
Forward und Reverse Engineering einer DSL
Diskussion
Enterprise Architect Object-Model
Vorhandene• VB• Delphi
VorhandeneAPI:
p• C#• Java
C#Verbindung zum EA Repository
private void button1_Click(object sender, System.EventArgs e){
EA.Repository r = new EA.RepositoryClass();r OpenFile("c:\\eatest eap");r.OpenFile( c:\\eatest.eap );
}
Javapublic void OpenRepository(){
org.sparx.Repository r = new org.sparx.Repository();O Fil (" \\ t t ")r.OpenFile("c:\\eatest.eap");
}
Collection<org.sparx.Package> models = r.GetModels(); // erste Package Ebene
for( org.sparx.Package p : pCollection ){ ….. }
// alle Packages, Diagrammep.GetDiagrams() , p.GetPackages() , p.GetElements()
String objectType = elem.GetType(),String objectType elem.GetType(), if( objectType.equals( "UseCase“ ) ){ … } // alle Use Case Elemente
Collection<Connector> connectorColl = elem.GetConnectors();for( Connector conn : connectorColl ){ // alle Verbindungen( ){
String connType = conn.GetType();if( connType.equals( "Realisation" ) ){ … } }
g
// vom Typ Realisation
Verbindung zum EA Repository
ConnectorEnd ceSupp = conn.GetSupplierEnd();int sourceElementID = conn.GetSupplierID();
Java// source Rollenende// source Element ID
Element sourceElement = r.GetElementByID(sourceElementID); // source Element
ConnectorEnd ceClie = conn.GetClientEnd(); int targetElementID =conn.GetClientID(); El t t tEl t G tEl tB ID(t tEl tID)
// target Rollenende// target Element ID//Element targetElement = r.GetElementByID(targetElementID); // target Element
if( soruceType.equals( "Requirement“ ) && targetType.equals( "UseCase“ ) ){ ….. }
org.sparx.Element newElement = (org.sparx.Element)p.GetElements().AddNew( "name“ , "UseCase“ );
// neues UseCase Element anlegen
// neuen Connector anlegenConnector c = (Connector)newElement.GetConnectors().AddNew( "linkname“ ,
newElement.Update(); // Änderung festschreiben
"Association“ ); c.SetClientID( newElement.GetElementID() );c.SetSupplierID( element.GetElementID() ); c GetClientEnd() SetAggregation(2);
// targetelement setzen
// sourceelement setzen// AggregationKind setzen
0 = None1 = Sharedc.GetClientEnd().SetAggregation(2);
c.Update();// AggregationKind setzen1 = Shared
2 = Composite. // Änderung festschreiben
Enterprise Architect Add-In
namespace EATestPlugin{
public class Class1{
Add-In registrieren
{public object EA_GetMenuItems(EA.Repository Repository, String MenuLocation, String MenuName){switch (MenuName){
1. .dll bereitstellen
2 mit RegSVr32 registrieren{case "-&Horst's Add-In" :
return new string[3]{ "punkt1” , "punkt2” , ”punkt3” };
d f lt t " &H t' Add I "
2. mit RegSVr32 registrieren
3. starte regeditdefault: return "-&Horst's Add-In";
}}
bli id EA M Cli k
4. HKEY_CURRENT_USER\Software\Sparxpublic void EA_MenuClick
(EA.Repository Repository, String MenuName, String ItemName){if (MenuName == "punkt1"){
// Aktion ausführen
Software\Sparx Systems\EAddIns anlegen
//….. Aktion ausführen}
}}//end class
}
5. neuen Key anlegen
6 [projectName] [className]} 6. [projectName].[className]
Forward und Reverse Enigneeringmit dem Automation Interfacemit dem Automation Interface
Enterprise Architect
Java C# VB DelphiCOM
Automation Interface
…Excel Word
Forward und Reverse Engineering
Collection<ProjectResource> resource = repo GetResources(); // Resources des Projektes
Einlesen von EAResoucen
// neue ProjektResource l t
Collection<ProjectResource> resource repo.GetResources();
ProjectResource pr = resource.AddNew("x", "y");
// Resources des Projektes
angelegt//Properties der ProjectResource setzenpr.SetName("Max Mustermann");pr SetRoles("Entwickler");
// name ist eindeutig, d.h. bei nochmaligem einfügen wird pr.SetRoles( Entwickler );
pr.Update();
g gkein neues Element angelegt
// neue ProjectResource ist angelegt und im Projekt
resource Refresh();
angelegt und im Projekt vorhanden
// nochmaliges aufrufen von resource.Refresh(); grepo.GetResources() beinhaltet schon alle neuen, ohne diesen aufruf noch i ht!nicht!