Die Object Constraint Language

Ähnliche Dokumente
Einschub - Die Object Constraint Language in UML Oder: Wie man Zusicherungen in UML angibt

Formale Modellierung Vorlesung 10 vom : Formale Modellierung mit UML und OCL

Einstieg in die Informatik mit Java

NACHRICHTENTECHNISCHER SYSTEME

FACHHOCHSCHULE MANNHEIM

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Die Object Constraint Language der UML

Vorlesung "Software-Engineering"

Formale Systeme. Object Contraint Language. Prof. Dr. Bernhard Beckert WS 2010/2011 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Einstieg in die Informatik mit Java

Automatisierung industrieller. Workflows. Teil B: Die Spache UML

Begriffe 1 (Wiederholung)

Repetitorium Informatik (Java)

Objektorientierte Programmierung

Einstieg in die Informatik mit Java

Thema 2 Acceleo-MTL- Sprachmittel

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Formale Systeme. Object Contraint Language. Prof. Dr. Bernhard Beckert WS 2009/2010 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Formale Systeme. Object Contraint Language. Prof. Dr. Bernhard Beckert WS 2010/2011 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Unified Modeling Language (UML)

Ersetzbarkeit und Verhalten

1 Klassen und Objekte

Hausarbeit zum Thema. Ligaverwaltung. im Rahmen der Lehrveranstaltung. Entwurf von Informationssystemen. bei Prof. Dr.

UML -Klassendiagramme

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einführung in die Programmierung

Client-Server-Beziehungen

Geschachtelte Klassen

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

OCP Java SE 8. Lambda

12 Abstrakte Klassen, finale Klassen und Interfaces

Warum Programme Verträge schließen sollten

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Methoden und Wrapperklassen

Validation und Quick Fixing mit Xtend. 3. Dezember 2014

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Einstieg in die Informatik mit Java

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Jason T. Roff UML. IT Tutorial. Übersetzung aus dem Amerikanischen von Reinhard Engel

Einstieg in die Informatik mit Java

Objektorientierte Modellierung

Software Engineering Klassendiagramme Einführung

Qualitätssicherung in der Softwareentwicklung

Ersetzbarkeit und Verhalten

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Pakete Software Entwicklung 1

Referat UML + OCL Referenten: Achour Elmrabti Britta Porsche

Software Engineering Klassendiagramme Assoziationen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Einführung in die Informatik

Vererbung und Polymorphie

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Web-Techniken Einführung in JavaScript

Programmieren in Java -Eingangstest-

Modellgetriebene Softwareentwicklung bei der IBYKUS AG

5.5.8 Öffentliche und private Eigenschaften

Java: Eine kurze Einführung an Beispielen

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

Algorithmen und Datenstrukturen

Kapitel 6. Vererbung

Object Constraint Language (OCL) By Example

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Einführung in die Programmierung

Einführung in die Programmierung für NF MI. Übung 07

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Vererbung, Polymorphie

3 Objektorientierte Konzepte in Java

Javakurs für Anfänger

Modellierungstipps für die Anwendungsfallmodellierung

Inhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2

JAVA KURS COLLECTION

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Spezifikation und Test: Zusicherungen in Klassendiagrammen

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Einstieg in die Informatik mit Java

Besprechung. Übung 1 Software Engineering

Übungsaufgaben UML Zertifizierung Fundamental-Level

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Klausur Formale Systeme Fakultät für Informatik WS 2009/2010. Prof. Dr. Bernhard Beckert. 18. Februar 2010

Objekte haben eine eigene Notation, also Schreibweise, beim Aufruf:

Kapitel 6. Vererbung

Einstieg in die Informatik mit Java

Einführung in die Programmierung II. 5. Zeiger

Besprechung. Übung 1 Software Engineering

Funktionale Programmiersprachen

Rückblick: Entity-Relationship-Modell

Vorlesung Programmieren

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Unified Modelling Language

Softwaretechnik WS 16/17. Übungsblatt 01

