- Modelle sind intrinsisch in Natur-/Ingenieurswissenschaften, auch Informatik
- Code ist auch nur ein Modell.
- Modell kann Vorbild oder Nachbild sein, aber auch synchronisiert. (Praeskriptiv/Deskriptiv)
- Abildungsmerkmal: Modell stets (Abbildung, Repraesentation) VON etwas natuerlichem/kuenstlichem => kann selbst Modell sein
- Verkuerzungsmerkmal: Umfasst nicht alle Attribute, nur was fuer Ntzer/Modellierer relevant
- Pragmatisches Merkmal:
- fuer bestimmte Subjekte (erkennende/handelnde/nutzende Menschen)
- fuer bestimmte Zeit(raeume)
- Unter Einschraenkung auf gedankliche oder tatsaechliche Operationen
- Domaenenspezifische Modellierungssprache (DSML) + Transformation Engines/Generatoren
- Automatisierung von Aspekten der Produktion/Wartung/Betrieb
- MDE fuer Softwaredevelopment
- OMG-Warenzeichen
- Vorgehen fuer MDSD
- Nutzt OMG Standards
- Modelltypen CIM, PIM, PSM
Modellbasiert | Modellgetrieben |
---|---|
einige Modelle sind sekundaere Artefakte | Modelle sind primaere Artefakte |
zur Dokumentation | sind integraler Teil des Systems |
zur Kommunikation | Koennen nicht weggelassen werden |
manueller Umgang | Explizite Entwicklung/Spezifizierung/Versionierung |
Transformationen zw. Modellen |
Ziele:
- Steigerung der Entwicklungsgeschwindigkeit
- Steigerung der Softwarequalität
- Trennung von Verantwortlichkeiten (Separation of Concerns)
- Redundanzvermeidung
- Wartbarkeit
- Handhabbarkeit von Technologiewandel
- höherer Grad der Wiederverwendung
- Verbreitung von Expertenwissen
- Handhabbarkeit von Komplexität durch Abstraktion
- produktives Umfeld
- Interoperabilität
- Portabilität
- UML nicht vorgeschrieben, aber MOF (wegen Automatisierbarkeit)
- Spezifikationen sollen maschinenlesbar definiert werden
- Modelle dienen nicht ausschließlich der Dokumentation
- Modelle sollen durch Transformationen in andere Modelle überführt werden
|Computation Independent Model (CIM) |Platform Independent Model (PIM)|Platform Specific Model (PSM) | |---| |Anforderungen an das System und die Umgebung|Betrieb des Systems |plattformspezifische Informationen| |Struktur verborgen |Plattformdetails verborgen | | |Bsp: Anwendungsfalldiagramm |Bsp: Komponentenmodell |Bsp: Klassendiagramm |
Neue Rollenaufteilung in Software Development:
- Programmierer: nicht mehr noetig
- Domaenenexperte: Kennt Umgebung, erstellt Modelle, definiert Metamodelle
- Tech-Experte: Entwickelt Modellierungsplattformen, Transformationen, Metamodelle
- Abstrakte Syntax
Konstrukte, aus denen Modelle bestehen, sowie deren Eigenschaften und Beziehungen
- Konkrete Syntax
Darstellung der Konstrukte, Eigenschaften und Beziehungen
- Statische Semantik
beschreibt Modellierungsregeln und Einschränkungen, die nicht durch die abstrakte Syntax ausgedrückt werden
Bsp: OCL
Soll entscheidbar sein
4. Dynamische Semantik
Bedeutung der Konstrukte. Spezifizierung durch natuerliche Sprache (Text)
- Ist meta-Metamodell
- Aufgeteilt in EssentialMOF und CompleteMOF
- Zyklische Abhaengigkeit CMOF <-> UML
- M3 Meta-Meta (MOF, ECORE)
- M2 Meta (KVV, Klassendiagramm)
- M1 Modelle (Instanziierungen aus M2)
- M0 Originale
- 3 Teile:
- Infrastructure
- Superstructure (merged with Infrastructure in 2.5)
- OCL
- Diagrammtypenhaeufigkeiten:
Class > UseCase > Interaction > Activity > Component > Structure > Action > Deployment > Info Flows > State Machines - Klassendiagramme: 1. Domaenenmodelle 2. Objektorientierte Entwuerfe
- Weitere Diagrammtypen:
- Package Import
- Package Merge
- Entwurfsprinzipien:
- Modularitaet: Konstrukte in Paketen, Eigenschaften in Metaklassen
- Schichtung: Paketstruktur und Modellierungsebenen geschichtet
- Partitionierung: Gruppierung von Elementen auf selber Modellierungsebene nach Konzepten => Flexibilitaet
- Erweiterbarkeit: Profilbildung => Neue Dialekte
- Wiederverwendung: Feingranulare Bibliothek
- UML-Profile: Mittelweg "Reines" UML <-> Eigenes Metamodell
- Paket, das Referenz-Metamodell erweitert/anpasst fuer Domaene/Plattform/Methode
- Erweitert Metaclass und fuegt Constraints hinzu
- Stereotypen wichtigste Erweiterungselemente
- Klasse, die Erweiterung des Ref. Metamodells definiert
- Bildet Extensions, dargestellt durch -->>
- KEINE Erweiterbarkeit durch andere Stereotypen
- Attribute = Tags
- Werte von instanziierten Tags = tagged values
- Bsp: Datenbank ist Metaklasse + Port
- Nutzung ueber Paket-Import
- Erweiterung von existierenden Modellen (auf M2 Ebene)
- Constraints: ? Angewendet, wenn Paket importiert wird. "Wohlgeformtheit"
|Profil | Metamodell | |---| |+ Wiederverwendung |+ Voellige Freiheit | |+ immer gültiges UML |- Geringe Wiederverwendung | |+ viele vorgefertiget Domaenenprofile | |- geringe Flexibilitaet | |- UML komplett geerbt |
- Meta-Sprachkern
Core
|-Primitive Types: Integer, Boolean, String...
|-Basic: Grundbegriffe Klasse, Attribut, Operation, Paket
|-Abstractions: Generalisierung, Instanz, Einschränkung, Kardinalität...
\-Constructs: Grundkonzept Assoziation
- Vererbung = Generalisierung
- Generalisierungsmengen = Partitionen der Beziehungen:
- overlapping: Weitere Subklassen moeglich mit Mehrfachvererbung
- disjoint: KEINE Subklassenbildung mit Mehrfachvererbung
- complete: Alle Subklassen wurden spezifiziert
- incomplete: Einige Subklassen wurden spezifiziert, weitere sind möglich.
- Beispiel: Lokomotive mit Antrieb {disjoint, complete} zu Dampf- und Motorlokomotive
- Typ für Generalisierungsmenge
- Dimension der Erweiterung, z.B. Lokomotiv-Generalisierung über Antrieb
- Stark typisiert
- Boolean, Integer, Real, String
- Collection -> Set (unique), OrderedSet, Bag (unordered, not unique), Sequence
- Klassen mit Attributen/Referenzen/Operationen, Enumerations
- KEINE Sichtbarkeiten
- Seiteneffektfrei
- keine Kontrollflusskonstrukte
- keinemProgrammaufrufe
- keine Modellveränderbarkeit
- Constraints für Klassen bzw. deren Instanzen
- Instanzen: Constraint für ganze Objektlebenszeit
- Vor- und Nachbedingungen von Operationen (pre und post statt inv)
- Nutzung in Query/View/Transform (QVT) Transformationssprache
- oclIsTypeOf (genauer Typ), oclIsKindOf (Generalisierung)
- allInstances: Eklig! (Speicherverbrauch)
- Navigation: self.idcard.validityEnd, self.lectures->size()
- Mengenops:
- Vergleich: =, <>
- Transforms: asBag() ...
- Contains Test: includes(), excludes()
- Modifikation: including(), excluding()
- Flatten
- union(), intersection(), minus(), first(), last(), indexOf()
- Iteratoren
- select(x|x>2)
- reject(x|x>2)
- any(x|x>2) (z.B. select().first())
- collect(firstName): Sammelt firstName Attribute
- isUnique(i|i*i): ist Func bijektiv
- sortedBy(i|-i)
- exists(x|x>10)
- one(x|x>4): genau 1 Element erfüllt
- forAll(x|x>0): Gilt Func für alle?
- includes/excludes/includesAll/excludesAll
- iterate{Element, Akk, Startwert | Prädikat}
- Logik: not, and, or, xor, implies, if...then...else...endif
- Initialwerte: init
- Abgeleitete Werte:
context: Student::passedExams
,derive: self.avgGrade -> sum() / self.passedExams->size()
- Queries:
context: ..., body: self.attendedLecture.lecturer -> select(l|l.oclIsKindOf(Professor))
let bla : typ = xyz in ausdruck
- Guter Stil:
- Komplexitaet vermeiden
- Richtige Kontext
- nicht allInstances nutzen
and
Verknuepfungen aufspalten in einzelne constraints- Kurzschreibweise fuer
collect()
(Ich glaube, es ist.
oder->
gemeint) - Rollen statt Assoziationsnamen
- Entscheidbarkeit: Unentscheidbar
- Bestandteile:
- Eingabe: Modell A, basierend auf Metamodell A
- Ausgabe: Modell B, auf Metamodell B
- Transformationsregeln, geschrieben in Transformationssprache
- Transformationsengine
- Def. Fachbegriffe: Transformation, Transformation definition, Transformation rule
- Maschinelle Nutzbarkeit von Modellen:
- Kostenersparnis
- Produktivitätsgewinn
- Qualitätssteigerung
- Verringerte Wartungskosten
- Trennung Domäne/Technologie
- angewandt im MDA-Prozess
- bessere Wartbarkeit
- Trennung Domänen-Experte/Technologie-Experte
- Wiederverwendung
- der Transformationen selbst oder von Teilen (inter)
- innerhalb einer Transformation z.B. von generiertem Code (intra)
- Klassifizierung
- Technischer Raum: XML/MOF
- Endogen: Innerhalb selbes Metamodell, Exogen: Verschiedene Metamodelle
- Horizontal: Selbe Abstraktionniveaus der Modelle, Vertikal: Unterschiedliche Abstraktionsniveaus
- Syntaktisch: Reine Transformation von Syntaxen, Semantisch: z.B. Refactorings, Optimierung
- Characterisiken:
- Automationsgrad
- Komplexitaet
- Eigenschaften-Erhaltung
- Anforderungen:
- Nutzbarkeit/Nuetzlichkeit
- Verbosity/Praegnanz
- Performance/Skalierbarkeit
- Erweiterbarkeit
- Interoperabilitaet
- Standardisierung
- imperativ: (Wie-Aspekt)
- QVT-O
- XSLT
- Java
- Xtend
- Kermeta
- Hybrid:
- NTL
- VIATRA
- ATL
- MIR
- RubyTL
- deklarativ: (Was-Aspekt)
- QVT-R
- TGG
- Vorteile Deklarativ:
- Modell-Traversierung/Navigation
- Grundlagen Trace-Verwaltung
- Bidirektionalität
- implizit ausrückbar:
- Navigation des Quellmodells
- Erstellung des Zielmodells
- Reihenfolge der Regelausführung
- "Funktional"/Zustandslos (aber auch Nachteil)
- Logische Programmiersprachen (Prolog, Mercury)
- Backtracking
- Constraint-Propagierung (bei Constraint-Programmiersprachen)
- Unifikation (partiell/vollständig)
- Anfrage-Mechanismus
- Imperativ:
- Wenn alles andere versagt
- Weil z.B. Reihenfolge wichtig
- Andere Programme aufrufbar
- Einfacher fuer Entwickler
- Modelle = Graphen
- Transformationen => Graphtransformationen
- Abstrahierung von konkreter Sprache/Engine
- Nachweis von Eigenschaften möglich
- Graphdefinition:
- C = <Cv, Ce> Markierungsalphabete
- Gerichteter markierter Graph (V,E,s,t,l,m)
- s,t: E -> V (Quell- und Zielzuweisung für Kanten)
- l: V -> Cv, m: E -> Ce (weisen Knoten/Kanten Markierungen zu)
- Graphersetzungssystem: G = <C,R> (Markierung, Regeln)
- Graphgrammatik: <C,R,N,S>
- Graphersetzungssystem
- N = <Nv,Ne> Teilmenge C
- S = Graph über C
- Metamodell = attributierter Typgraph, Modell = Instanzgraph
- Graphersetzungssystem r = (L,K,R)
- L,K,R sind Graphen
- L > K < R, K: Klebegraph
- Anwendung:
- Finde Instanz von L in G
- Prüfe Identifikationsbedingungen
- Lösche aus der Instanz L\K (K bleibt also)
- Füge R\K hinzu
- Bs: Eclipse Henshin
- OMG: EMOF + OCL
- Beziehungsüberprúfung, Transformationen, Modellaktualisierungen
- Architektur? Operational Mappings, Relations, Core, Black Box
- QVT-R: Transformationen = Relationen
- Engines:
- ModelMorf
- MediniQVT
- Eclipse MTT
- Bidirektional (nicht zwangsläufig bijektiv)
- Bedingungen
check
&enforce
domain
: Startpunkt für Mustersuche, Navigation über OCLcheckonly
,enforce
,when
,where
- Engines:
- QVT-O: Imperatives QVT
- Kopf
- Main-Methode
- Mapping-Regeln
- Queries (optional)
- ImperativeOCL:
- Funktionsaufrufe:
map
- Variablen:
var
,:=
- Kontrollfluss:
switch/case
,while/break
,for/continue
,if/else
,return
- Instanziierung:
object
,new
- Exceptions:
assert
,try
,raise
,catch
- Funktionsaufrufe:
- QVTr, QVTc, QVTu, QVTm, QVTi, QVTo
- Atlas Transformation Language
- Von: OBEO, INRIA
- Teil von EMF => Eclipse Public License
- Enwicklung: OBEO, AtlanMod
- Konzepte:
- Quell- und Zielmodell unterschieden
- Quelle readonly, Ziel writeonly
- Hybride Sprache (Deklarativ + Imperativ)
- Ausführungsreihenfolge nicht spezifiziert, aber egal (read/write only)
- KM3 eigenes Meta-Metamodell: Kernel Meta-Metamodell
- Eclipse: Nicht erweiterbar, sondern erweiterungsbasiert
- Zugriff auf MOF von Java mit JMI (Metadate Interface)
- Eclipse-Features mit EMF:
- Codegen
- Task Automatisierung
- Erweiterbarkeit
- UI
- Features:
- Unterstützt Java, UML, XML
- Ecore Meta-Metamodell
- Tools: UI, headless, Ant, Standalone, Editors
- Reflektive API, dyn. Modelldefinition ("im Speicher")
- Persistenz: XML/XMI (XML Metadata Interchange), (De-)Serialisierung
- Runtime:
- Autosave
- Change Notifications
- Dynamic Object Zugriff über Reflection API
- Integration in Eclipse IDE, Eclipse RCP, Standalone Java
- Workflow:
- Metamodell erstellen
- Code und Editoren generieren
- Modellinstanzen mit gen. EMF-Editor erstellen
- Modell verfeinern
- angepasstes UI mit EMF.Edit erstellen
- Import:
- UML
- Annotierter Java Code
- XML Schema
.ecore
Datei
- Alternativ zu Java Metadata Interface nutzbar
-
EMOF kompatibel
-
Klassen (+abstract), Interfaces:
EClass
-
Attribute/Funktionen/Methoden:
EAttribute
->EDataType
-
Referenzen (Assoziationen, Aggregationen, Kompositionen):
EReference
-
Datentypen: EBoolean, EChar, EFloatObject (java.lang.FLoat), EJavaObject...
-
Eigenschaften von Features:
- Default Value
- Ordered
- Many
- Required
- Changeable
- Transient
- Volatile
- Derived
- Unsettable
-
Reflection:
.eINSTANCE
,.eClass()
,getEStructuralFeature
,EcoreUtil.create(class)
-
Serialisierung: Siehe Persistenz
-
Benachrichtigungen: Alles ist ein
Notifier
, Listener =Adapter
-
Codegen:
- Modell-Impls
- UI unabh. Editor-Unterstützung
- Editoren und Sichten für Eclipse
- JUnit-Test-Stubs
- Manifest, Plugin-Klassen, Eigenschaften, Icon usw.
- Vorteile: Auto-Merge, Editorkompatibel, Import
- Nachteile: Geringe Flexibilität, nur Java
-
ALternativ: Modell-zu-Text
-
Kombination mit selbstgeschriebenem Code:
- @generated muss entfernt werden
|Allzwecksprache |Domänenspezifische Sprachen| |---| |weite Verbreitung |jeder hat eigene DSL | |allgemein/Ausdrucksstark|weniger allgemein | |weniger knapp/präzise |präziser | | |weil auf Domäne optimiert|
- OMG Standard
- nach XMI konvertierbar
- selten benutzt
Nachteile von Diagrammen:
- Konkrete Syntax kann nur Teilmenge von Abstrakter Syntax -> Rest ist Fließtext
- Layout für Verständnis wichtig, hat aber nix mit Modell zu tun. Außerdem Version Control
- Für große Projekte sind Diagramme unübersichtlich
Vorteile Textsprachen:
- Editoren: Copy/Paste/Syntax Higlighting
- Versionskontrolle, Diff, Patches...
- Syntaxcheck (Fehlerhervorhebung)
- Autovervollständigung
Schritte:
- Abstrakte Syntax definieren (Metamodell)
- Konkrete Syntax(en) definieren
Ansätze:
- Grammatik-basiert: AS kommt aus KS
- Mapping-basiert: Beziehungen AS <-> KS manuell spezifizieren
"Erweiterte Backus-Naur-Form", (Nicht)-Terminalsymbole
- Grammatik, Parser/Compiler/Linker, Editor, AST alles in einem Rutsch
- Benutzt ANTLR
- Basis: .ecore Metamodell
import
,grammar ... with ...
- Grammatikbau
terminal XY: $regex$
,terminal XY returns ecore::EInt: $regex$
- Keywords als 'Strings'
- `enum Degree: Master = 'master' | Student = 'student'
fragment
- Meist nur Teile der Modellinformationen werden transformiert
- Codegen mit Templates, Inhalt aus Queries
- Template-Engines
- Xtend
- Allzwecksprache (nach Java kompiliert)
- Reduktion der Verbosity
- Xpand
- Template-Engine fuer Xtend
- Eclipse-Projekt
- Beispiel: Xpand nach Mediawiki
- Zusammenfassung:
- Code + Xpand => Modell (.xmi)
- Modell instanceof Metamodell (.ecore)
- .ecore => Xtext (DSL)
- .xmi => DSL-Instanz
- Mischung eigener Code/generierter Code vermeiden
- Inkonsistenzen
- Versionsverwaltung
- Wartbarkeit
- Deswegen: Geschuetzte Bereiche (Xpand) mit
PROTECT
Nachteile:- Komplexerer Generator
- Komplexe Erhaltung von manueller Bearbeitung
- Entwickler koennen geschuetzte Bereiche beschaedigen
- Versionierung
- Desweiteren:
- Verschiedene Dateien fuer generierten und manuellen Code
- Gen. Code nicht modifizieren
- Huebschen Code generieren (Beautify)
- Kommentare aus Modellinfos
- "Location Strings" -> Inline Source maps
- 3 Schichtige Impl:
- Plattformschicht (nur manueller Code)
- Modellschicht (generierter Code)
- Applikationsschicht (manuelle, nicht-abstrakte Klassen)
- Nutze Mehrfachvererbung fuer Mixins/Code Sharing
- Eindeutiges Wurzelelement
- Containments: Jede Klasse ist irgendwie in Wurzel (= Gesamtsystem) enthalten
- Navigierbarkeit ueber Referenzen sicherstellen (ggf.
EOpposite
) - Korrektheit: Kardianalitaeten, Instanziierbarkeit
Entwurfsalternativen:
- Modellierung <-> Constraints
- Klassen <-> Rollen
- Vererbung <-> Instanziierung
- Enums <-> Klassen
- Attribute <-> Referenz + neue Klasse
Sonstige Entscheidungen:
- Modelle einfach erstell-, analysier- und transformierbar
- Enums statt Strings
- Einfachste Alternative waehlen, z.B. meherer Bool-Switches nur, wenn alle Kombinationen moeglich
- Benannte Referenzen als Rollen fuer Klassen
- Gleiche Dinge gleich modellieren
- keine Operationen um Struktur zu modellieren
- Modelleigenschaften korrellieren mit Zielmetriken:
- Größe, Anzahl, Verschachtelungstiefe... <=> Wartbarkeit, Verständlichkeit, Transformierbarkeit
- Objekt X = <x, p(x)> mit x = Individuum und p(x) = Attribute, Mx = Methoden, Ix = Instanzvariablen
- Aehnlichkeit sigma(M1,M2) = I1 Schnitt I2
- Aehnlichkeit bestimmt Kohaesion
- Weighted Methods per Class: Anzahl + Komplezitaet
- Vererbungstiefe/Vererbungsbaum: Baeume gut, Rauten schlecht
- Viele Subklassen schlecht wegen modifizierbarkeit der Elternklasse
- Coupling: Klasse Y benutzt viel aus Klasse X
- Response sets: Methoden + aufgerufene Routinen in den Methoden
- Methodenkohaesion: Schnitt der zugegriffenen Member. Leere Schnitte -> Klasse koennte aufgespalten werden
- manuell: teuer, subjektiv
- musterbasiert
- metrikbasiert
Antipatterns:
- Isolierte Klasse/ isoliertes Paket
- Zyklen in Vererbungsgraph
Zielmetriken und Groessenmetriken:
- Komplexität
- Depth of Inheritance
- Number of Indirect Superclasses per Class
- Depth of Containment
- Number of Containers per Concrete Class
- Verständlichkeit
- Depth of Packaging
- Total Number of Disjoint Roots
- Modularität
- Number of Direct Elements per Package
- Depth of Packaging
- Maximal Inheritance Cycle Length
- Präzision
- Total Number of Classifiers
- Total Number of Elements
- Vollständigkeit
- Korrektheit
- Maximal Inheritance Cycle Length
- Total Number of Disjoint Roots
- Änderbarkeit
- Nutzbarkeit (Instanzen)
- Total Number of Isolated Classifiers/Packages
- Nutzbarkeit (Transformationen)
Probleme:
- Abstraktion nicht messbar/domaenenspezifiesch
- Modularisierung messbar (Kohaesion, #Pakete), aber nicht zwangslaeufig groesser = besser
- Verwaltung von großen Modellen
- Abfrage von Elementen
- Generierung von Sichten
- skaliert schlecht
- SQL-artig
- Hat API
- Indexer
- dirty state
- Graph Anfragesprache (deklarativ)
- Musterbasiert
- Features:
- Muster-Komposition
- Rekursion/Negation
- Abfragen: Generisch oder parametrisiert
- Bidirektionale Navigierbarkeit
- Inkrementelle Ausfuehrung
- Verteiltes Arbeiten
- Transaktionen
- Versionierung
- Repository-Sichten
- 3-Schichten-Architektur
- Clients
- Server
- RelationalDB/Object Oriented DB/...
- Metadate Repository
- Versionierung: Diff/Merge
- Offline-faehig
Motivation
- Verschiedene Metamodelle mit semantischen Ueberlappungen
- Informationen muessen einander zugeordnet werden
- Verschiedene Speicherorte der Infos (1 Ort je Metamodell)
- => Sichten (wie Rel. DBs) fuer versch. Informationsbeduerfnisse
- Aehnliche Ansaetze:
- GlueMM: Verbinde Metamodelle ueber Klebemodell
- TargetMM: Vereine Metamodelle in groesserem
Ziele:
- SQL-aehnlich von Menschen lesbar
- deklarativ
- heterogene Metamodelle zu Sichten verscmelzen
- Nicht-Invasiv (ohne Modifikationen)
- schnell geschrieben und ausgefuehrt
- kein (manuell definiertes) Ziel-Metamodell noetig
|relationale DB|Ecore| |---| |Schema|Metamodell| |Tabelle|Modell| |Zeile/Tupel|Objekt/Instanz| |Spalte|Feature (Attr, Ref)| |Anfrage|Modelltransformation|
Operationen:
- JOIN
- KEEP (Projektion)
- WHERE (Selektion)
Mengen-Notation von Ecore Foliensatz 9, Folie 28
||| |---| |Class|Klassenname, Generalisierung <| |...||
Mapping:
- Mapping-Relation: auf Metamodell-Ebene definiert
- Instanz-Mapping-Relation
Operatoren:
- Join
- Join-Konformitaet ~=Att: "Aehnliche" Attribute, die vereinigt werden koennen
- Join-bare Attribute: Attribute einer Klasse mit Join-Konformitaet
- Instanz-Konformitaet ~=I : Instanzen koennen vereinigt werden, wenn alle Attribute join-bar sind
- Join Operator ><, natural Join: <class source1, class source 2, class target>
- Outer Join: Normaler Join + nicht-join-bare Attribute
- Theta-Join: Mit Filterfunktion
- Keep-Attributes ?
- Keep-References ?
Zusammenfassung:
- Keine Transformationssprache
- Modellverschmelzung, Fokus Sichtbasierte Entwicklung
- Kein Framework fuer Datenintegration
- Keine Heuristiken fuer "aehnliche Element"-Verschmelzung
- vs. SQL: Konstruktiver Ansatz
Moegliche Erweiterungen
- Sichten Editieren (Ruecktransformation in Quellmodelle)
- Generierung des Ziel-Metamodells
- Anbindung an Repositories
Open Source, Prototyp
- Lehman's Law I: Programm, das andere Realitaet abbildet, wird veraendert und zerfaellt, bis neu machen billiger ist.
- Aenderungen
- Atomar: CRUD
- Komplex: Refactorings, Elementverschiebung...
- Aenderungssequenz D = (d1, d2, d3...)
- Auswerungsfunktion evalD: Model -> Model
- SequenzAequivalenz
- SequenzMinimalitaet (es existiert keine kuerzere Aequivalente Sequenz)
- Aenderungsmetamodell (Burger2014)
Deltabasiert vs Zustandsbasiert
|Delta|Zustand| |---| |Absicht wird besser erfasst|Kann mit generierten Modellen verwendet werden| |Aenderungssequenz muss nicht berechnet werden|minimal (fuer Atomare Aenderungen)| |---contra---|---contra---| |nur bei manuellem Bearbeiten anwendbar|Aenderungssequenz muss ermittelt werden| |nich minimal|Komplexe Aenderungen nur durch Heuristiken| |braucht Werkzeugunterstuetzung|| Bsp: EMFCompare
Verschiedene Schweregrade: |2011|Burger 2010| |---| |model preserving|non-breaking| |safe model migration|breaking resolvable| |unsafe model migration|breking not resolvable|
Aenderungstypen:
- Refactoring: Bijektive Abb ex.
- Konstruktor: Injektive Abb ex.
- Destruktor: Surjektive Abb.ex.
Modellerhaltung
M -> M'
M -> M'
- Model-preserving: M' ist immer noch gueltige Instanz von M
- Model-migrating
- safely: Injektiv
- unsafely: Nicht injektiv
Bidirektionalitaet:
- self-inverse
- inverse: Sequenz+Inverses ergibt ein Refactoring
- safe inverse: Sequenz+Inverses ist model-preserving
Aenderungskatalog:
- Strukturprimitiven
- Erstellen Pakete, Klassen, Attribute, Referenzen
- Loeschen
- Nicht-Struktur-Primitiven
- Umbenennung
- Vererbung
- Abstraktheit
- Komposition
- Spezialisierung/Generalisierung
- Verschiebung von Attrs und Refs entlang Verebungshierarchie
- Aenderung von Oberklassen entlanf Vererbungshierarchie
- Vererbung
- Pull up/push down feature (Attr, Ref)
- Extract/Inline super class
- Fold/unfold superclass
- Extract/inline subclass
- Delegation
- wie Vererbung, nur ohne super/sub class
- Move feature over reference
- Collect feature over reference
- Ersetzung
- Enum 2 subclass, subclass 2 enum
- Reference to class, class to reference
- Inheritance to delegation, delegation to inheritance
- identifier 2 reference, reference 2 identifier
- Zusammenfuehren/Aufteilen
- Merge features
- Split reference by type
- Merge/split class
- Merge enumerations
- IT in Autos größter Innovationsfaktor
- Proprietäre Lösungen
- OS, Protokolle, Tools, Architektur...
- Lebenszyklus Management
- 90% Neuentwicklung zwischen Modellen
- Traditionell unabhängige Systeme, jetzt mit Interaktion:
- Montage wird zu System-Integration
- Software als treibender Kostenfaktor
- Potential:
- Anforderungen aufteilen in funktional/nicht-funktional
- Abhängigkeiten modellieren
- Qualitätseigenschaftren modellieren
- Dekomposition des Systems
- Integriertes Hardware-Software Modell
- Anforderungen
- Verhalten: Funktionales Modell/Verhaltensmodell
- Struktur: Strukturmodell/Komponentenmodell
- Parameter: Performance-Modell
- ...
- UML-2 Profil
Ziele:
- Gemeinsames Verständnis von Anforderungen und Entwurf
- Komplexe Systeme: Trennung nach Belangen und Sichten
- Qualität des Entwurfs
- SysML verwendet die meisten UML-Diagrammtypen
- SysML modifiziert
- Aktivitätsdiagramm
- Blockdiagramme
- SysML fügt hinzu
- Zusicherungsdiagramm
- Anforderungsdiagramm
- Diagrammrahmen
- Aktivitaetsdiagramm: Erweiterung um Ports (Zustands- In/Output)
- AutoSar
- East-ADL
- EATOP
- Amalthea
- Ascet
- Matlab/Simulink
- MDSD Prozess-agnostisch
- Keine Pflichtmodelle
- Kein vorgegebenes Abstraktionsniveau
- Keine Modellverknuepfung
- Kein Allheilmittel, kann scheitern
- Gruende:
- Organisatorisch, Management, Sozial (nicht Technisch)
- Tipps:
- Kleines Projekt als Start
- Management muss unterstuetzen
- Berater
- Problemfelder kennen
- Neue Rollen
- Modellierung nach Manifest ueberfluessig
- Nicht ausfuehrbar
- nicht testbar
- reine Doku
- Mehraufwand bei Updates
- DDD aehnlich zu MDSD (DSLs!)
- Test Driven Development: Tests aus Modellen ableitbar
- Erstellung der Domänenarchitektur
- Domaene
- DSL entwerfen, Editor entwerfen, Demo fuer DSL
- Transformation
- Basieren auf DSL
- Abgeleitet von Referenzimpl.
- Referenzimplementierung
- Verstehe Entwurfsalternativen
- Infrastruktur muss feststehen
- Vollstaendig bzgl.
- Domaene
- Genau 1 Typ pro Element
- Instanz-Von zur Ebenendefinition
- Feste Anzahl an Ebenen
- Clabjects
- ECore
- Level-Agnostic Modeling Language (LML)
- Tool: Melanee
- Werbung
- Verschiedene Ansichten: Viewpoints
- Terminologie:
- Standpunkt (viewpoint)
- Perspektive eines Concerns
- Sichttyp (view type)
- Klassen, die in SIcht enthalten sein koennen
- Sicht (view)
- Anwendung von Sichttyp auf System
- Menge von Instanzen in konkrteter Syntax + Layout
- Standpunkt (viewpoint)
- Das grosse ALLES
- WIe konstruiert man das?
- Versionierung?
- View-cenTRic engineering Using a VIrtual Underlying Single model
- SUM-Konstruktion ueber bestehendem Projekt (Java + UML)
- Projektionen auf Sichten
- Editierbarkeit
- MIR-Sprache
- Synchronisation
- Ko-Evolutions-Ansatz
- Alte Modelle refactorn oder atomares erstellen "simulieren|
- Java to EMF-Modell
- Fuer Java 5