UML Modellierung und deklarative Programmierung mit Attributen Achim Oellers newtelligence AG Voraussetzungen   Grundkenntnisse in OOA/OOD Objektorientierte Programmierung.

Download Report

Transcript UML Modellierung und deklarative Programmierung mit Attributen Achim Oellers newtelligence AG Voraussetzungen   Grundkenntnisse in OOA/OOD Objektorientierte Programmierung.

UML Modellierung und deklarative Programmierung mit Attributen

Achim Oellers newtelligence AG

Voraussetzungen

 

Grundkenntnisse in OOA/OOD Objektorientierte Programmierung

Agenda

   

Skizze eines Analyseprozesses

• • • •

UML Grundlagen

Statische und dynamische Modellierung Entsprechungen zwischen Modellierung und Programmkonstrukten Stereotypen und Tagged Values Metamodellerweiterungen Modellierung in Visual Studio .NET

• •

Custom Attributes Konzepte und Umsetzung in C# Ansätze für ein Applikationsframework Codegenerierung aus Visual Studio .NET

Begriffe und Konzepte

   •

Objekte Physische oder konzeptionelle Begriffe

• • •

Zustand Zustand eines Objektes Auf relevante Dinge beschränkt Ist ein Internum

• •

Actors Objekte mit Eigenleben Müssen nicht menschliche Benutzer sein

Begriffe und Konzepte

    • •

Klasse Kategorisierung strukturell identischer Objekte Hat einen Mechanismus zur Erzeugung von Objekten

Instanzen Individuelle Objekte – durch den klasseneigenen Mechanismus erzeugt

Metaklasse Eine Klasse, deren Instanzen Klassen sind

Parametrisierte Klasse Eine Klasse, die zur Erzeugung von Klassen Parameter benötigt

Begriffe und Konzepte

  • • •

Abstrakte Klasse Zusammenstellung unvollständiger Konzepte Wird durch Spezialisierung verfügbar Wird niemals instanziiert

• • • • •

Members Methoden Konstanten Attribute (In .NET: Fields) Exceptions Events

Begriffe und Konzepte

  • •

Interface Physisch: Zusammenstellung von öffentlichen Members Konzeptionell: Semantischer Kontrakt

• •

Aggregation Ein oder mehrere Objekte werden Teil eines anderen

• •

Monolithisch: Struktur ist von außen nicht direkt erkennbar Eventuell durch Interface zugreifbar

Begriffe und Konzepte

   • •

Vererbung Beziehung, in der eine Klasse die Eigenschaften der anderen erhält Einfach oder mehrfach

Spezialisierung Genauere Bestimmung

Generalisierung Allgemeinere Bestimmung

Software Engineering Prozess

       

Fachleute und Softwareentwickler sprechen unterschiedliche Sprache Übersetzungen werden notwendig Übersetzungen machen Probleme Gemeinsame Sprache wird benötigt Eine grafische Sprache mit wenigen Elementen Umsetzungen statt Übersetzungen Automation wo möglich Aber: „Bunte Bildchen“ ohne definierten Prozess sind sinnlos!

Probleme der Anforderungsanalyse

      

Qualität ist Erfüllung von Anforderungen Ein Fehler ist eine Nichterfüllung einer Anforderung

Was bedeutet "Nichterfüllung"?

Messbarkeit ist gefordert Anforderungen müssen schriftlich vorliegen

Müssen mit Akzeptanzkriterien versehen sein Exemplarische Kommentare und Beweisgrundlage Kunde ist für Korrektheit der Anforderungen verantwortlich Auftragnehmer ist für die Konsistenz der Anforderungen verantwortlich

Weitere Probleme

 • • • • • • • •

Typische Probleme bei Anforderungsaufnahme Auslassungen Widersprüche Mehrdeutigkeiten Mehrfachdefinitionen Ungenauigkeiten Zu viel Design Prioritäten nicht definiert Irrelevante Informationen

Pre-Analysis

      •