Einstieg in die Informatik mit Java

Informationsverarbeitung im Bauwesen

Vorlesung Programmieren. Unified Modeling Language (UML) Unified Modeling Language (UML) Unified Modeling Language (UML)

Vorlesung Programmieren

Transkript:

Die Object Constraint Language Eine Einführung im Rahmen des SoPras Frank Broemel 1

Gliederung 1. Einleitung 2. Ein Beispiel 3. Zusammenfassung der Erkenntnisse und Systematisierung 4. Literatur 5. Verwendung der OCL im SoPra 2

Die Integration in das SoPra-Vorgehensmodell Bisher: Anforderungsdefinition Analyse Entwurf Entwurf: Basis für die Verteilung der Implementierung Fragen dabei: a) Wie soll kommentiert werden? b) Wie drückt man sich unmissverständlich aus? (Gruppenmitglieder müssen Kommentare eindeutig interpretieren können) Antwort kann OCL sein Hinweise für das Testen 3

Was ist die OCL? Constraints sind Bedingungen Formen von Constraints: Invarianten : Bedingung, die immer erfüllt sein muss Vorbedingungen : Bedingung, die vor Ausführung einer Methode erfüllt sein muss Nachbedingungen : Bedingung, die nach Ausführung einer Methode erfüllt sein muss Intuitive, an Mathematik orientierte, Sprache Beschreibt nur, nicht zur Implementierung gedacht Textuelle Ergänzung zu Klassendiagrammen 4

Ein Beispiel Kunden erhalten Karten von verschiedenen Firmen im Rahmen eines Kreditpunkteprogramms: Datum Kunde 0..* programm name: String titel: String istmann: Boolean gebdatum: Datum alter: Integer anzkarten: Integer 0..* besitzer 1 KreditPunkteProgramm neuekarte(ku: Kunde, ka: Karte) neuerkunde(k: Kunde) 1 karten 0..* 0..* liegtvor( d: Datum ): Boolean Karte nummer: Integer besitzername: String gültigvon: Datum gültigbis: Datum getalter(): Integer 5

Beispiel: Invarianten für Attribute Aussage: Kunden müssen mindestens 18 sein : Context: Kunde alter 18 Klasse Kunde aus dem Modell Attribut von Kunde Context gibt die bezogene Klasse aus dem Modell an Danach stehen Attribute und Methoden der Klasse zur Verfügung bilde booleschen Ausdruck (Constraint) 6

Beispiel: Invarianten für Attribute, 2 Auch Attribute, deren Typen Klassen sind, sind zugreifbar: Context: Karte gültigvon.liegtvor(gültigbis) Datum Methode von Datum Über Punktnotation ist Zugriff auf Methoden und Attribute von Datum möglich Achtung bei Methoden: In Constraints dürfen nur reine Abfragen verwendet werde, d.h. Methoden, die Klasse nicht modifizieren 7

Beispiel: Invarianten für assoziierte Klassen Aussage: Name auf der Karte soll der gleiche sein, wie der Name des zugehörigen Kunden Context: Karte besitzername = kunde.name Attribut von Kunde kleingeschriebener Klassenname alternativ: = besitzer.name Auf assoziierte Klassen mittels kleingeschriebenem Klassenoder Rollennamen zugreifen Dann Methoden und Attribute der assoziierten Klasse wieder über Punktnotation zugreifbar 8

Beispiel: assoziierte Klassen und Mengen Beispiel oben: Karte gehört zu genau einem Kunden Bezug ist klar Was, wenn Multiplizität größer 1 ist? Context: Kunde karten... Menge von Objekten Keine Aussagen über einzelne Objekte möglich, aber über Menge Auf Mengen sind spezielle Operationen definiert, auf die mittels Pfeilnotation zugegriffen wird Aussage: Ein Kunde darf nicht mehr als 5 Karten besitzen Context: Kunde kartenfisize 5 Damit auch Aussagen über die Elemente möglich (s.u.) 9

