Sie sind auf Seite 1von 36

Einf

uhrung

Anwendungsbeispiel

Elemente von OCL

Softwaretechnik 10
Object Constraint Language
Karsten Weicker
HTWK Leipzig

Agent Pryzwarra: Weve got some unique time


constraints.
(Deja Vu, 2006)

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Einfuhrung
Motivation
Klassendiagramme konnen mehrdeutig sein
uber Invarianten komplexe Zusammenhange
beschreiben
Sequenzdiagramme fur grobe Ablaufe
notwendig
uber Vor-/Nachbedingungen Methoden
beschreiben
Code-Erzeugung aus Diagrammen hat noch
nicht richtig uberzeugt
Queries mathematisch beschreiben
model-driven architecture

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Einfuhrung
Object Constraint Language
baut wesentlich auf den Klassendiagrammen
auf
seit 1995
Teil des offiziellen UML-Standards
seit OCL 2.0: auch lokale Variablen und weitere
Sprachkonzepte

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Einfuhrung
Einfaches Beispiel
Grundelemente:
Kontext: Klasse (self)
Formel: logisch-mathematische Formel (hier: als
Invariante)

Flug wird nicht uberbucht.

context Flug
inv: self.passagiere->size()
<= self.plane.sitzanzahl

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Einfuhrung
OCL-Eigenschaften
gemeinsame Sprache fur Abfragen und
Constraints
auf mathematischer Grundlage, aber ohne
mathematische Symbole
stark typisiert
deklarative Sprache

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Einfuhrung

Schuldner muss Eigentumer des Hauses sein.


context Hypothek
inv: self.sicherheit.besitzer = self.schuldner

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Einfuhrung

Jede Person ist eindeutig identifiziert.


context Person
inv: Person::allInstances()->isUnique(sozVersNr)

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Einfuhrung

Fur eine neue Hypothek muss das Einkommen


entsprechend hoch sein.
context Person::neueHypothek(betrag:Geld, haus:Haus)
pre: self.hypotheken.monatsRate->sum()
<= self.gehalt * 0.3

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Einfuhrung

Fur eine neue Hypothek muss das Haus als


Gegenwert ausreichen.
context Person::neueHypothek(betrag:Geld, haus:Haus)
pre: self.sicherheit.wert >=
self.sicherheit.hypotheken.kreditHoehe->sum()

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Anwendungsbeispiel
Verwaltung von Treue/Bonus-Programmen
Kunden konnen Treueprogramm beitreten
fur Einkaufe (Service) werden Punkte
gutgeschrieben
diese konnen gegen andere Leistungen
(Service) eingelost werden
bestimmte Leistungen hangen von einem
ServiceLevel (u.a. auch Farbe der Karte) ab

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Datentypen
Basis-Datentypen: Integer, Real, String
und Boolean
Collection-Typen
ungeordnet
geordnet
eindeutige Elem.
Set
OrderedSet
Duplikate
Bag
Sequence
benutzerdefierte Typen:
Klassen im Klassendiagramm

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Operationen auf Boolean
Notation
a or b
a and b
a xor b
not a
a = b
a <> b
a implies b

Operation
oder
und
exklusives oder
Negation
gleich
ungleich
impliziert

Ergebnistyp
Boolean
Boolean
Boolean
Boolean
Boolean
Boolean
Boolean

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL

Operationen auf Boolean: Beispiel


context Service
inv: self.neuePunkte > 0 implies
not (self.verbrauchtePunkte = 0)

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Operationen auf Integer/Real
Notation
a = b
a <> b
a < b
a > b
a <= b
a >= b
a + b
a - b
a * b
a / b

Operation
gleich
ungleich
kleiner
groer
kleiner-gleich
groer-gleich
plus
minus
multipliziert
dividiert

Ergebnistyp
Boolean
Boolean
Boolean
Boolean
Boolean
Boolean
Integer/Real
Integer/Real
Integer/Real
Real

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL

Operationen auf Integer: Beispiel


context Kundenkarte
inv: self.besitzer.alter() >= 18

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Operationen auf Integer/Real (Forts.)
Notation
a.mod(b)
a.div(b)
a.abs()
a.max(b)
a.min(b)
a.round()
a.floor()

Operation
modulo
ganzzahl. div.
absoluter Wert
Maximum
Minimum
gerundet
abgerundet

1.175 * (-8.9).abs() - 10 = 0.4575


33.7.min(12) = 12.0
(-2.4).floor() = -3

Ergebnistyp
Integer
Integer
Integer/Real
Integer/Real
Integer/Real
Integer
Integer

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Elemente von OCL


Operationen auf String
Notation
s.concat(s2)
s.size()
s.toLower()
s.toUpper()
s.substring(i,k)
s = s2
s <> s2

Operation
Konkatentation
Lange
in Kleinbuchst.
in Grobuchst.
Teilstring
gleich
nicht gleich

Ergebnistyp
String
Integer
String
String
String
Boolean
Boolean

Anneke.size() = 6
Anneke.toUpper() = ANNEKE
Anneke.concat(and Jos).substring(6,8) = e a

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Prioritaten von Operatoren (absteigend)
1
2
3
4
5
6
7
8