Beschreibe die Aufgabe

Normalerweise : Eine wohlbekannte Lösung für ein wohlbekanntes Problem zu automatisieren

Keine (software-)technischen Termini benutzen Nur die fachlichen Begriffe

Benutze nur verlässliche Informationsquellen Achte auf angemessenes Antwortverhalten Das System muss alle Anforderungen abbilden Das System soll keine Funktionalität ausserhalb der Anforderungen beinhalten "Einfach – kurz – klar"

Problem-Dekomposition

   

Für jedes Problem gibt es ein angemessenes Abstraktionsniveau

• • •

Finde Subjekte, Prädikate, Objekte : Use Cases Welche Aufgaben soll das System erfüllen?

Bezeichnet eine für den Benutzer sichtbare Funktion Erfüllt ein konkretes Ziel des Benutzers

Beachte die 7 ±2-Regel Wird ein Use Case zu groß – unterteile ihn Dies alles hat nichts mit der Benutzeroberfläche zu tun

Analyse-Prozess

Anforderungen Test Szenarien Akzeptanz kriterien Simulations Modell Integrations Modell

Anforderungen

   

Beschreiben ein einzelnes Leistungsmerkmal

Prosa in der natürlichen Sprache des Kunden Er verantwortet die Korrektheit Grafiken und Formeln wenn nötig

Beispiel: „Jeder Kunde hat ein bestimmtes Kreditlimit."

Beschreibt die Welt des Benutzers – nicht ein Softwaresystem!

Akzeptanzkriterien

        

Beschreiben einen Test, ob eine Anforderung erfüllt ist oder nicht Ist ein Beispiel Ist ein Testfall Ist rechtlich bindend Wenn alle Akzeptanzkriterien erfüllt sind, ist das System o.k. Jedes AK bezieht sich auf eine einzelne Anforderung Jede Anforderung hat mindestens ein Akzeptanzkriterium AKen müssen so konkret wie möglich sein – keine Interpretationsmöglichkeiten Bloße Anerkennung einer Anforderung ist nicht genug

Akzeptanzkriterium

 • • •

Struktur:

Situation: „Kunde Schmitz hat zwei Kredite, einer über 10K€, einer über 20K€; sein Kreditlimit ist 50K€. "

Aktion: "Schmitz beantragt einen weiteren Kredit über 15K€."

Erwartetes Ergebnis: Kunde Schmitz bekommt den Kredit, und hat anschließend drei Kredite mit einer Gesamtsumme von 45K €."

Offene Fragen

   

Probleme zeigen sich oft bei der Integration der Anforderungen Analyst muß Lösung anfragen Lösung kann angenommene Antwort enthalten

Rückfrage ist terminiert Angenommene Antwort „wird wahr“

 • •

Beispiel: Frage: „Eine Anforderung nimmt ein gemeinsames Kreditlimit für alle Kunden an, eine andere verschiedene Limits je nach Kunde. Was ist richtig? " Angenommene Antwort: „Kreditlimits sind je nach Kunde verschieden."

Integrationsmodell

   

Ein OOA-Modell mit allen Anforderungen Integration der verschiedene Aspekte der Dinge Sollte mit Hilfe eines Werkzeugs erstellt werden Identifikation von Klassen und Assoziationen

Simulationsmodell

  

Lauffähiger Abkömmling des Integrationsmodells Ist keine Zeitverschwendung!

Ist der einzige Weg, Übereinstimmung mit den Anforderungen sicherzustellen

 

Sollte von einem Werkzeug generiert werden

Lasse Testszenarien dagegen laufen Abgeleitet von Akzeptanzkriterien

Wenn es funktioniert, ist kein Platz mehr für fachliche Fehler

Grafische Modellierung

   

Darstellung des Integrationsmodells Grafik kann nur grobe Struktur zeigen Hinter der Grafik ist mehr Werkzeuge ermöglichen erst die Arbeit

Auch hier gilt: Einfach, kurz, klar!

U M L

    