Beispiel: Vor- und Nachbedingungen Aussagen über das Verhalten einer Methode Aussage: Ein Kunde soll nicht mehr als 5 Karten bekommen Klasse, die Methode enthält Methodenname mit Parametern Context:KreditPunkteProgramm::neueKarte(ku:Kunde,ka:Karte) pre: ku.anzkarten < 5 post: -- Parameter der Methode sind direkt zugreifbar Attribute und Methoden der Klasse sind mittels self.<attribut- / Methodenname> zugreifbar 10

Beispiel: Nachbedingungen Besonderheit bei Nachbedingungen: Zugriff auf den Zustand eines Teilausdrucks vor dem Methodenaufruf mit Suffix @pre: Context:KreditPunkteProgramm::neueKarte(ku:Kunde,ka:Karte) pre: ku.anzkarten < 5 post: ku.anzkarten = ku.anzkarten@pre + 1 Wert von ku.anzkarten vor Aufruf von neuekarte(...) Wert von ku.anzkarten nach Aufruf von neuekarte(...) Wichtig bei Methoden, die Klasse modifizieren @pre bezieht sich nur auf den direkt vorangehenden Teilausdruck. Der Rest des Ausdrucks bezieht sich auf die Objekte nach dem Methodenaufruf. 11

Zusammenfassung der Erkenntnisse und Systematisierung Gesehen: Constraints beziehen sich als Invarianten oder Vor- / Nachbedingungen auf ein Modell Verbindung zum Modell wird über den Kontext hergestellt Im folgenden: 1. Kontext 2. Aufbau der Constraints - Typen - Operationen 12

Kontext für Invarianten Verbindung zum Modell wird über den Kontext hergestellt: a) Kontext für Invarianten: eine Klasse Syntax: Context: <Klassenname> <Constraints> Danach sind die sog. Eigenschaften der Klasse Attribute Methoden, welche keine Seiteneffekte haben, Assoziierte Klassen in den Constraints verwendbar Schlüsselwort self zum expliziten Bezug auf Klasse (ist optional, Beispiel folgt) Invariante muss für jede Instanz der Klasse gelten 13

Kontext für Vor- / Nachbedingungen b) Kontext für Vor- / Nachbedingungen ist bezogene Methode: Syntax: Context:<Klassenname>::<Methodenname> (<Parm1>:<Klasse1>...):<Ergebnistyp> pre: <Constraints für Vorbedingung> post: <Constraints für Nachbedingung> Danach sind übergebene Parameter Ergebnis der Methodenauswertung mittels Schlüsselwort result Eigenschaften der umgebende Klasse mittels Schlüsselwort self. zugreifbar. 14

Kontext für Vor- / Nachbedingungen, 2 Beispiel: Context: Kunde::getAlter():Integer pre: -- post: result = self.alter Dieses Beispiel dient nur zur Veranschaulichung der Syntax. Da getalter() nur einen Wert abfragt (also eine der zuvor definierten sog. Eigenschaften ist) und keine Vorbedingung hat, wäre eine Invariante hier erlaubt und auch besser geeignet: Context: Kunde getalter() = alter 15

Wie wird ein OCL-Constraint formuliert? Ein OCL-Constraint wird sukzessive aus OCL-Ausdrücken aufgebaut Starten im Kontext. Implizit ist self mit umgebender Klasse als Typ vorhanden Jeder OCL-Ausdruck hat einen Typ, der bestimmt, wie der Ausdruck weiter ausgebaut werden kann Ein OCL- Ausdruck ist ein OCL-Constraint er ist vom Typ Boolean Context: Karte self.besitzer.name = besitzername Ausdruck vom Typ Boolean Ausdr. vom Typ Karte Darf auf Eigenschaften von Karte zugreifen (self ist optional) Ausdr. vom Typ Kunde Darf auf Eigenschaften von Kunde zugreifen Ausdr.vom Typ String Darf auf String- Operationen zugreifen 16