Pfadname ::
Punkt und Pfeil . und ->
unare Operationen - und not
Multiplikation und Division * und \
Addition und Subtraktion + und Vergleiche <, >, <=, >=, = und <>
logische Operatoren and, or und xor
logische Implikation implies

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Navigation im Klassendiagramm

Ausgangs-Datentyp

zu Attribution und entlang Assoziationen mit


.bezeichner
Ergebnis-Datentyp:
Art des Bezeichners
Attribut
Assoziation
ein Objekt einelem. Set Set
Set Bag
Bag
Bag Bag
Bag

auch: Aufruf (z.B. boolescher) Methoden

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Navigation im Klassendiagramm: Beispiele
Kontext Flug:
self.flugzeug
self.flugzeug.sitzanzahl
self.flugzeug.fluege

Kontext Flugzeug:
self.fluege
self.fluege.passagiere
self.fluege.passagiere.name

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Klassenattribute
referenziert mit dem Klassennamen und dem
Pfadoperator
context Kundenkarte
inv: gueltigBis.spaeterAls(Datum::heute)

Aufzahlungsdatentypen (Enumeration)
analog zu Klassenattributen
context Kunde
inv: geschlecht = Geschlecht::maennlich implies
anrede = Herr

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Elemente von OCL


Operationen auf Collections
Collection-Operationen werden mit ->
angezeigt
Beispiel: ->isEmpty() pruft, ob die Collection
kein Element enthalt
context Kunde
inv: self.konten->isEmpty()

Gegenbeispiel:
context Kunde
inv: self.konten.isEmpty()

liefert Sammlung mit den Ergebnissen der


Methode isEmpty() der Klasse Konto,
angewandt auf alle Konten des Kunden

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Elemente von OCL


Operationen auf Collections
Notation
count(obj)
excludes(obj)
excludesAll(coll)
includes(obj)
includesAll(coll)
isEmpty()
notEmpty()
size()
sum()

Operation
Anzahl der Vorkommen
pruft ob nicht enthalten
analog
pruft ob enthalten
analog
pruft ob leer
pruft ob mind. 1 El.
Anzahl der Elemente
summiert Elemente

Ergebnistyp
Integer
Boolean
Boolean
Boolean
Boolean
Boolean
Boolean
Integer
Interger/Real

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Operationen auf Collections: Beispiele
context Mitgliedschaft
inv: self.programm.ebenen->includes(
self.aktuelleEbene)
context ServiceLevel
inv: self.programm.partner->includesAll(
self.verfuegbar.partner)
context Bonusprogramm
inv: partner.imAngebot->size() >= 1

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Elemente von OCL


Operationen auf Collections (Fort.)
Notation
asBag()
asSet()
asOrderedSet()
asSequence()
including(obj)
excluding(obj)
union(coll)
intersection(coll)

Operation
wandelt Coll. um
dito
dito
dito
fugt hinzu
entfernt
Vereinigung
Schnitt (nur Set/Bag)

Ergebnistyp
Bag
Set
OrderedSet
Sequence
Collection
Collection
Collection
Collection

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Elemente von OCL

Operationen auf Collections: Beispiele


context Programmpartner
inv: anzahlKunden = programme.teilnehmer->asSet()
->size()

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Elemente von OCL


Operationen auf Sequence/OrderedSet
Notation
append(obj)
at(index)
first()
last()
indexOf(obj)
insertAt(index,obj)
subOrderedSet(von,bis)
subSequence(von,bis)

Operation
fugt an
liefert Element
erstes Element
letztes Element
liefert ersten Index
fugt ein
Teilmenge
Teilmenge

Ergebnistyp
Collection
Element
Element
Element
Integer
Collection
OrderedSet
Sequence

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Loop-Operationen
Notation
exists(expr)
any(expr)
forAll(expr)
isUnique(expr)
one(expr)
select(expr)
reject(expr)

Operation
Existenzquantor
liefert ein erfullendes El.
Allquantor
pruft Eindeutigkeit
existiert genau ein
alle erfullenden El.
alle nicht erf. El.

Ergebnistyp
Boolean
Element
Boolean
Boolean
Boolean
Collection
Collection

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Elemente von OCL


Loop-Operationen: Bsp. I
context KundenKarte
inv: self.transaktionen->select(punkte > 100)
->notEmpty()
context Programmpartner
inv: self.programme.partner->select(p |
p <> self)->size() > 2
context Bonusprogramm
inv: teilnehmer->forAll( age() >= 18 )

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Elemente von OCL

Loop-Operationen: Bsp. II
context Bonusprogramm
inv: self.teilnehmer->forAll(k1, k2 |
k1 <> k2 implies k1.name <> k2.name )
context Treuekonto
inv: punkte > 0 implies transaktionen->exists(t |
t.points > 0)

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Alle Angestellten sind mindestens 16 Jahre alt

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Die Anzahl der Angestellten stimmt.

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Eine groe Firma zahlt mindestens 100000 Euro


Gehaltsgeld aus.

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Die Firma enthalt Angestellte uber 50.

Aufgaben

Einf
uhrung

Anwendungsbeispiel

Elemente von OCL

Aufgaben

Alle Angestellen einer Firma sind verheiratet.

Aufgaben