UML kann mit jedem Prozessmodell und jeder Methode eingesetzt werden

Mächtiges, erweiterbares Modell Definiert diverse verschiedene Diagramme Weit verbreitet, gut bekannt Viele Publikationen und Kommentare Gute Werkzeugunterstützung auf allen Plattformen

Architektur

 

UML ist definiert auf vier verschiedenen Ebenen Jede Ebene ist eine Instanz der darüberliegenden Meta-Metamodel Layer Metamodel Layer Model Layer User Model Layer

Diagrammtypen

     •

User Model Use Case Diagramme

Structural Model Klassen- und Objektdiagramme

• •

Behavioral Model Sequenz-, Kollaborations-, Zustandsdiagramme Aktivitätendiagramme

Implementation Model Komponentendiagramme

Environment Model Verteilungsdiagramme

Use Cases

  • • •

Actors Menschliche Benutzer Externe Systeme Objekte, die Messages generieren

Use Cases

• •

Können untereinander Beziehungen haben Extends Uses

 • •

Achtung: Use Cases stellen einen funktionsorientierten Blick auf das System dar Strukturiere das Problem - nicht das System!

Use Case Diagram

Sachbearbeiter

Auftragsbearbeitung

Auftrag erteilen Status abrufen Internen Auftrag abwickeln «extends» Auftrag abwickeln Kunde

Klassendiagramme

  

Statische Sicht auf Struktur und Beziehungen der Dinge

• •

Beschreibt Klassen

Members Attribute, Methoden

• • • •

Eigenschaften Stereotyp Abstrakt oder instanziierbar Sichtbarkeit Und mehr...

• • •

Beziehungen zwischen den Klassen Assoziationen Aggregationen Generalisierungen/Spezialisierungen

Klassenbeschreibung

Stereotyp Klassenname Attribute Sichtbarkeit Methoden

«implementation class»

Person

-personID : unsigned long -surname : CString -givenName : CString -middleInitial : char -streetAddress : CString -postCode : CString -countryname : CString #eMailAddress : CString +Person() +PersonInfo()

Assoziationen

    

Beziehung zwischen (zwei) Klassen Beide Enden bezeichnen jeweils eine Rolle die die Klassen in der Beziehung einnehmen Kann uni- oder bidirektional sein Haben eine bestimmte Kardinalität auf beiden Seiten Navigierbare Rollen und Kardinalitäten Arbeitgeber

-beschäftigt -arbeitet

Arbeitnehmer

1 1..*

Assoziationsklassen

 

Assoziationen mit eigenen Eigenschaften Modelliert als Klassen Arbeitgeber

1 -beschäftigt

Arbeitsverhältnis

1..* -arbeitet

Arbeitnehmer

Aggregationen

  •

Integrale Bestandteile werden aggregiert Üblicherweise nur notwendige Teile Aggregation kann „shared" oder "composite„ sein Datum

* -

Tag

1 1 * 1

Monat

*

Jahr

Generalisierung/Spezialisierung

 

Stellt Vererbungsbeziehungen dar Interfaces werden mit besonderem Symbol dargestellt Tier

IHund +bellen()

Basset Bernhardiner

Assoziationsqualifizierer

 

Qualifizierer sind Eigenschaften der Assoziation Dienen zur Bestimmung der Art des Verhältnisses Bank

Kontonummer * 0..1

Kunde

Klassediagramm

Person

-personID : unsigned long -surname : CString -givenName : CString -middleInitial : char -streetAddress : CString -postCode : CString -countryname : CString -eMailAddress : CString +Person() +PersonInfo()

Applicant

-worksforCompany : CString -experience : CString -reference1 : CString -reference2 : CString -reference3 : CString +Applicant() +ApplicantInfo() +MakeApplication() 1 -is taught by 1 -is made by

Employee

-jobType : CString -officeNr : unsigned long -department : CString -division : CString -jobTitle : CString -reportsto : unsigned long -headsDept : CString -headsDivision : CString -mobileNr : CString -birthDate : unsigned long +Employee() +GetCurrentAge() +EmployeeInfo() -teaches 0..*