Es gibt 3 Arten von Typen Es bleibt zu sagen, 1. Welche Typen gibt es? 2. Welche Operationen erlauben sie? Ad 1.: Basistypen Benutzerdefinierte (oder Modell-) Typen Collections Set Bag Sequence Rest des Vortrags: Hauptsächlich Vorstellung der erlaubten Operationen mit Angabe des Ergebnistyps nach Anwendung 17

Ähnlich wie in Java: Real - Integer Boolean - String Basistypen Besonderheit: Integer ist Subtyp von Real Erlaubte Operationen: analog zu Java, Details finden sich in UML-Spezifikation [OMG 99, Kap.7] Exemplarisch auf Boolean eingehen: 1. not a a or b a and b a xor b a implies b 2. a = b a <> b a, b sind dabei boolesche Ausdrücke Ergebnistyp: Boolean 18

Basistypen, 2 3. if <boolescher Ausdruck > then < Ausdruck1> else < Ausdruck2> endif Ergebnistyp: Typ von Ausdruck1 oder Typ von Ausdruck2 Beispiel: Context: Kunde titel = ( if istmann then "Herr" else "Frau" endif ) 19

Benutzerdefinierte Typen Klassen aus dem Klassendiagramm Angesprochen werden Objekte: als Kontext über Klassennamen als assoziierte Objekte mittels kleingeschriebenem Klassenbzw. Rollennamen Zugriff auf sog. Eigenschaften über Punktnotation Eigenschaften sind: Attribute Ergebnistyp = Typ des Attributs Methoden, sofern sie die Klasse nicht modifizieren (Queries) Bei Zugriff müssen Klammern immer mitangegeben werden. Ergebnistyp = Ergebnistyp der Methode Assoziierte Klassen Ergebnistyp bei Multiplizität 1: assoziierte Klasse Bei anderer Multiplizität: sog. Collection (s.u.) 20

Set Bag Collectionarten - bekannte mathematische Menge: jedes Element nur einmal - Erhält man immer bei Navigation über eine Assoziation mit Multiplizität größer 1 Context:Kunde kartenfisize < 5 Set von Objekten der Klasse Karte - Multimenge, d.h. Elemente können mehrfach vorkommen - Erhält man bei Navigation über mehr als eine Assoziation mit Multiplizität größer 1 Context:KreditPunkteProgramm kunde.kartenfisize Bag von Karten, die von Kunden besessen werden 21

Collections Collection ist abstrakter Oberbegriff und wird selbst wird nicht verwendet Auf Collection-Operationen wird mit Pfeilnotation zugegriffen Sets und Bags können auch explizit angegeben werden: - Set{1, 4, 2} - Bag{1, 1, 4, 4, 4, 2} Collections können keine anderen Collections enthalten: Set { Set{1, 2}, Set{3, 4} } : gibt es nicht statt dessen: Set{1, 2, 3, 4} Typ einer Collection - Konkreter Typ hängt vom Typ der Elemente ab: Set{1,2} hat Typ Set(Integer) Set(Real), wie z.b. Set{1.0, 2.0} - T Subtyp von T Set(T) ist Subtyp von Set(T ) 22

Collection: Bag Beispiel-Objektdiagramm: (Assoziationen karte1.1 von Karte zu kunde1 karte1.2 KreditPunktePrgm. kreditpunkte- wurden programm kunde2 karte2.1 ausgelassen) karte2.2 Context:KreditPunkteProgramm kunde.karten... Bag {karte1.1, karte1.2, karte2.1, karte2.2} Set {kunde1, kunde2} 23

Collections: Anfragen an eine Collection Liste der Operationen mit Ergebnistyp und kurzer Erläuterung size : Integer Anzahl der Elemente Bag{1, 1}fisize = 2 count(<element>): Integer Wie oft kommt das Element vor? Bag{1, 1}ficount(1) = 2 includes(<element>) : Boolean includesall(<collection>) : Boolean Kommt Element bzw. kommen alle Elemente der Collection vor? isempty, notempty : Boolean 24

Collections: Anfragen an eine Collection, 2 Es stehen auch Quantoren zur Verfügung: exists(<boolescher Ausdruck>) : Boolean Existiert ein Element, für das die boolesche Expression zu true ausgewertet werden kann? forall(<boolesche Ausdruck>) : Boolean Kann die boolesche Expression für alle Elemente zu true ausgewertet werden? Context Kunde kartenfiforall(gültigvon.liegtvor(<heute>)) 25

Collections: Erzeugen neuer Collections Elementtypen der Sets bzw. Bags identisch oder Subtypen Ergebnis ist neue Collection Set und Bag sind ineinander überführbar: asset: erzeugt eine Set, die die Elemente der ursprünglichen Bag nur einmal enthält. (d.h. Duplikate werden entfernt) Beispiel: Bag{1,1,2}fiasSet = Set{1,2} asbag: erzeugt eine Bag, die die gleichen Elemente wie die ursprüngliche Set enthält. Beispiel: Set{1,2}fiasBag = Bag{1,2} 26

Collections: Erzeugen neuer Collections, 2 Liste weiterer Operationen mit kurzen Erläuterungen union: Vereinigung von Set und/oder Bag Ergebnistyp: a) Set beide Collection sind Sets b) Bag eine Collection ist Bag Beispiel: Set{1,2}fiunion(Set{1,3}) = Set{1,2,3} Bag{1,2}fiunion(Set{1,3}) = Bag{1,1,2,3} intersection: Schnitt von Set und/oder Bag Ergebnistyp: a) Bag beide Collection sind Bags b) Set eine Collection ist Set Beispiel: Bag{1,1}fiintersection(Bag{1,1,1,1}) = Bag{1,1} Set{1,2}fiintersection(Bag{1,1,1}) = Set{1} 27

Collections: Erzeugen neuer Collections, 2 including(element): Hinzufügen eines Elements Entspricht der Vereinigung (im obigen Sinne) mit einelementiger Set excluding(element): Entfernen eines Elements Ergebnistyp: unverändert Im Fall einer Bag, werden alle Vorkommen des Elements entfernt Beispiel: Bag{1, 1, 2} fi excluding(1) = Bag{2} 28

Kommentare Kommentare in OCL: -- <Kommentartext, bis maximal Ende der Zeile> 29

Literatur Literatur zur OCL: [WK 99] Jos Warmer, Anneke Kleppe. The Object Constraint Language. Addison Wesley, Reading, Massachusetts, 1999. Vortrag basiert im Wesentlichen auf diesem Buch. [OMG 99] OMG. UML 1.3 Specification. 1999. http://www.omg.org/technology/documents/formal/unified_modeling_language. htm Kapitel 7 widmet sich auf 20 Seiten der OCL. Knappe und präzise Beschreibung der Sprache. [HK 99] Martin Hitz, Gerti Kappel. UML @ Work. dpunkt.verlag, 1999. Das gesamte Buch ist als Einstieg in die UML und in das Modellieren zu empfehlen. Das Kapitel zur OCL ist sehr kompakt und geht schnell über das hier gezeigte hinaus. 30

Verwendung der OCL im Rahmen des SoPras Wie soll OCL eingesetzt werden? Möglichst viele Kommentare durch OCL-Constraints ersetzen Auch offensichtliche Dinge angeben Nicht zu kompliziert Keine langen Strecken durch das Klassendiagramm laufen Es muss nicht alles mittels OCL beschrieben werden Einsatz von OCL soll Verständlichkeit erhöhen Abgabe OCL-Constraint auf separatem Dokument, das Bezug auf ein Klassendiagramm nimmt, abgeben Alternativ: Constraints in Together angeben und Html- Dokumentation abgeben Keine Werkzeugunterstützung Korrektheitsüberprüfung durch Betreuer 31