CourseSession

-courseSessionID : unsigned long -courseDate : unsigned long -courseID : unsigned long -courseLocation : CString +CourseSession() +CourseSessionInfo() 1 -is in 0..* -is filled by -makes 0..*

CourseRegistration

-courseRegistrationDate : unsigned long -completionFlag : bool -confirmedDate : unsigned long +CourseRegistration() +CourseRegistrationInfo()

Utilities

 

Zusammenfassung von globalen Konstanten und Methoden in Form einer Klasse Enthält nur statische Methoden

+Pi «utility»

Math

+Sin() +Cos()

Erweiterungsmechanismen

  • • •

Einfache Erweiterungen Stereotypen Tagged Values Constraints Metamodellerweiterungen

Stereotypen

    

Einfachste Form der UML-Erweiterung Kategorisiert Klassen, Attribute, Methoden Führt neue Modellelemente ein Einige vordefinierte Stereotypen: <>, <> Werkzeuge erlauben in der Regel völlig freie Definition

Tagged Values

   

Schlüssel-Werte-Paar Kann jedem Modellelement hinzugefügt werden Können frei definiert werden Haben standardmäßig keinerlei Auswirkung auf Codegenerierung

Metamodellerweiterung

     Beschreibung Vorausgesetzte Erweiterungen • • • • • • Stereotypen Name Metamodell-Klasse (die erweitert wird) Semantiken Syntax (Notation) Icon Constraint Property Tagged Value Property • • Well-formedness Regeln Generalisierung Assoziation Kommentare

Packages

    

Jede Klasse gehört genau einem Package an Referenzierung einer Klasse innerhalb desselben Package ist unkompliziert Benutzung einer Klasse aus einem anderen Package induziert Abhängigkeit Ziel sind minimale Abhängigkeiten Nur “public”-Klassen können von ausserhalb des Packages referenziert werden

Package Diagramm

Design Patterns

  

Beschreiben die technische Sicht auf ein fachliches Detail Sind wohldokumentierte Teillösungen für wiederkehrende Probleme Werden erst in der Designphase angewandt

Singleton

Stelle sicher, dass es nur eine Instanz von einem Objekt geben kann

Singleton

-theInstance : Singleton +getSingleton() : Singleton

Decorator

Füge Funktionalität dynamisch hinzu

Component

+Operation()

ConcreteComponent

+Operation()

ConcreteDecorator

-additionalState +Operation()

Decorator

+Operation() Component

ConcreteDecoratorB

+Operation() +AdditionalOperation()

Composite

 

Baumstruktur, die eine Teil-/Ganzes Beziehung abbildet Funktioniert mit einzelnen Objekten oder Composites

Component

+Operation() +Add(in c : Component) +Remove(in c : Component)

Leaf

+Operation()

Composite

+Operation() +Add(in c : Composite) +Remove(in c : Composite) -Child

Proxy

 

Kontrolliere den Zugriff auf eine Objekt durch einen Stellvertreter

• •

Nützlich als: Remote, virtueller oder Schutz-Proxy Smart References

Subject

+Operation() -TrueSubject

RealSubject

+Operation() 1

Proxy

+Operation()

Command

Kapsele einen Methodenaufruf als Objekt Caller

Command

+Execute()

Receiver

+Action()

ConcreteCommand

-state +Execute()

Observer

 

Definiert eine eins-zu-viele Beziehung zwischen Objekten Änderungen in dem einem Objekt werden an die vielen Objekte signalisiert

Subject

-Observer

Observer

+Signal(in o : Observer) 1 * +Update()

ConcreteSubject

-state +getState() +setState() 1 -Subject *

ConcreteObserver

-state +Update()

State

Dynamische Verhaltensänderung in Abhängigkeit vom Zustand

Context

-State

State

+Operation() * 1 +Edit()

ConcreteStateA ConcreteStateB

+Edit() +Edit()

Aktivitätendiagramme

  

Dynamisches Modell Flussdiagramm mit Parallelflüssen und Synchronisation

• •

Nützlich für: Paralleles Verhalten Wie verschiedene Use Cases miteinander zusammenhängen

Aktivitäten-Shapes

State entry/CreateAction exit/ReturnAction ReceiveOrder AssignGoodsToItem AuthorizePayment DispatchOrder

Aktivitäten

     •

Create Instantiierung eines Objektes

Call / Local Invocation Synchroner oder asynchroner Methodenaufruf

Return Methodenaufruf mit Rückgabewert

Send Erzeugung eines Signals

Destroy / Terminate Zerstörung eines Objektes

Events

    •

Call Ein Element wird aufgerufen

Signal Ein Element empfängt ein Signal von einem anderen Element

Change Eine bestimmte Bedingung wird wahr

Time Zu einem bestimmten Zeitpunkt oder nach einem bestimmten Intervall

Demo

Weitere Diagrammtypen

  • •

Sequenzdiagramme Zeigt die beteiligten Objekte eines Use Case Veranschaulicht den zeitlichen Ablauf der Messages

• •

Kollaborationsdiagramme Zeigt dieselben Informationen wie das Sequenzdiagramm Betont jedoch die Beziehungen und Abhängigkeiten anstatt Abfolge

Demo

Custom Attributes in .NET

   

Einfache Art die Metadaten eines Sprachelements zu erweitern Ist effektiv eine Spracherweiterung In allen .NET Sprachen verfügbar Sind zur Laufzeit via Reflection auswertbar

.NET Reflection Kernkonzepte

  • • • •

Metadaten Eine Beschreibung für Typen und Code Code (IL) ist Teil der Typenbeschreibung (!) Jedes .NET Objekt kennt seinen Datentyp Metadaten können per Reflection ausgelesen werden.

• •

Dynamisches Typensystem Typen können zur Laufzeit erzeugt werden.

.NET Compiler benutzen .NET um .NET Code zu erzeugen

Metadaten: Typen zur Laufzeit

System.Type

Attribute Events Felder Properties Konstruktoren Parameter Methoden [serializable] public class Person : { public event OnSaveChange onsv; public Date DOB; public string FirstName; public string LastName; public string Name { get { return FirstName + " " + LastName; } } public void Person(string First,string Last) { FirstName=First;LastName=Last; } public bool Save() { System.Type t = this .GetType() ; foreach( FieldInfo f in t.GetFields() ) { ... } }

Wer bist du?

 • •

Zugriff auf Metadaten: System.Object.GetType() Alle .NET Klassen ererben (implizit) System.Object

Verfügbar auf jeder .NET Klasse; auch einfache Typen "Hallo Welt!".GetType(), 243.GetType()

 • •

Explizite Sprachunterstüzung für Metadaten C#, JScript.NET: typeof(…) VB.NET: If TypeOf … Is … Then …

 • •

Feststellen der Typenidentität Typen haben eigene Identität innerhalb der Assembly

Typen können auf Identität verglichen werden if ( a.GetType() == b.GetType() ) { … };

System.Type

  

Zugriff auf Metadaten für jeden .NET Typ Zurückgeliefert von System.Object.GetType()

• • • •

Erlaubt die Erforschung aller Facetten: Kategorien: Einfach, Enum, Struktur oder Klasse Methoden und Konstruktoren, Parameter Felder und Properties, Argumente und Attribute Events, Delegates und Namespaces

Was bist du?

     •

Wert, Interface oder Klasse?

IsValueType, IsInterface, IsClass

Public, Private oder Sealed ?

IsNotPublic, IsSealed

Abstrakt oder Implementation?

IsAbstract Alle möglichen Eigenschaften eines "managed type" Sehr intuitives, einfaches API

Sag mir was du hast!

     •

Finden und Erforschen von Membern MemberInfo: GetMembers(), FindMembers()

Erforschen von Feldern und Properties FieldInfo: GetFields(), PropertyInfo: GetProperties()

Erforschen von Konstruktoren, Methoden und Events GetConstructors(), GetMethods(), GetEvents() Erforschen von Attributen, Implementierten Interfaces, Aufzählen von lokalen Typen, …

Zusammengefasst: Alles was man wissen muss und wissen wollen könnte!

Typen und Instanzen

  

"Type Safety First!"

• •

Typüberprüfung zur Laufzeit C#: if ( o is Customer ) { … } VB: If TypeOf o Is Customer Then … End If

Dynamische Aufrufe durch Reflection

• • •

Unterstützung für spätes Binden: MethodInfo.Invoke() FieldInfo.SetValue() / GetValue() PropertyInfo.SetValue() / GetValue()

MemberInfo

  •

Basisklasse für alle Elementbeschreibungen Felder, Properties, Methoden, etc.

Elementtyp, Name und deklarierende Klasse

MemberInfo MethodBase ParameterInfo FieldInfo EventInfo PropertyInfo MethodInfo ConstructorInfo

FieldInfo, PropertyInfo

  • • •

FieldInfo Felddatentyp und Attribute Statisches Feld or Instanzfeld, Zugriffsschutz

Wert kann durch Reflection gesetzt werden "low-level", Direktzugriff mit SetValueDirect()

• • • • •

PropertyInfo Property Datentyp und Attribute Testmethoden für Lese-/Schreibzugriff "get" und "set" MethodInfo Indexer ParameterInfo Kann "set" und "get" Methoden über Reflection aufrufen

MethodInfo, ConstructorInfo

  • • • •

MethodInfo Rückgabewerte und Attribute Liste aller Parameter als ParameterInfo Array Implementationsinformation im Detail durch Flags Methodenaufruf durch Reflection

ConstructorInfo Gleiche Eigenschaften wie MethodInfo, nur für Konstruktoren

Custom Attributes

  

Die Killer App für Reflection!

Attribute ermöglichen deklaratives Verhalten Attribute erlauben zusätzliche Informationen

[dbcolumn("Address1")] string Street; [dbcolumn("Postcode")] string ZIP;

Mark class as serializable Type.GetCustomAttributes() Map fields to database columns with FieldInfo.GetCustomAttributes()

[serializable] class Person { ...

Definition von Custom Attributes

   •

Ableitung von System.Attribute

...oder spezialisierter Klasse

• •

Definition des Anwendungsbereiches Klassen, Members Interfaces, Assemblies Ansonsten völlig normale Klasse

Abfrage von Custom Attributes

 

Attribute sind auf dem Type einer Klasse definiert

• •

Methode GetCustomAttributes() Instanziiert die Attributobjekte

• •

Kann Attribute filtern Nach exaktem Typ Nach Teilattributhierarchie

Demo

Codegenerierung

     • • •

Visio Enterprise Architect enthält Generatoren C# C++ Visual Basic .NET

Generator erzeugt Visual Studio Projekt Codetemplates steuern die Generierung „Roundtrip“ ist möglich Visual Studio .NET erzeugt Visio-Schema

Demo

Wo gibt’s weitere Info’s?

      

MSDN online

www.microsoft.com/germany/msdn Microsoft .NET Homepage

www.microsoft.com/net MSDN TechTalk-Newsgroup

microsoft.public.de.german.entwickler.techtalk

newtelligence Website

www.newtelligence.com

Rational Website

www.rational.com

Rösch Consulting Website

www.objects9000.com

Bücher

Fowler, Scott: UML Distilled, Addison-Wesley 2000

Wo gibt’s weitere Info’s?

Developer Days are back!

29.11.2001 – Mainz

    

03.12.2001 – Hannover 05.12.2001 – Düsseldorf 06.12.2001 – Karlsruhe 07.12.2001 – Nürnberg 10.12.2001 – München www.microsoft.com/germany/msdn/devdays

Fragen!?

Uff...