Grundlagen der Informatik I

Werbung
Grundlagen der Informatik I
Wintersemester 1993/94
Christoph Kreitz
FG Intellektik, Gebäude 23, Raum 117, Telephon 16-2863
Kostas Tzeras
Gebäude 25, Raum 3, Telephon 16-3253
1. Lehrziele
2. Veranstaltungsangebot
3. Prüfungsanforderungen
4. Organisatorisches
LEHRZIELE – Forderungen des Gesetzgebers
Selbständigkeit
Verantwortungsbewußtsein
Berufsqualifikation
Qualifikation zur wissenschaftlichen Arbeit
Unser zusätzliches Ziel:
Besser als wir !
Informatik I, Wintersemester 1993/94
1
Einführungsveranstaltung
UNTERSCHIEDE ZUR SCHULE
Neue Denkweisen
Grundlagenorientiert
Steilerer Anstieg, höheres Niveau
Angebote – kein Zwang, keine Anwesenheitspflicht
Eigenverantwortung und Selbstdisziplin erforderlich
Informatik I, Wintersemester 1993/94
2
Einführungsveranstaltung
LEHRINHALTE
Algorithmen, Programme und Rechner
• Umgang mit formalen Systemen
– Logik, Funktionen, abstrakte Maschinen, Programmiersprachen
• Entwurf von Systemen bescheidenen Umfangs
Realisierung in problemorientierter Sprache (Eiffel)
• Analyse der Qualität
– des Entwurfs (Strukturierung)
– der Realisierung (Zuverlässigkeit, Effizienz)
• sozialorientierte Gütekriterien
– Benutzerfreundlichkeit, Datenschutz, Computerethik, usw.
Informatik I, Wintersemester 1993/94
3
Einführungsveranstaltung
VERANSTALTUNGSANGEBOT
• Vorlesung
– Vorstellung der wichtigsten Grundlagen der Programmierung
– Folien der Vorlesung und Skript als Kopiervorlage im LZI (23/31)
• Übung
– selbständiger Entwurf und Diskussion von Systemen in Kleingruppen
– kleine Teilaufgaben und Projekt “Flugverkehrverwaltung”
• Praktikumsvorlesung und Praktikum (RBG!)
– Vorstellung der Programmiersprache Eiffel
– Realisierung von Systemen auf dem Rechner
• Studentischer Arbeitsraum (25/9)
– Treffpunkt für gemeinsames Lernen und Beratung durch Tutoren
– Sprechstunden der Veranstalter
• Prüfungen – Bescheinigung des Lernerfolgs durch Semestralklausur
Informatik I, Wintersemester 1993/94
4
Einführungsveranstaltung
Prüfungsanforderungen – Informatik A
1. Entwurf
15%
– Spezifikation von Datentypen und Schnittstellen
– Strukturierungskonzepte (Parametrisierte Datentypen & Vererbung)
2. Realisierung
50%
Umsetzung der Spezifikation in Funktionen und Prozeduren
– Algorithmusentwurf auf der Basis von Vor- und Nachbedingungen
– Realisierung in höheren und maschinennahen Programmiersprachen
3. Analyse der Zuverlässigkeit
15%
– Korrektheits- und Terminierungsbeweise
– Testen
4. Analyse der Effizienz
10%
– Komplexitätsabschätzungen
5. Modelle von Programmiersprachen,
Informatik I, Wintersemester 1993/94
5
10%
Einführungsveranstaltung
Themen der nächsten Stunde
• Kriterien für Softwarequalität
• Übersicht über formale Systeme
– logische, funktionale, imperative, maschinennahe Programmierung
• Einführung in Programmierung und Strukturierung
– Phasenkonzept der Systementwicklung
– Schrittweise Verfeinerung
– Prozeduralisierung
– Modularisierung und Klassifizierung
Informatik I, Wintersemester 1993/94
6
Einführungsveranstaltung
Grundlagen der Informatik I
Inhalte des Grundstudiums Informatik — ein Überblick
1. Kriterien für Softwarequalität
2. Theoretisch-formale Schwerpunkte
– (Konstruktive) Kaküle der Informatik
3. Methodisch-Technische Schwerpunkte
– Programmentwurf und Strukturierung
SOFTWAREQUALITÄT – externe Merkmale
Korrektheit
Robustheit
– Programm erfüllt exakt seine Aufgaben
– funktioniert auch unter außergewöhnlichen Bedingungen
Erweiterbarkeit
– anpaßbar an geänderte Anforderungen
Wiederverwendbarkeit
Kompatibilität
Effizienz
Portabilität
Verifizierbarkeit
– für neue Anwendungen
– verbindbar mit anderen Programmen
– ökonomische Nutzung von Platz und Zeit
– leicht übertragbar auf verschiedene Umgebungen
– Fehler während der Betriebsphase erkennbar
Integrität
Benutzerfreundlichkeit
Informatik I, Wintersemester 1993/94
– gegen unberechtigten Zugriff
– leichter Umgang für ungeübte Benutzer
8
Inhaltliche Einführung
Theoretisch-formale Schwerpunkte des
Grundstudiums
• Formale Systeme (Kalküle der Informatik)
– Logik als Beschreibungssprache (für Spezifikationen)
– deklarative Programmiersprachen (Prolog)
– funktionale Programmiersprachen (Lisp, ML)
– imperative Programmiersprachen
(Pascal, C, Modula, Ada, Fortran, Cobol, Eiffel ...)
– maschinennahe Programmiersprachen (Assembler, C)
– Schaltungen
• Mathematische Modelle (Informatik IV)
– Grenzen der Anwendbarkeit formaler Systeme
Informatik I, Wintersemester 1993/94
9
Theoretisch-formale Schwerpunkte
GGT – logische Beschreibung
teiler: teilt:IN×IN→IB mit
∀ ∈ IN. teilt(a,a) ∧ teilt(a,a*b)
Größter gemeinsamer Teiler: ggt:IN×IN→IN mit
∀m,n ∈ IN. teilt(ggt(m,n),m) ∧ teilt(ggt(m,n),n)
∧ (∀t ∈ IN. teilt(t,m) ∧ teilt(t,n) ⇒ t≤ggt(m,n))
Zahlentheoretische Erkenntnisse:
teilt(t,m) ∧ teilt(t,n) ⇒ (m>n ⇒ teilt(t,m-n))
teilt(t,m) ∧ teilt(t,n) ⇒ (m<n ⇒ teilt(t,n-m))
m=n ⇒ ggt(m,n) = m
Informatik I, Wintersemester 1993/94
10
Theoretisch-formale Schwerpunkte
GGT - Deklaratives Programm
Konstruktive, rekursive Regeln für Prädikat GGT(m,n,t)
m>n ⇒ ( GGT(m,n,t) ⇔ GGT(m-n,n,t) )
(1)
m<n ⇒ ( GGT(m,n,t) ⇔ GGT(m,n-m,t) )
(2)
m=n ⇒ ( GGT(m,n,t) ⇔ (t=m) )
(3)
Abarbeitung: Suche anwendbare Regeln und ersetze
Nach (2) gilt GGT(12, 15 ,t) ⇔ GGT(12, 3, t)
(1)
GGT(12, 3, t)
⇔ GGT(9, 3, t)
(1)
GGT(9, 3, t)
⇔ GGT(6, 3, t)
(1)
GGT(6, 3, t)
⇔ GGT(3, 3, t)
(3)
GGT(3, 3, t)
⇔ (t=3)
Auch GGT(m,4,2) lösbar
Elegant, aber wenig effizient
Informatik I, Wintersemester 1993/94
11
Theoretisch-formale Schwerpunkte
GGT - Funktionales Programm
Beschreibe Verhalten durch Funktionsdefinition
ggt(m,n) = if m>n
then ggt(m-n,n)
else if m<n
then ggt(m,n-m)
else m
Abarbeitung: Setze Argumente ein und werte
ggt(12,15) = ggt(12,15-12)
= ggt(12-3,3)
= ggt(9-3,3)
= ggt(6-3,3)
= 3
aus
= ggt(12,3)
= ggt(9,3)
= ggt(6,3)
= ggt(3,3)
Konzeptionell einfach, mittelmäßig effizient
Informatik I, Wintersemester 1993/94
12
Theoretisch-formale Schwerpunkte
GGT – imperatives Programm
Maschinenmodell mit Speicher und Befehlen
1
2
3
4
5
6
7
while m<>n do
if m>n
then m:=m-n
else if m<n
then n:=n-m
else ;
t:=m
Abarbeitung: Verändere Speicher und Befehlszähler
1 2 4 5 1 2 3 1 2 3 1 2 3 1 2 4 6 7
nächster Befehl:
Speicher
m 12 12 12 12 12 12 12 9 9 9 6 6 6 3 3 3 3 3 3
n 15 15 15 15 3
3
3
3 3 3 3 3 3 3 3 3 3 3 3
t ?
?
?
? ? ? ? ? ? ? ? ? ? ? 3
?
?
Informatik I, Wintersemester 1993/94
?
?
13
Theoretisch-formale Schwerpunkte
GGT – Assembler Programm
Effizienteste Ausnutzung eines Rechners, mühsam
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Anfang:
Marke1:
Marke2:
Ende:
Informatik I, Wintersemester 1993/94
r:=m;
cc:=r=n;
if cc then goto Ende;
r:=m;
cc:=r>n;
if cc then goto Marke1;
r:= m;
cc:=r<n;
if cc then goto Marke2;
goto Anfang;
r:=n
r:=r-m;
goto Anfang
r:=m;
r:=r-n;
goto Anfang;
t:=m;
14
Theoretisch-formale Schwerpunkte
Zusammenhang der Ebenen
Je tiefer die Ebene, desto effizienter
Programmieraufwand und Fehlerwahrscheinlichkeit wachsen
Methodische Programmentwicklung nötig
– Synthese oder nachträgliche Verifikation
– Intuition steuert systematisch-automatisches Vorgehen
beim Übergang zur nächtsttieferen Ebene
Informatik I, Wintersemester 1993/94
15
Theoretisch-formale Schwerpunkte
Methodisch-Technische Schwerpunkte des
Grundstudiums
• Techniken und Methoden zum Einsatz formaler Systeme
Verwendung der Grundkonzepte zur Beschreibung technischer Systeme
– Beschreibung von Anforderungen in Logik
– Objektorientierter Entwurf in Realisierung in Eiffel
– Maschinennahe Programmierung (Informatik II)
Verlangt Kenntnis der Konzepte und vor allem Training
• Strukturierungsmethoden für formale Systeme
– Organisation des Entwicklungsprozesses
– Strukturierung des zu entwickelnden Systems
– Qualitätsüberprüfung (Testen und Beweisen)
Informatik I, Wintersemester 1993/94
16
Methodisch-Technische Schwerpunkte
Entwicklungsprozeß für große Softwaresysteme
Aufteilung in getrennt zu bearbeitende Teilprobleme
Evolutionäre Entwicklung von Software (Phasenkonzept)
Software Life Cycle
• Systemanalyse
→ Pflichtenheft
• Deskriptive Formulierung
• Entwurf
• Implementierung
→ formale Spezifikation
→ Grobstruktur des Systems
→ Realisierung in Programmiersprache
• Tests, Dokumentation
→ Abnahme durch Benutzer
• Vorschläge für erweiterte, verbesserte neue Version
Informatik I, Wintersemester 1993/94
17
Strukturierungsmethoden
Zerlegungskonzepte für Systeme
• Verfeinerung
– Zerlegung in Teilschritte
– Behandlung von Alternativen
– Wiederholung von Arbeitsvorgängen
• Prozeduralisierung
– Namen geben und (mehrfach) verwenden
– Parameter
– Rekursion
• Modularisierung
• Klassifizierung – Strukturierung der Daten
– Generizität
– Vererbung
Informatik I, Wintersemester 1993/94
18
Strukturierungsmethoden
“Burger”-Herstellung – Teilschritte
Erste Verfeinerung der Herstellung:
Burger-Herstellung:
Brötchen vorbereiten;
Brötchen füllen;
Brötchen verpacken
Zweite Verfeinerung der Herstellung:
Brötchen vorbereiten: Brötchen nehmen;
Brötchen halbieren;
Brötchen füllen:
heißes Hacksteack auf die untere Hälfte legen;
Salatblatt darauflegen;
Tomatenscheiben darauflegen;
Essiggurkenscheiben darauflegen;;
alles unter KetchUp verstecken;
obere Brötchenhälfte daraufpappen
Informatik I, Wintersemester 1993/94
19
Strukturierungsmethoden
“Burger”-Herstellung – Alternativen
Brötchen vorbereiten;
if Doppel-Burger verlangt
then heißes Hacksteack hineinlegen;
Salatblatt darauflegen;
Tomatenscheiben darauflegen;
Essiggurkenscheiben darauflegen;
heißes Hacksteack hineinlegen;
Salatblatt darauflegen;
Tomatenscheiben darauflegen;
Essiggurkenscheiben darauflegen;;
else heißes Hacksteack hineinlegen;
Salatblatt darauflegen;
Tomatenscheiben darauflegen;
Essiggurkenscheiben darauflegen;;
alles unter KetchUp verstecken;
obere Brötchenhälfte daraufpappen;
Brötchen verpacken
Informatik I, Wintersemester 1993/94
20
Strukturierungsmethoden
“Burger”-Herstellung – Wiederholungen
while im Fach Platz ist do
Brötchen nehmen; Brötchen halbieren;
if Doppel-Burger verlangt
then heißes Hacksteack hineinlegen;
Salatblatt darauflegen;
Tomatenscheiben darauflegen;
Essiggurkenscheiben darauflegen;
heißes Hacksteack darauflegen;
Salatblatt darauflegen;
Tomatenscheiben darauflegen;
Essiggurkenscheiben darauflegen;
else heißes Hacksteack hineinlegen;
Salatblatt darauflegen;
Tomatenscheiben darauflegen;
Essiggurkenscheiben darauflegen;
alles unter KetchUp verstecken;
obere Brötchenhälfte daraufpappen;
Brötchen verpacken
Informatik I, Wintersemester 1993/94
21
Strukturierungsmethoden
“Burger”-Herstellung – Prozeduralisierung
Namen geben:
Schicht einlegen: heißes Hacksteack darauflegen;
Salatblatt darauflegen;
Tomatenscheiben darauflegen;
Essiggurkenscheiben darauflegen;
Namen verwenden:
while im Fach Platz ist do
Brötchen nehmen; Brötchen halbieren;
if Vierfach-Burger verlangt
then Schicht einlegen; Schicht einlegen;
Schicht einlegen; Schicht einlegen
else if Dreifach-Burger verlangt
then Schicht einlegen; Schicht einlegen; Schicht einlegen
else if Doppel-Burger verlangt
then Schicht einlegen; Schicht einlegen
else Schicht einlegen;
alles unter KetchUp verstecken;
obere Brötchenhälfte daraufpappen;
Brötchen verpacken
Informatik I, Wintersemester 1993/94
22
Strukturierungsmethoden
“Burger”-Herstellung – Parameter
Namen geben:
Schicht(i): while i>0 do
Schicht einlegen;
Zähle i um 1 herunter
Namen verwenden:
while im Fach Platz ist do
Brötchen nehmen;
Brötchen halbieren;
if Vierfach-Burger verlangt
then Schicht (4);
else if Dreifach-Burger verlangt
then Schicht (3);
else if Doppel-Burger verlangt
then Schicht (2);
else Schicht (1);
alles unter KetchUp verstecken;
obere Brötchenhälfte daraufpappen;
Brötchen verpacken
Informatik I, Wintersemester 1993/94
23
Strukturierungsmethoden
“Burger”-Herstellung – Rekursion
Namen geben:
Schicht(i): if i>1
then Schicht einlegen;
Schicht (i-1)
else Schicht einlegen
Informatik I, Wintersemester 1993/94
24
Strukturierungsmethoden
“Burger”-Betrieb – Modularisierung
• Aufteilung in Komponenten
– Lager, Küche, Kasse, Reinigung, Buchhaltung
• Dezentrale Organisation – jeder Teil ist unabhängig
“objektorientiert”
• Alleinige Eigenverantwortlichkeit der Komponenten
“Geheimnisprinzip / Datenkapselung”
Informatik I, Wintersemester 1993/94
25
Strukturierungsmethoden
Fast-Food-Betrieb – Klassifizierung
• Klassifizierung:
Mehrere Komponenten arbeiten nach dem gleichen Prinzip
– Eine Küche, mehrere Kassen
Klassen beschreiben Gemeinsamkeiten der Komponenten
• Generizität:
Identisches Verhalten bis auf eine Komponente
– gleiche Organisation von
Burger Betrieb, Kentucky Fried Chicken, Pizza Hut,
• Vererbung:
Individuelle Ergänzung einer Grundklasse
– Fast-Food-Betrieb wird ergänzt um regionale Zusatzangebote
Handkäs, Weißwurst, Reibekuchen, Fischbrötchen
Informatik I, Wintersemester 1993/94
26
Strukturierungsmethoden
Themen der Vorlesung Informatik I
1. Übersicht
2. Formale Sprachbeschreibungen
3. Objekte und Klassen
4. Systematischer Entwurf
– Verifikation
– Konventionelle Programmierkonstrukte
5. Vererbung
Informatik I, Wintersemester 1993/94
27
Übersicht
Nächste Stunde
• Formale Sprachbeschreibungen
• Syntax: Grammatiken, BNF und Syntaxdiagramme
• Aussagenlogik
• Semantische Wahrheit und syntaktische Ableitbarkeit
Informatik I, Wintersemester 1993/94
28
Übersicht
Notwendigkeit formaler Sprachen
• Programmierung modelliert Ausschnitte der realen Welt
• Modellbildung liefert Arbeitsanweisungen für Rechner
• Natürliche Sprache ist mehrdeutig und kontextabhängig
– Rechner verstehen keine natürliche Sprache
– Sprache muß eindeutig interpretierbar sein
• Formale Logik ist die beste Beschreibungssprache
– Aussagenlogik
– Prädikatenlogik
Informatik I, Wintersemester 1993/94
29
Formale Sprachen
Beschreibung formaler Sprachen
• Syntax: Beschreibung der korrekt geformten Sätze
• Semantik: Beschreibung der Bedeutung
• Ableitungssystem: Regeln zur Erzeugung syntaktisch
korrekter Sätze aus anderen korrekten Sätze
Informatik I, Wintersemester 1993/94
30
Formale Sprachen
Syntax der arithmetischen Ausdrücke
Startsymbol:
Formel
Alphabet:
Grundmengen
Konstante, Name
Sonstige Symbole
+ − ∗/()
Regeln:
Formel ::=
Term
::=
Faktor ::=
Informatik I, Wintersemester 1993/94
31
Term
[1]
| Formel + Term
[2]
| Formel - Term
[3]
Faktor
[4]
| Term ∗ Faktor
[5]
| Term / Faktor
[6]
Konstante
[7]
| Name
[8]
| ( Formel )
[9]
Formale Sprachen
Grammatik – Mittel zur Syntaxbeschreibung
• Alphabet (‘Terminalsymbole’):
– Menge der erlaubten Symbole
– besteht aus Grundmengen und sonstigen Symbolen
• Variablen (‘Non-Terminalsymbole’):
– Hilfsbegriffe zur Beschreibung syntaktischer Einheiten
• Regeln der Form X ::= x1..xk
– ‘Das Non-Terminalsymbol X kann durch x1..xk ersetzt werden’
• Startsymbol:
– Non-Terminalsymbol, von dem jede Ableitung ausgeht
Darstellung als Backus-Naur-Form oder Syntaxdiagramm
Informatik I, Wintersemester 1993/94
32
Formale Sprachen
Ableitung
• Regelanwendung: Wenn X ::= x1..xk eine Regel ist, so kann in einer
Zeichenkette a1...X...an das Symbol X durch x1..xk ersetzt werden.
– Schreibweise: a1...X...an −→ a1...x1..xk ...an
• Ableitung: Folge von Regelanwendungen, beginnend mit dem Startsymbol (endend
in einer Zeichenkette ohne Non-Terminalsymbole)
• Ableitungsbaum: graphische Darstellung einer Ableitung
• Linksableitung: Ableitung, bei in jedem Schritt das am weitesten links stehende
Non-Terminalsymbol ersetzt wird.
– Zu jedem Ableitungsbaum gibt es genau eine Linksableitung
• Eindeutigkeit: jedes korrekte Wort hat nur einen Ableitungsbaum
Informatik I, Wintersemester 1993/94
33
Formale Sprachen
Ableitung und Ableitungsbaum für a ∗ b + c
Formel −→ Formel + Term
Formel
[2]
−→ Term + Term
[1]
−→ Term ∗ Faktor + Term
[5]
Formel
Term
−→ Faktor ∗ Faktor + Term [4]
−→ a ∗ Faktor + Term
[8]
−→ a ∗ b + Term
[8]
−→ a ∗ b + Faktor
[4]
−→ a ∗ b + c
[8]
Informatik I, Wintersemester 1993/94
+
Term
Faktor
Faktor
∗ Faktor
b
a
34
Term
Formale Sprachen
c
Arithmetischen Ausdrücke – mehrdeutige Grammatik
Startsymbol:
Formel
Alphabet:
Grundmengen
Konstante, Name
Sonstige Symbole
+ − ∗/()
Regeln:
Formel ::=
Faktor
| Formel + Formel
[2]
| Formel - Formel
[3]
| Formel ∗ Formel
[4]
| Formel / Formel
[5]
Faktor ::=
Informatik I, Wintersemester 1993/94
[1]
Konstante
[6]
| Name
[7]
| ( Formel )
[8]
35
Formale Sprachen
Zwei Ableitungsbäume für a ∗ b + c
Formel
Formel
Formel
+
Formel ∗ Formel
Formel
Faktor
Faktor
b
Formel
Formel
Faktor
Faktor
c
a
*
Formel
Formel + Formel
Faktor
Faktor
b
c
a
Informatik I, Wintersemester 1993/94
36
Formale Sprachen
Arithmetischen Ausdrücke – Prefix-Form
Startsymbol:
Formel2
Alphabet:
Grundmengen
Name, Konstante, Operator
Sonstige Symbole ( ) ,
Regeln:
Formel2
::= Konstante
[1]
| Name
[2]
| Funktionsanwendung
[3]
Funktionsanwendung ::= Operator(Operanden Liste) [4]
Operanden Liste
::= Operand
[5]
| Operand, Operanden Liste [6]
Operand
::= Formel2
[7]
Kontextbedingungen: Genau dann, wenn t1, t2, ..., tn Operanden sind und f ein
n-stelliges Element aus Operator ist, ist auch f (t1, t2, ..., tn) eine
Funktionsanwendung.
Informatik I, Wintersemester 1993/94
37
Formale Sprachen
Syntaxdiagramme für arithmetische Ausdrück
Formel
Term
Formel + Term
Formel - Term
Term
Faktor
Term ∗ Faktor
usw.
Term / Faktor
Informatik I, Wintersemester 1993/94
38
Formale Sprachen
Formale Logik
• Formale Sprache für “logische Schlüsse”
• Symbole für Verknüpfung von Aussagen:
Junktoren
¬
Negation
∧
Konjunktion ‘und’
∨
Disjunktion ‘oder’
Quantoren
‘nicht’
∀ ‘für alle’
∃ ‘es gibt’
⇒ Implikation ‘daraus folgt’
⇔ Äquivalenz
‘genau dann, wenn’
• Aussagenlogik: einfache Verknüpfungen ohne Quantoren
• Prädikatenlogik: komplexe Verknüpfungen
Informatik I, Wintersemester 1993/94
39
Formale Sprachen
Syntax der Aussagenlogik (mit Klammerung)
Startsymbol:
Aussage
Alphabet:
Grundmengen
Bezeichner
Sonstige Symbole
¬
Syntax:
∧ ∨
Aussage
⇒ ⇔ ()T F
::=
Atomaraussage
| (¬ Aussage)
| (Aussage
∧
Aussage)
| (Aussage
∨
Aussage)
| (Aussage ⇒ Aussage)
| (Aussage ⇔ Aussage)
Atomaraussage ::=
Informatik I, Wintersemester 1993/94
40
T | F | Bezeichner
Formale Sprachen
Syntax der Aussagenlogik (ohne Klammerung)
Startsymbol:
Aussage
Alphabet:
Grundmengen
Bezeichner
Sonstige Symbole
¬
Syntax:
∧ ∨
⇒ ⇔ ()T F
Aussage
::=
Imp-Ausdruck
| Aussage ⇔ Imp-Ausdruck
Imp-Ausdruck ::=
Ausdruck
| Imp-Ausdruck ⇒ Ausdruck
Ausdruck
::=
Term
| Ausdruck
Term
::=
Term
Faktor
| Term
Faktor
∨
∧
Faktor
¬ Faktor | ( Aussage )
::=
| T | F | Bezeichner
Wertigkeiten: ¬ >
Informatik I, Wintersemester 1993/94
∧ > ∨ >
41
⇒
>
⇔
Formale Sprachen
Ableitungsbaum für
¬a ∧ b ∨ c ⇒ d ⇔ e
Aussage
⇔ Imp-Ausdruck
Aussage
Imp-Ausdruck
⇒ Ausdruck
Imp-Ausdruck
Ausdruck
Ausdruck
∨
Term
Term
∧
Faktor
¬
Ausdruck
Term
Term
Faktor
Faktor
Faktor
Term
Faktor
e
d
c
b
Faktor
a
Informatik I, Wintersemester 1993/94
42
Formale Sprachen
(Denotationale) Semantik
Beschreibung der Bedeutung von Ausdrücken einer Quellsprache
in einer bekannten Zielsprache
• Ziel Wahrheitswerte = { wahr, falsch}
Ziel Operatoren = { und, oder, nicht, impl, gleich }
• Bedeutung der Ziel Operatoren
b
c
falsch
falsch
wahr
wahr
falsch
wahr
falsch
wahr
(nicht b) (b und c) (b oder c) ( b impl c) (b gleich c)
wahr
wahr
falsch
falsch
falsch
falsch
falsch
wahr
falsch
wahr
wahr
wahr
wahr
wahr
falsch
wahr
wahr
falsch
falsch
wahr
• Zustand: Funktion ‘state’ : Bezeichner → Ziel Wahrheitswert
– Festgelegt durch Wertetabelle: z.B.[a 7→ wahr, bc 7→ falsch]
• Interpretationsfunktion:
s : Syntaktische Aussage × Zustand → Ziel Wahrheitswerte
– Festgelegt durch Zustand und Definitionsgleichungen auf Junktoren
Informatik I, Wintersemester 1993/94
43
Formale Sprachen
Semantik aussagenlogischer Formeln
s (Bezeichner, state) = state(Bezeichner)
s (T , state)
= wahr
s (F , state)
= falsch
s ((Aussage), state) = s (Aussage, state)
s (¬ Faktor, state) = (nicht s (Faktor, state))
s (Term ∧ Faktor, state)
= (s (Term, state) und s (Faktor, state))
s (Ausdruck
∨
Term, state)
= (s (Ausdruck, state) oder s (Term, state))
s (Imp-Ausdruck ⇒ Ausdruck, state)
= (s (Imp-Ausdruck, state) impl s (Ausdruck, state))
s (Aussage ⇔ Imp-Ausdruck, state)
= (s (Aussage, state) gleich s (Imp-Ausdruck, state))
Informatik I, Wintersemester 1993/94
44
Formale Sprachen
Semantikberechnung
state = [a 7→ wahr, b 7→ falsch, c 7→ wahr, d 7→ falsch, e 7→ wahr]
=
=
=
=
=
=
=
=
=
=
s(¬a ∧ b ∨ c ⇒ d ⇔ e, state)
s(¬a ∧ b ∨ c ⇒ d, state) gleich s(e, state)
s(¬a ∧ b ∨ c ⇒ d, state) gleich wahr
(s(¬a ∧ b ∨ c, state) impl s(d, state)) gleich wahr
(s(¬a ∧ b ∨ c, state) impl falsch) gleich wahr
((s(¬a ∧ b, state) oder s(c, state)) impl falsch) gleich wahr
((s(¬a ∧ b, state) oder wahr) impl falsch) gleich wahr
(((s(¬ a) und s(b, state)) oder wahr) impl falsch) gleich wahr
(((s(¬ a) und falsch) oder wahr) impl falsch) gleich wahr
((((nicht s(a), state) und falsch) oder wahr) impl falsch) gleich wahr
((((nicht wahr) und falsch) oder wahr) impl falsch) gleich wahr
Reduktion unter Anwendung der Wahrheitstafel ergibt:
(((falsch und falsch) oder wahr) impl falsch) gleich wahr
= ((falsch oder wahr) impl falsch) gleich wahr
= (wahr impl falsch) gleich wahr
= falsch gleich wahr
= falsch
Informatik I, Wintersemester 1993/94
45
Formale Sprachen
Konversion
Konversionsregel ‘A ≡ B’ gilt genau dann, wenn
s (A, state) = s (B, state) für alle Zustände gilt
K1 E1 ∧ E2 ≡ E2 ∧ E1
K8
E1 ∨ E 2 ≡ E 2 ∨ E 1
E1 ⇔ E 2 ≡ E 2 ⇔ E 1
K2 E1 ∧ (E2 ∧ E3) ≡ (E1 ∧ E2) ∧ E3
E1 ∨ (E2 ∨ E3) ≡ (E1 ∨ E2) ∨ E3
K3 E1 ∨ (E2 ∧ E3) ≡ (E1 ∨ E2) ∧ (E1 ∨ E3)
E1 ∧ (E2 ∨ E3) ≡ (E1 ∧ E2) ∨ (E1 ∧ E3)
K4 ¬(E1 ∧ E2) ≡ ¬E1 ∨ ¬E2
¬(E1 ∨ E2) ≡ ¬E1 ∧ ¬E2
E1 ⇒ E2 ≡ ¬E1 ∨ E2
T ⇒ E 2 ≡ E2
K9
E1 ⇔ E2 ≡ (E1 ⇒ E2) ∧ (E2 ⇒ E1)
K10 E1 ∨ E1 ≡ E1
E1 ∨ T ≡ T
E1 ∨ F ≡ E 1
E1 ∨ (E1 ∧ E2) ≡ E1
K11 E1 ∧ E1 ≡ E1
E1 ∧ T ≡ E 1
K5 ¬(¬E1) ≡ E1
E1 ∧ F ≡ F
K6 ¬E1 ∨ E1 ≡ T
E1 ∧ (E1 ∨ E2) ≡ E1
K7 ¬E1 ∧ E1 ≡ F
Informatik I, Wintersemester 1993/94
K12 E1 ≡ E1
46
Formale Sprachen
Ableitungssysteme (Kalküle)
Syntaktische Manipulation ersetzt Semantik
• Kalkül: (Formale Sprache +) Axiome + Regeln
• Axiom: als gültig vereinbarte Grundaussage
– Angegeben als Axiomenschema mit freien Aussagenvariablen
• Regel: Prämissen + Konklusion
P1 , . . . , P n
K
– A `R B: Anwendung von Regel R auf A liefert B
– Angegeben als Regelschema
• B ist aus A ableitbar genau dann wenn gilt
A1 ` R 1 B 1 , . . . , A j ` R j B j , . . . , A n ` R n B
(Aj enthält Axiome, die Formeln aus A und die Bl mit 1 ≤ l < k)
• B ist ableitbar gdw. B aus den Axiomen ableitbar ist.
• Tautologie: Aussagen mit s (Aussage, state)=wahr für alle Zustände
Informatik I, Wintersemester 1993/94
47
Formale Sprachen
Kalkül für die Aussagenlogik
Axiomenschemata:
L1
A ∨ ¬A
L2
(A ∧ ¬A) ⇒ B
L3
(A ⇒ (B ∧ ¬B)) ⇒ ¬A
Ableitungsregeln:
⇒ -E
⇒ -I
∧ -I
∧ -E
∨ -I
∨ -E
⇔ -I
⇔ -E
Subst
Informatik I, Wintersemester 1993/94
E1 , E 1 ⇒ E 2
E2
[E1]E2
E1 ⇒ E 2
E1, ..., En
E1 ∧ ... ∧ En
E1 ∧ ... ∧ En
Ei
Ei
E1 ∨ ... ∨ En
E1 ∨ ... ∨ En, E1 ⇒ E, ..., En ⇒ E
E
E1 ⇒ E2, E2 ⇒ E1
E1 ⇔ E 2
E1 ⇔ E 2
E1 ⇒ E2, E2 ⇒ E1
E1 ⇔ E 2
E(E1) ⇔ E(E2), E(E2) ⇔ E(E1)
48
Formale Sprachen
Zusatzaxiome, die ‘ ⇒ -I’ ersetzen
L4
A⇒A
L5
A ⇒ (B ⇒ A)
L6
((A ⇒ (B ⇒ C)) ∧ (A ⇒ B)) ⇒ (A ⇒ C)
L7
((A ⇒ B) ∧ (B ⇒ C)) ⇒ (A ⇔ C)
L8
(A ⇒ B) ⇒ (¬B ⇒ ¬A)
L9
(¬(¬A)) ⇔ A
L10 ((A ∨ B) ∧ (¬A ∨ C)) ⇒ B ∨ C
Informatik I, Wintersemester 1993/94
49
Formale Sprachen
Zusammenhang zwischen
Syntax, Semantik und Ableitungssystem
syntaktische Ableitung
syntaktische Aussage
Rechnen im syntaktischen Modell
syntaktische Aussage
-
H
HH
HH
InterHH
HH
Interpretation (s)
preHH
HH
HH
taHH
H
tion
HH
HH
HH
(s)
HH
H
j
H
?
semantische Ergebnisse
Informatik I, Wintersemester 1993/94
50
Formale Sprachen
Nächste Stunde – Kapitel 2.2
• Umsetzung natürlichsprachlicher Aussagen
in solche der Logik
• Prädikatenlogik
– Syntax
– Semantik
– Ableitungskalkül
• Dreiwertige Logik
Informatik I, Wintersemester 1993/94
51
Formale Sprachen
Syntax der Prädikatenlogik I
Startsymbol:
Alphabet:
Grundmengen:
Sonstige Symbole
Satz
Prädikat Symbol, Konstantes Prädikat,
Funktions Symbol, Konstante, Variable, Bereich
∧ ∨
⇒ ⇔ ∀∃ . T F ) ( = ,
::=
Atomaraussage
¬ Satz | ( Satz ∧ Satz ) | ( Satz ∨ Satz )
( Satz ⇒ Satz ) | ( Satz ⇔ Satz )
( ∀ Variable : Bereich . Satz )
( ∃ Variable : Bereich . Satz )
Regeln:
Satz
|
|
|
|
Atomaraussage
::=
Termlist
::=
Term
::=
Informatik I, Wintersemester 1993/94
T | F | ( Term = Term )
| Konstantes Prädikat
| Prädikat Symbol ( Termlist )
Term | Term , Termlist
Konstante | Variable
| Funktions Symbol ( Termlist )
52
Prädikatenlogik
Syntax der Prädikatenlogik II
Kontextbedingungen:
Genau dann, wenn t1, t2, ..., tn Terme sind und p ein n-stelliges Element aus
Prädikat Symbol ist, ist auch p(t1, t2, ..., tn) ein Satz.
Genau dann wenn t1, t2, ..., tn Terme sind und f ein n-stelliges Element aus
Funktions Symbol ist, ist auch f (t1, t2, ..., tn) ein Term.
Bereich ist eine Menge, deren Elemente die Variable als Werte annehmen kann. Kein
Element aus Variable darf als Name in Bereich vorkommen.
Operator Priorität
¬, ∃, ∀ 4 (höchste Priorität)
Prioritäten der Operatoren:
∧
3
∨
2
⇒, ⇔ 1
Informatik I, Wintersemester 1993/94
53
Prädikatenlogik
Bibliothekenbeispiel – Formalisierung I
• Herr Tzeras ist Entleiher der LHB und der Informatik-Bibliothek
Entleiher(LHB,Tzeras) ∧ Entleiher(Inf-Bib,Tzeras)
• Ein Buch kann entleihbar, ausgeliehen, Präsenzexemplar oder
Semesterapparat sein.
∀b : Bücher . (status(b)=‘entleihbar’
∨ status(b)=‘ausgeliehen’
∨ status(b)=‘Präsenzexemplar’
∨ status(b)=‘Semesterapparat’)
oder
∀b : Bücher . (entleihbar(b) ∨ ausgeliehen(b)
∨ Präsenzexemplar(b) ∨ Semesterapparat(b) )
Informatik I, Wintersemester 1993/94
54
Prädikatenlogik
Bibliothekenbeispiel – Formalisierung II
• Die Leihfrist eines Buches beträgt 4 Wochen
∀b : Bücher . ausgeliehen(b) ⇒
Tagesdifferenz(Ausleihdatum(b),Ausleihfrist(b)) ≤ 28
• Hochschullehrer dürfen maximal ein Semester ausleihen
∀b : Bücher . ∀p : Personen .
ausgeliehen(b) ∧ entliehen durch(p,b) ⇒
(Hochschullehrer(p) ⇒
Tagesdifferenz(Ausleihdatum(b),Ausleihfrist(b)) ≤ 183)
∧ (¬Hochschullehrer(p) ⇒
Tagesdifferenz(Ausleihdatum(b),Ausleihfrist(b)) ≤ 28)
Informatik I, Wintersemester 1993/94
55
Prädikatenlogik
Semantik der Prädikatenlogik I
Zustand :
Variable → Grundmenge
B
Prädikat Symbol → Ziel Prädikat
:
| Konstantes Prädikat → Ziel Wahrheitswert
| Funktions Symbol → Ziel Funktion
| Konstante → Ziel Konstante
s (T, state)
= wahr
s (F, state)
= falsch
s (Prädikat Symbol (termlist), state) = B(Prädikat Symbol) (slist (termlist, state))
s (Konstantes Prädikat, state)
= B(Konstantes Prädikat)
s (Term1 = Term2, state)
= if s (Term1, state) = s (Term2, state)
then wahr else falsch
s ((¬ Satz), state)
= (nicht s (Satz, state))
s ((Satz1
∧
Satz), state)
= (s (Satz1, state) und s (Satz2, state))
s ((Satz1
∨
Satz), state)
= (s (Satz1, state) oder s (Satz2, state))
s ((Satz1 ⇒ Satz), state)
= (s (Satz1, state) impl s (Satz2, state))
s ((Satz1 ⇔ Satz), state)
= (s (Satz1, state) gleich s (Satz2, state))
Informatik I, Wintersemester 1993/94
56
Prädikatenlogik
Semantik der Prädikatenlogik II
s ((∀ Variable : Bereich . Satz), state) = if Bereich = {} then wahr
else let x
∈
Bereich in
s (Satz, state + [Variable 7→ x]) und
s ((∀ Variable : Bereich-{x} . Satz), state)
s ((∃ Variable : Bereich . Satz ), state) = if Bereich = {} then falsch
else let x
∈
Bereich in
s (Satz, state + [Variable 7→ x]) oder
s ((∃ Variable : Bereich-{x} . Satz), state)
s (Variable, state)
= state(Variable)
s (Konstante, state)
= B(Konstante)
s Funktions Symbol (termlist), state)
= B(Funktions Symbol) (slist (termlist, state))
slist (termlist, state)
= if einelementig(termlist)
then s (termlist, state)
else s (head(termlist), state) cons
slist (tail(termlist), state))
Informatik I, Wintersemester 1993/94
57
Prädikatenlogik
Freies Vorkommen von Variablen in Ausdrücken
• jedes Vorkommen von x in einer Atomaraussage ist frei
• x ist frei in f(x1, ..., xn), wenn f entweder ein Funktionssymbol ohne
Bereichsangabe ist, oder x in der Bereichbeschreibung nicht entsprechend
verwendet wird
• x ist frei in f(t1, ..., tn), falls x in mindestens einem ti frei ist
• x ist frei in p(t1, ..., tn) oder t1 = t2, falls x in mindestens einem ti frei ist
• x ist frei in ¬ A, wenn x in A frei ist
• x ist frei in A op B, wenn x in A oder in B frei ist (op aus
∧, ∨,
⇒, ⇔)
• x ist frei in ∃y : Bereich . A bzw. ∀y : Bereich . A, wenn x in A frei
vorkommt und x verschieden y ist
Px1,...,xn : P ist ein Prädikat mit freien Variablen x1, ..., xn
A
"
t
x
#
: alle freien Vorkommen von x in A werden durch t ersetzt
Informatik I, Wintersemester 1993/94
58
Prädikatenlogik
Gebundenes Vorkommen von Variablen in Ausdrücken
• kein Vorkommen von x in einer Atomaraussage ist gebunden
• x ist gebunden in f(x1, ..., xn), wenn f ein Funktionssymbol mit
Bereichsangabe ist und x in der Bereichbeschreibung entsprechend verwendet
wird
• x ist gebunden in f(t1, ..., tn), falls x in mindestens einem ti gebunden ist
• x ist gebunden in p(t1, ..., tn) oder t1 = t2, falls x in mindestens einem ti
gebunden ist
• x ist gebunden in ¬ A, wenn x in A gebunden ist
• x ist gebunden in A op B, wenn x in A oder in B gebunden ist
(op aus
∧, ∨,
⇒, ⇔)
• x ist gebunden in ∃y : Bereich . A bzw. ∀y : Bereich . A, wenn x in A
gebunden vorkommt oder x identisch mit y ist
Informatik I, Wintersemester 1993/94
59
Prädikatenlogik
Ableitungskalkül für die Prädikatenlogik
Axiomenschemata
A1
A ∨ ¬A
A2
(A ∧ ¬A) ⇒ B
A3
(A ⇒ (B ∧ ¬B)) ⇒ ¬A
A4
((...(x1 = y1) ∧ ...)...) ∧ (xn = yn) ⇒ (p(x1 , ..., xn) ⇔ p(y1, ..., yn))
für alle n-stelligen Prädikat Symbole p (n ≥ 1)
A5
((...(x1 = y1) ∧ ...)...) ∧ (xn = yn) ⇒ (f (x1, ..., xn)=f (y1, ..., yn))
für alle n-stelligen Funktions Symbole f (n ≥ 1)
Informatik I, Wintersemester 1993/94
60
Prädikatenlogik
Ableitungskalkül für die Prädikatenlogik
Ableitungsregeln
Regeln ⇒ -E, ⇒ -I,
R1–R9
∧ -I, ∧ -E, ∨ -I, ∨ -E,
⇔ -I, ⇔ -E, Subst der Aussagenlogik
R10
∃-I
R11
∃x :
∃-E ∃x :
R12
∀-I
R13
R14
R15
R16
R17
R18–R19
∀x :
∀-E ∀x :
w
x
A
Bereich . A
Bereich . A1, A1 ⇒ A2
A2
A
Bereich . A
Bereich
.A
w
A x
(∃x : Bereich−{w} . A) ∨ ((x
∃x : Bereich . A
∃x : Bereich . A
(∃x : Bereich−{w} . A) ∨ ((x
(∀x : Bereich−{w} . A) ∧ ((x
∀x : Bereich . A
∀x : Bereich . A
(∀x : Bereich−{w} . A) ∧ ((x
w
x
A
(x = w) ⇒ A
falls w ∈ Bereich
falls x in A2 nicht frei vorkommt
= w) ⇒ A)
= w) ⇒ A)
= w) ⇒ A)
= w) ⇒ A)
falls w ∈ Bereich
falls w ∈ Bereich
falls w ∈ Bereich
falls w ∈ Bereich
(x = w)
⇒A
w
A x
Informatik I, Wintersemester 1993/94
61
Prädikatenlogik
Syntax der dreiwertigen Logik
Startsymbol:
Aussage
Alphabet:
Grundmengen
Bezeichner
Sonstige Symbole ¬
∧
∨
∨
∧
⇒ ⇔ ( ) T F U
Syntax:
Aussage
::=
Imp-Ausdruck | Aussage ⇔ Imp-Ausdruck
Imp-Ausdruck
::=
Ausdruck | Imp-Ausdruck ⇒ Ausdruck
Ausdruck
::=
Term | Ausdruck
∨
Term
::=
Faktor | Term
Faktor | Term
Faktor
::=
¬ Faktor | ( Aussage )
∧
Term | Ausdruck
∧
∨
Faktor
| T | F | U | Bezeichner
Informatik I, Wintersemester 1993/94
62
Term
Prädikatenlogik
Wahrheitstafel für die dreiwertige Logik
b
c
(nicht b) (b und c) (b oder c) (b impl c) (b gleich c)
falsch falsch
wahr
falsch
falsch
wahr
wahr
falsch wahr
wahr
falsch
wahr
wahr
falsch
falsch undef
wahr
falsch
undef
wahr
undef
wahr falsch
falsch
falsch
wahr
falsch
falsch
wahr wahr
falsch
wahr
wahr
wahr
wahr
wahr undef
falsch
undef
wahr
undef
undef
undef wahr
undef
undef
undef
undef
undef
undef falsch
undef
undef
undef
undef
undef
undef undef
undef
undef
undef
undef
undef
Informatik I, Wintersemester 1993/94
63
Prädikatenlogik
Semantik der dreiwertigen Logik
s (Bezeichner, state)
= state(Bezeichner)
s (T, state)
= wahr
s (F, state)
= falsch
s (U, state)
= undef
s ((Aussage), state)
= s (Aussage, state)
s (¬ Faktor, state)
= (nicht s (Faktor, state))
s (Term
∧
Faktor, state)
= (s (Term, state) und s (Faktor, state))
s (Term
∧
Faktor, state)
= let x = s (Term, state) in
(if x then s (Faktor, state)
else (if x = falsch then falsch else undef))
s (Ausdruck
∨
Term, state)
= (s (Ausdruck, state) oder s (Term, state))
s (Ausdruck
∨
Term, state)
= let x = s (Ausdruck, state) in
(if x = undef then undef
else (if x = falsch then s (Term, state)
else wahr ))
s (Imp-Ausdruck ⇒ Ausdruck, state) = (s (Imp-Ausdruck, state) impl s (Ausdruck, state))
s (Aussage ⇔ Imp-Ausdruck, state)
Informatik I, Wintersemester 1993/94
= (s (Aussage, state) gleich s (Imp-Ausdruck, state))
64
Prädikatenlogik
Metasprache für Programmiersprachen
Struktur von Funktionen
f:A→B
Typdeklaration
lambdax. ausdruck
Funktionsdefinition
f(x)
Funktionsanwendung
if..then..else
Fallunterscheidung
let x = Teilausdruck in Ausdruck
determinierte Abkürzung
Ausdruck where x = Teilausdruck
von Teilausdrücken
let x
∈
Bereich in Ausdruck
Ausdruck where x
∈
indeterminierte Abkürzung
von Teilausdrücken
Bereich
Für f:A→B heißt A Definitionsbereich von f, B Wertebereich von f
f ist total, wenn f auf allen Werten von A definiert ist, sonst partiell.
Der Domain von f ist die Menge der Argumente auf denen f definiert ist
Informatik I, Wintersemester 1993/94
65
Metasprache
Metasprache – Datentypen und Operationen
{}
Leere Menge
{arg1,...,argn}
Explizite Mengenangabe
M1∪M2, M1∩M2
Vereinigung, Durchschnitt
M1-M2
Mengendifferenz
x ∈M
Elementrelation (boolesche Funktion)
[]
Leere Tabelle (endliche Funktion)
[arg17→wert1, ...,argn7→wertn ] Explizite Tabellenangabe
domain(tab)
Domain der endlichen Funktion tab
tab1+tab2
Verschmelzung zweier Tabellen
tab / {arg1,...,argn}
Entfernen von Tabelleneinträgen
A∗
Menge aller Listen über Elementen aus A
<>
Leere Liste
<a1,...,an>
Explizite Listenangabe
head(l)
Erstes Element von l
tail(l)
Rest von l
l1 & l 2
Informatik I, Wintersemester 1993/94
Verkettung
zweier Listen
66
Metasprache
Nächste Stunden
• Objekte
• abstrakte Datentypen
• Klassen in Eiffel
– Features (Attribute und Routinen)
– Standardroutinen für alle Klassen
– Generizität
– Verträge
Informatik I, Wintersemester 1993/94
67
Metasprache
Systematischer Systementwurf
1. Strukturierung der Daten
– Zerlegung in Klassen
– Beziehung der Klassen (Vererbung, Benutzung)
– Beschreibung der Dienstleistungen (Kontrakt)
2. Implementierung der Dienstleistungen
– Schrittweise Verfeinerung
– Prozeduralisierung
3. Ein- und Ausgabeformate
Informatik I, Wintersemester 1993/94
68
Klassen und Objekte
Strukturierung der Daten
• Strukturierungskonzepte von Eiffel
– Objekte
– Referenz-Semantik
– Klassen
– Generizität
– Routinen
– Kontrakte
– Datenkapselung
– Vererbung
• Benutzung der Strukturierungskonzepte
– Arbeiten mit der Eiffel-Umgebung
– Genaue Sprachbeschreibung: Syntax und Semantik
Informatik I, Wintersemester 1993/94
69
Klassen und Objekte
Leitbeispiel – Bibliothekenverwaltung
• Bibliotheken:
– z.B. Informatik, Mathematik, E-Technik, LHB, ...
• Bücher:
– Autor, Titel, Kennung, Entleihstatus, Leihfrist ....
• Benutzer:
– Entleiher, Universitätsangestellte, Professoren
– Bibliotheksmitarbeiter
• Transaktionen:
– Ausleihen, Verlängerung, Rückgabe
– Entnahme, Neubeschaffung, Status ändern
• Dienstleistungen:
– Verwaltung, Mahnung, Informationssystem
Informatik I, Wintersemester 1993/94
70
Klassen und Objekte
Objekte
• extern: Bestandteil der realen Welt
• intern: Laufzeitelemente eines Softwaresystems
– strukturierte Repräsentation externer Objekte
– abstrahiert auf verarbeitungsrelevante Komponenten
• Einfaches Beispiel
‘‘Bertrand Meyer’’
‘‘Objektorientierte Software-entwicklung’’
1990
‘‘Hanser’’
547
‘‘D4.1 Mey 8267’’
4 Zeichenketten, 2 ganze Zahlen
Möglicherweise Repräsentation eines Buches
Informatik I, Wintersemester 1993/94
71
Klassen und Objekte
Objekt in einem Objekt
‘‘Meyer’’
‘‘Bertrand’’
1946
????
Frankreich
‘‘Objektorientierte Software-entwicklung’’
1990
‘‘Hanser’’
547
‘‘D4.1 Mey 8267’’
Darstellungsform nicht empfehlenswert (Konsistenzprobleme)
Informatik I, Wintersemester 1993/94
72
Klassen und Objekte
Verweise
PP
PP
PP
‘‘Eiffel -- the PLanguage’’
PP
P
1992
PP
‘‘Prentice Hall’’
PP
PP
PP
PP
PP
PP
595
PP
PP
PP
PP
PP
PP
‘‘Meyer’’
PP
q
P
‘‘D4.1 Mey 8935’’
‘‘Bertrand’’
1946
-
‘‘Objektorientierte Software-entwicklung’’
1990
????
Frankreich
‘‘Hanser’’
547
‘‘D4.1 Mey 8267’’
Informatik I, Wintersemester 1993/94
73
Klassen und Objekte
Feste Datenstrukturbeschreibung
Darstellung von Personen ==
– 20 Zeichen Name,
– 25 Zeichen Vornamen,
– je 4 Stellen Geburts- und Todesjahr,
– 15 Stellen Nationalität
Meyer
Bertrand
1946????Frankreich
....................................................................
Kreitz
Christoph Sebastian Maxim1957????Deutschland
unflexibel + überspezifiziert
Informatik I, Wintersemester 1993/94
74
Klassen und Objekte
Abstrakte Datentypen
Vollständige, genaue und eindeutige Beschreibung
einer Datenstruktur ohne Überspezifikation
• Welche Typen werden eingeführt?
• Welche Funktionen (Dienstleistungen) werden eingeführt?
• Was sind die Vorbedingungen für die Anwendbarkeit der
Funktionen?
• Welche Axiome (Eigenschaften) erfüllen die Funktionen?
Objektorientierter Entwurf ist
Entwicklung von Softwaresystemen als strukturierte Sammlung von
Implementierungen abstrakter Datentypen
Informatik I, Wintersemester 1993/94
75
Klassen und Objekte
Abstrakter Datentyp Liste
TYPES:
List[X]
FUNCTIONS:
empty: List[X] → BOOLEAN
new: → List[X]
cons: X×List[X] → List[X]
head: List[X] 6→ X
tail: List[X] → List[X]
PRECONDITIONS: pre head(L:List[X]) = (not empty(L))
AXIOMS:
∀x:X . ∀L:List[X] .
empty(new())
not empty(cons(x,L))
head(cons(x,L)) = x
tail(cons(x,L)) = L
tail(new()) = new()
Informatik I, Wintersemester 1993/94
76
Klassen und Objekte
Klassen in Eiffel
Statische Beschreibung einer Menge möglicher Objekte
– Attribute: Struktur der Objekte
– Routinen: erlaubte Operationen auf Objekten
→ Features der Klasse
Einfaches Beispiel
class PERSON feature
name, vornamen: STRING;
geburtsjahr, todesjahr: INTEGER;
nationalität: STRING
end -- class PERSON
– Schlüsselworte class, feature, end
– Trennzeichen “;”
– Kommentaranfang “--”
Informatik I, Wintersemester 1993/94
77
Klassen und Objekte
Klassendefinition mit implizitem Verweis
class BUCH feature
autor: PERSON;
titel: STRING
erscheinungsdatum: INTEGER;
verlag: STRING;
anzahl seiten, kennung: INTEGER
end -- class BUCH
Attribute, deren Typ kein einfacher Datentyp ist,
beschreiben Verweise auf Objekte dieses Typs
einfache Typen: INTEGER, BOOLEAN, CHARACTER, REAL, DOUBLE
Informatik I, Wintersemester 1993/94
78
Klassen und Objekte
Kunden und Lieferanten
• Eine Klasse A heißt Kunde der Klasse B,
wenn A eine Deklaration der Form entity:B enthält.
B heißt in diesem Fall Lieferant von A
• Selbstreferenz ist möglich
class PERSON feature
name, vornamen: STRING;
geburtsjahr, todesjahr: INTEGER;
nationalität: STRING;
vater, mutter: PERSON
end -- class PERSON
• Zyklische Objektstrukturen sind erlaubt
Informatik I, Wintersemester 1993/94
79
Klassen und Objekte
Routinen
Wesentliche Dienstleistungen einer
Klasse
• Prozeduren können durch Ausführung einer Aktion
den Zustand eines Objektes ändern
• Funktionen berechnen Werte, die sich aus dem Zustand
der Objekte ergeben.
Informatik I, Wintersemester 1993/94
80
Klassen und Objekte
Aufruf von Routinen
Aufrufe von Funktionen, Prozeduren und Komponentenzugriffen
auf ein Objekt werden einheitlich in der
Punktnotation entity.operation(argumente) ausgedr ückt
Sei p Objekt der Klasse PERSON
• Komponentenzugriff: p.vornamen
= Komponente von p, die dem Attribut vornamen entspricht
• Funktion: p.anzahl vornamen
= berechnete Anzahl der Vornamen des Objektes p
• Funktion: p.alter(1993)
= berechnetes Alter der mit p bezeichneten Person im Jahre 1993
• Prozedur: p.setze todesjahr(1993)
Veränderung des Zustandes von p: die Komponente, welche dem Attribut
todesjahr entspricht wird auf 1993 gesetzt
Informatik I, Wintersemester 1993/94
81
Klassen und Objekte
Definition von Routinen
class PERSON feature
name, vornamen, nationalität: STRING;
geburtsjahr, todesjahr: INTEGER;
vater, mutter: PERSON;
anzahl vornamen: INTEGER is -- Anzahl der Vornamen bestimmen
do Result := Anzahl der Vornamen in vornamen
end; -- anzahl vornamen
alter(jahr:INTEGER): INTEGER is -- Alter im gegebenen Jahr bestimmen
do Result := jahr - geburtsjahr
end; -- alter
setze todesjahr(jahr:INTEGER) is -- todesjahr auf jahr setzen
do todesjahr := jahr
end -- setze todesjahr
end -- class PERSON
– Schlüsselwortfolge is...do...end
– Formale Argumente in Klammern: Namen:Typ
– Funktionen haben Ergebnistyp – Ergebnis in Result
– Rumpf: do anweisung1; anweisung2; ...;anweisungn end
Informatik I, Wintersemester 1993/94
82
Klassen und Objekte
Lokale Variablen
anzahl vornamen: INTEGER is
-- Anzahl der Vornamen bestimmen
local vornamen liste : ARRAY[STRING]
do vornamen liste := einzelne Vornamen aus vornamen
Result := Länge der Liste vornamen liste
end; -- anzahl vornamen
optionales Schlüsselwort local im Routinenrumpf
Nur bekannt innerhalb der Routine
Informatik I, Wintersemester 1993/94
83
Klassen und Objekte
Entities / Größen
Bezeichner für Objekte, die folgende Formen annehmen können
• ein Klassenattribut
• eine lokale Variable einer Routine
• ein formales Argument einer Routine
• Result – vordefinierte Größe für Funktionsergebnisse
Informatik I, Wintersemester 1993/94
84
Klassen und Objekte
Vordefinierte Operationen
!!entity
Standard-Erzeugung von Objekten
!!entity.init(argumente)
Nicht-Standard-Erzeugung von Objekten
entity := Ausdruck
Zuweisung (limitiert)
entity.attribut
(Komponenten)Zugriff (limitiert)
entity := Void
Auflösen eines Verweises
entity = Void
Überprüfung des Verweiszustandes
entity := clone(entity 1)
(Flache) Duplizierung von Objekten
entity := deep clone(entity 1) Tiefe Duplizierung von Objekten
entity.copy(entity 1)
(Flache) Kopie von Objektinhalten
entity.deep copy(entity 1)
Tiefe Kopie von Objektinhalten
entity 1 = entity 2
Vergleich von Objekten
equal(entity 1,entity 2)
(Flacher) Vergleich von Objektinhalten
deep equal(entity 1,entity 2)
Tiefer Vergleich von Objekten
Current
Verweis auf das aktuelle Objekt
Informatik I, Wintersemester 1993/94
85
Routinen
Vorkommen von Attributen
• Ist entity ein Attribut mit Klassentyp K, a ein Attribut
von K, dann bezeichnet entity.a die Komponente a des
Objektes, das zur Laufzeit mit entity verbunden ist
entity.a heißt qualifiziertes Vorkommen von a
• Unqualifiziertes Vorkommen von Attributen beschreibt
das aktuelle Exemplar der Klasse
• Wertzuweisungen nur an aktuelles Exemplar
• Externe (qualifizierte) Zugriffe nur über Dienstleistungen
• Selbstreferenz über die Funktion Current
Informatik I, Wintersemester 1993/94
86
Routinen
Klassendefinition mit Initialisierungsprozedur
class PERSON
creation
init mit namen
feature
.
.
init mit namen(n,v:STRING) is
-- Initialisiere Person
-- mit Vornamen und Namen
do
name := n;
vornamen := v
end; -- init mit namen
.
.
end -- class PERSON
Informatik I, Wintersemester 1993/94
87
Routinen
Geheimnisprinzip
• Interne Darstellung der Daten nach außen unsichtbar
• Direktes Lesen und Schreiben von Daten nicht erlaubt
Veränderung und Auswertung nur über prozedurale Schnittstellen
⇒ qualifizierte Vorkommen von Attributen sind Funktionen
⇒ Zuweisungen nur innerhalb der deklarierenden Klasse
⇒ nicht alle Attribute nach außen hin zugänglich
selektiver Export von Features möglich
– Angabe in geschweiften Klammern hinter feature
feature {Klasse1,...,Klassen} featurelist
Informatik I, Wintersemester 1993/94
88
Geheimnisprinzip
Klassendefinition mit Datenkapselung
class PERSON
creation init mit namen
feature{}
vornamen liste: STRING;
feature
init mit namen(n,v:STRING) is ... do ... end;
name: STRING;
vornamen: STRING is ... do ... end;
anzahl vornamen: INTEGER is ... do ... end;
geburtsjahr, todesjahr: INTEGER;
alter(jahr:INTEGER): INTEGER is ... do ... end;
setze todesjahr(jahr:INTEGER) is ... do ... end;
vater, mutter: PERSON;
geschwister: ARRAY[PERSON] is ... do ... end;
großeltern: ARRAY[PERSON] is ... do ... end;
nationalität: STRING
end -- class PERSON
Informatik I, Wintersemester 1993/94
89
Geheimnisprinzip
Selektiver Export von Features
class PERSON
creation init mit namen
feature
init mit namen(n,v:STRING) is ... do ... end;
name: STRING;
vornamen: STRING is ... do ... end;
anzahl vornamen: INTEGER is ... do ... end;
feature{EINWOHNERMELDEAMT}
geburtsjahr, todesjahr: INTEGER;
alter(jahr:INTEGER): INTEGER is ... do ... end;
vater, mutter: PERSON;
nationalität: STRING
feature{STANDESAMT}
setze todesjahr(jahr:INTEGER) is ... do ... end;
feature{EINWOHNERMELDEAMT, PERSON}
geschwister: ARRAY[PERSON] is ... do ... end;
feature{PERSON}
großeltern: ARRAY[PERSON] is ... do ... end;
feature{}
vornamen liste: STRING;
end -- class PERSON
Informatik I, Wintersemester 1993/94
90
Geheimnisprinzip
Referenz-Semantik von Eiffel
• a:=b ist Wertzuweisung, wenn a und b von einfachem Typ
• a:=b ist Verweiszuweisung – keine Objektzuweisung –
wenn a und b von Klassentyp
• a=b ist Wertevergleich zwischen Größen einfacher Typen
• a=b ist Vergleich der Verweise zwischen Größen von
Klassentypen.
⇒ Einfache Typen haben Copy-Semantik
⇒ Klassentypen haben Referenz-Semantik
Klassentypen können mit Copy-Semantik vereinbart werden
Informatik I, Wintersemester 1993/94
91
Copy- und Referenz-Semantik
Klassen mit Copy-Semantik
• Klassendefinition mit expanded
expanded class INTPAIR
feature
left, right: INTEGER
end -- class INTPAIR
• Attributdeklaration mit expanded
y: expanded PERSON
• Konvertierungsregeln für Zuweisungen und Vergleiche
zwischen Versionen expanded und nicht-expanded nötig
Informatik I, Wintersemester 1993/94
92
Copy- und Referenz-Semantik
Listenklassen
class INTLIST
creation new
feature
empty: BOOLEAN is -- Liste leer ?
do...end;
new is -- Erzeuge leere Liste
do...end;
cons(n:INTEGER) is -- Hänge n an
do...end;
head: INTEGER is -- Erstes Element
do...end;
tail is -- Entferne erstes
do...end
end -- class INTLIST
Informatik I, Wintersemester 1993/94
class REALLIST
creation new
feature
empty: BOOLEAN is -- Liste leer ?
do...end;
new is -- Erzeuge leere Liste
do...end;
cons(r:REAL) is -- Hänge n an
do...end;
head: REAL is -- Erstes Element
do...end;
tail is -- Entferne erstes
do...end
end -- class REALLIST
93
Generizität
Generische Klassendefinition
class LIST[X]
creation new
feature
empty: BOOLEAN is -- Ist die Liste leer ?
do...end;
new is -- Erzeuge leere Liste
do...end;
cons(r:X) is -- Hänge r vor die Liste
do...end;
head: X is -- Erstes Element
do...end;
tail is -- Entferne erstes Element
do...end
end -- class LIST[X]
• formale generische Parameter in eckigen Klammern
mehrere generische Parameter möglich
• Konkrete Deklaration von Attributen:
il: LIST[INTEGER]
personenlisten: LIST[LIST[PERSON]]
Informatik I, Wintersemester 1993/94
94
Generizität
Regeln für formale generische Parameter
Ist in einer Klassendeklaration X ein formaler generischer Parameter und x vom Typ
X, dann darf x nur benutzt werden
• als linke Seite einer Zuweisung x:=Ausdruck, wobei der Ausdruck der rechten
Seite ebenfalls vom Typ X sein muß
• als rechte Seite einer Zuweisung y:=x, wobei die Größe auf der linken Seite ebenfalls vom Typ X sein muß
• als aktuelle Argument im Aufruf einer Routine f(..,x,..), welches einem formalen Argument vom Typ X entspricht
(nur, wenn f innerhalb der gleichen Klasse wie x deklariert)
• in einem Booleschen Ausdruck der Form x=y oder x/=y (bzw. y=x oder y/=x),
wobei y vom Typ X sein muß
Informatik I, Wintersemester 1993/94
95
Generizität
Generische Klasse Felder (mit infix Deklaration)
class ARRAY[X]
creation make
feature
lower, upper, count: INTEGER;
make(min,max:INTEGER) is -- Erzeuge Feld mit Grenzen min und max
do...end;
item, infix "@" (i:INTEGER):X is -- Element mit Index i
do...end;
put(val:X,i:INTEGER) is -- Weise dem Element mit Index i
-- den Wert val zu
do...end;
.
.
end -- class ARRAY[X]
Infix-Bezeichner in ‘ ’ hinter Schlüsselwort infix nach Funktionsnamen
– erlaubt p := p array@17 statt p := p array.item(17)
Informatik I, Wintersemester 1993/94
96
Generizität
Verträge für Software-Zuverlässigkeit
• Sicherstellung von Korrektheit und Robustheit
– Garantien des Lieferanten für Benutzer einer Klasse
– Festlegung von Bedürfnissen und Verantwortlichkeiten
• Spezifikationselemente in der Implementierung sinnvoll
– Eiffel Gegenstück zu Axiomen in abstrakten Datentypen
⇒ Zusicherungen (assertions)
– Ausdruck über Zweck von Klassen, Routinen, oder Anweisungen
– während der Laufzeit überwachbar
– Dokumentation, Strukturierungs- und Verifikationshilfe
Informatik I, Wintersemester 1993/94
97
Assertions
Bestandteile der Zusicherungssprache
• Erreichbare Funktionen und Attribute, formale Argumente, Result, Kommentare
(keine Prozeduren, keine lokalen Variablen)
• Boolesche Ausdrücke (einschließlich Arithmetik)
Eiffel
logischer Operator
and
or
and then
or else
not
xor
implies
Konjunktion ∧
Disjunktion ∨
Sequentielle Konjunktion ∧
Sequentielle Disjunktion ∨
Negation ¬
Exklusive Disjunktion ∨˙
Implikation ⇒
• Semikolon zur Trennung nicht zusammengehöriger Bestandteile
n>0 ; not x=Void
• Namen für zusammengehörige Bestandteile
Positiv: n>0 ; Nichtleer: not x=Void
• old: Wert bei Eintritt in eine Routine (nur in Nachbedingungen)
Informatik I, Wintersemester 1993/94
98
Assertions
Vor- und Nachbedingungen
Beschreibung semantischer Eigenschaften von Routinen
• Vorbedingung: was muß beim Aufruf der Routine gelten?
– muß bei jedem Aufruf erfüllt sein
Schlüsselwort require vor der Anweisungsfolge
• Nachbedingung: was gilt nach Beendigung der Routine?
– Garantie im Falle eines korrekten Aufrufs
Schlüsselwort ensure direkt vor dem end
Informatik I, Wintersemester 1993/94
99
Assertions
Klassendefinition mit Vor- und Nachbedingungen
class ARRAY[X]
creation make
feature
lower, upper, count: INTEGER;
make(min,max:INTEGER) is -- Erzeuge Feld mit Grenzen min und max
do...
ensure max<min implies count = 0;
max >= min implies lower = min and upper = max;
max >= min implies count = max - min + 1
end; -- make
item, infix "@" (i:INTEGER):X is -- Element mit Index i
require lower <=i; i <= upper
do...end; -- item
put(val:X,i:INTEGER) is -- Weise val dem Element mit Index i zu
require lower <=i; i <= upper
do...
ensure item(i)=val
end; -- put
.
.
end -- class ARRAY[X]
Informatik I, Wintersemester 1993/94
100
Assertions
Nachbedingung mit old
Ist a ein Attribut, dann bezeichnet in Nachbedingungen old a den Wert der entsprechenden Objektkomponente beim Aufruf und jedes andere Vorkommen von a den Wert
bei Beendigung der Routine
resize(min,max:INTEGER) is
-- Erweitere Feld auf Grenzen min und max
do...
ensure
upper >= old upper;
lower <= old lower
end; -- resize
Informatik I, Wintersemester 1993/94
101
Assertions
Vor- und Nachbedingungen als Vertrag
require und ensure beschreiben Rechte und Pflichten
• Vorbedingung bindet den Kunden:
– die Routine wird nur in erlaubten Fällen benutzt
– andernfalls ist der Lieferant zu nichts verpflichtet
• Nachbedingung bindet Lieferantenklasse
– Kunde kann sich auf versprochene Leistung verlassen
(falls die Vorbedingung eingehalten wurde)
– macht Verifikation von Routinen notwendig
• Vertrag erspart überflüssige Kontrollen
– Genauigkeit abhängig von Vertrauen
und Vielfalt der Anwendungsgebiete
Informatik I, Wintersemester 1993/94
102
Assertions
Klasseninvarianten
Beschreibung globaler Eigenschaften von Objekten
Invariante: unveränderliche Eigenschaft der Klasse selbst
– muß in jedem “stabilen” Zustand erfüllt sein
Schlüsselwort invariant am Ende der Klassendeklaration
Zusicherung I ist genau dann eine korrekte Klasseninvariante einer Klasse C, wenn
eine der beiden folgenden Bedinungen erfüllt ist
• I gilt nach jedem Aufruf einer Erzeugungsprozedur von C mit Argumenten,
welche die Vorbedingungen erfüllen.
• I gilt nach jedem Aufruf einer exportierten Routine mit Argumenten, welche die
Vorbedingungen erfüllen, die auf Objekte angewandt wurde, welche I erfüllen.
Informatik I, Wintersemester 1993/94
103
Assertions
class ARRAY[X]
creation make
feature
lower, upper, count: INTEGER;
make(min,max:INTEGER) is -- Erzeuge Feld mit Grenzen min und max
do...
ensure max<min implies count = 0;
max >= min implies lower = min and upper = max
end; -- make
item, infix "@" (i:INTEGER):X is -- Element mit Index i
require lower <=i; i <= upper
do...end; -- item
put(val:X,i:INTEGER) is -- Weise val dem Element mit Index i zu
require lower <=i; i <= upper
do...
ensure
item(i)=value
end; -- put
resize(min,max:INTEGER) is -- Erweitere Feld auf min und max
do...
ensure
upper >= old upper; lower <= old lower
end; -- resize
.
.
invariant
nonnegative size: count >= 0;
consistent size: count = upper - lower + 1
end -- class ARRAY[X]
Informatik I, Wintersemester 1993/94
104
Assertions
Unvollständige Zusicherungen
class LIST[X]
creation new
feature
empty: BOOLEAN is -- Ist die Liste leer ?
do...end;
new is -- Erzeuge leere Liste
do...
ensure empty
end; -- new
cons(r:X) is -- Hänge r vor die Liste
do...
ensure not empty; head = r
-- tail würde jetzt old liefern
end; -- cons
head: X is -- Erstes Element
require not empty
do...end; -- head
tail is -- Entferne erstes Element
do...
ensure old empty implies empty
end -- tail
end -- class LIST[X]
Informatik I, Wintersemester 1993/94
105
Assertions
VERERBUNG
• Konzeptionelle Beziehung zwischen Klassen:
– Spezialisierung eines Konzepts (Erben)
– Generalisierung eines Konzepts (Vorfahren)
– Kombination von Konzepten (Mehrfachvererbung)
• Nachkommen erben Rechte und Pflichten der Eltern
– Unqualifizierter Aufruf geerbter features
– Modifikation geerbter features möglich
– Kontrakte der Vorfahren sind einzuhalten
• Vererbung ist transitiv
Steigert Erweiterbarkeit und Wiederverwendbarkeit
Informatik I, Wintersemester 1993/94
106
Vererbung
Vererbung: Modifikation geerbter features
• Änderung des Export-Status
• Redefinition
• Umbenennung
• Vervielfältigung und Selektion bei wiederholtem Erben
• Erweiterung von Zusicherungen
Informatik I, Wintersemester 1993/94
107
Vererbung
Vererbung: Neue Möglichkeiten
• Polymorphismus
• Dynamisches Binden
• Deklaration durch Assoziation
• Deferred Classes
• Kombination von Klassen
Informatik I, Wintersemester 1993/94
108
Vererbung
Klassendefinition mit Vererbung
class ENTLEIHER
inherit PERSON
feature
straße, hausnummer, stadt: STRING;
postleitzahl : INTEGER;
ausweisnummer: INTEGER
end -- class ENTLEIHER
----------------------------------------------------------• ENTLEIHER ist Erbe (Nachkomme) von PERSON
PERSON ist Vorfahr von ENTLEIHER
• Elternklassen nach Schlüsselwort inherit
• Features der Elternklasse automatisch verfügbar
Spezifische features werden ergänzt
• Initialisierungsprozedur muß neu vereinbart werden
Informatik I, Wintersemester 1993/94
109
Vererbung
Vererbung als Diagramm
'
$
PERSON
$
'
*
&
Y
H
H %
HH
HH
HH
ENTLEIHER
&
'
H
H
$
ARBEITNEHMER
%
&
%
ENTLEIHER und ARBEITNEHMER erben von PERSON
Informatik I, Wintersemester 1993/94
110
Vererbung
Export geerbter features
class ENTLEIHER
inherit PERSON
export
name, vornamen, geburtsdatum
end -- feature-Anpassung von PERSON
feature
straße, hausnummer, stadt: STRING;
postleitzahl : INTEGER;
ausweisnummer: INTEGER
end -- class ENTLEIHER
-----------------------------------------------------------
• Schlüsselwort export
• Schlüsselwort end beendet Modifikationen geerbter features
• Ohne export-Klausel gilt alter Export-Status
Informatik I, Wintersemester 1993/94
111
Vererbung
Selektiver Export geerbter features
class ARBEITNEHMER
inherit PERSON
export
{ARBEITGEBER} name, vornamen, geburtsjahr;
{FINANZAMT} all
end -- feature-Anpassung von PERSON
feature
adresse: ADRESSEN;
gehaltsklasse: STRING;
gehalt: REAL is -- Gehalt berechnen
do Result := Gehalt aus Tabelle nach gehaltsklasse end
end -- class ARBEITNEHMER
-------------------------------------------------------------Syntax ähnlich wie bei feature-Klausel
export
{ Klassenliste1} featurelist 1;
.
.
{ Klassenlisten} featurelist n
Informatik I, Wintersemester 1993/94
112
Vererbung
Vererbungsregeln I
• Regel der Featureanwendung:
Ist eine Größe entity vom Klassentyp K, so ist die Anwendung entity.f eines
feature f nur dann zulässig, wenn f in einem Vorfahren von K definiert wurde.
• Regel des selektiven Exports:
Ein an eine Klasse K selektiv exportiertes feature f darf in allen Nachkommen
von K benutzt werden.
Informatik I, Wintersemester 1993/94
113
Vererbung
Vererbung mit Redefinition
class UNI-ANGESTELLTE
inherit ARBEITNEHMER
redefine
gehalt
export
{ARBEITGEBER} name, vorname, geburtsjahr, adresse, gehaltsklasse;
{FINANZAMT} all
end -- feature-Anpassung von ARBEITNEHMER
feature
universität: STRING;
fachbereich, raum, telephon: INTEGER;
gehalt: REAL is -- Gehalt berechnen
do Result := Gehalt nach Alter und gehaltsklasse end
end -- class UNI-ANGESTELLTE
--------------------------------------------------------------------• Schlüsselwort redefine benennt neudefinierte features
• Schlüsselwort all zur Abkürzung
• Typdeklarationen und Zusicherungen beachten!
Informatik I, Wintersemester 1993/94
114
Vererbung
Vererbungsregeln II
Regel der Redefinition:
Ein Attribut, Funktionsergebnis oder formales Routinenargument darf in einer
Erbenklasse mit einem neuen Typ redeklariert werden, wenn der neue Typ
konform zum ursprünglichen ist.
Das Attribut oder die zugehörige Routine gilt als redefiniert.
Der Rumpf einer Routine kann redefiniert werden, solange die obige
Typeinschränkung nicht verletzt wird. Parameterlose Funktionen dürfen als
Attribute redefiniert werden.
Redefinierte features, die nicht ursprünglich deferred waren, müssen in einer
entsprechenden redefine Klausel aufgeführt werden.
Informatik I, Wintersemester 1993/94
115
Vererbung
Konformität
B ist konform zu A, wenn eine der folgenden Bedingungen erfüllt ist
1. A und B sind identisch,
2. A ist von der Form expanded B oder B ist von der Form expanded A,
3. A ist REAL oder DOUBLE und B ist INTEGER oder REAL,
4. A ist eine Klasse ohne generische Parameter und B ist eine Klasse, die A in der
inherit-Klausel aufführt,
5. A hat die Form G[A1, ..An] und B hat die Form G[B1, ..Bn], wobei G eine generische Klasse ist und jedes der Bi zu Ai konform ist,
6. B hat die Form like anchor und der Typ von anchor ist konform zu A,
7. Es gibt einen Typen C mit der Eigenschaft, daß A konform ist zu C und C konform
zu B.
Informatik I, Wintersemester 1993/94
116
Vererbung
Polymorphismus
Fähigkeit, verschiedene Formen anzunehmen
Professorenobjekt
k
Q
Q
Q
Q
Studentenobjekt
K
A
A
Q
Q
benutzerliste
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
A
A
A
A
Q
A
A
A
A
A
A
Mitarbeiterobjekt
Professorenobjekt
-
Keine Konvertierung nötig
Informatik I, Wintersemester 1993/94
117
Vererbung
3
Vererbungsregeln III
• Regel der Typverträglichkeit:
Eine Zuweisung der Form x:=y, wobei x vom Typ A und y vom Typ B ist, ist
nur dann zulässig, wenn B konform zu A ist.
Gleiches gilt für den Aufruf einer Routine mit formalem Parameter x und
aktuellem Parameter y, wobei x vom Typ A und y vom Typ B ist. Der Aufruf ist
nur dann zulässig, wenn B konform zu A ist.
• Regel des Dynamischen Bindens:
Ist x vom Klassentyp A und r eine in A deklarierte Routine, dann wird ein
Routinenaufruf der Form x.r an die Implementierung gebunden, welche
innerhalb der Klasse definiert wurde, zu der das mit x zur Laufzeit verbundene
Objekt gehört.
Informatik I, Wintersemester 1993/94
118
Vererbung
Deklaration durch Assoziation
class ARRAY[X]
.
.
put(val:like item,i:INTEGER)
is -- Weise val dem Element mit Index i zu
require lower <= i; i <= upper
do...
ensure
item(i)=val
end; -- put
.
.
end -- class ARRAY[X]
----------------------------------------------------------------
• Binde Typ einer Größe an den einer anderen (Anker)
• Syntax der Deklaration: entity: like anchor
• Möglichkeiten für anchor:
– Attribut, Funktion, formales Routinenargument, Current
Informatik I, Wintersemester 1993/94
119
Vererbung
Aufgeschobene (deferred) Klassen
• Klassen mit (evtl. geerbten) nichtausführbaren Routinen
– Routinendeklaration enthält Schlüsselwort deferred
anstelle des Anweisungsteils
– Klasse muß als deferred class deklariert werden
• Eiffel-Gegenstück zum abstrakten Datentyp
– Leistungen werden spezifiziert, aber nicht implementiert
– Spezielle Implementierung in Erbenklassen
• Anwendungen:
– Abstrakter Entwurf und Verfeinerung in Eiffel
– partielle Implementierungen
– Ersatz für Prozedurparameter in Routinen
– Oberklasse für Klassen mit konzeptionellen Gemeinsamkeiten
polymorphe Anwendung gleichartiger Routinen
Informatik I, Wintersemester 1993/94
120
Vererbung
Aufgeschobene Klasse von Listen
deferred class LIST[X]
feature
length: INTEGER;
empty: BOOLEAN is -- Ist die Liste leer ?
do length=0 end;
new is -- Erzeuge leere Liste
deferred
ensure empty
end; -- new
cons(r:X) is -- Hänge r vor die Liste
deferred
ensure not empty; head = r -- tail würde old liefern
end; -- cons
head: X is -- Erstes Element
require not empty
deferred end; -- head
tail is -- Entferne erstes Element
deferred
ensure old empty implies empty
end -- tail
invariant nonnegative size: size >= 0
end -- class
LIST[X]
Informatik I, Wintersemester 1993/94
121
Vererbung
Vererbungsregeln IV
• Regel der Nicht-Erzeugung aufgeschobener Klassen:
Auf Größen, deren Typ eine aufgeschobene Klasse ist, darf keine
Initialisierungsprozedur angewandt werden.
• Regel der Feature-Umbenennung:
Features, die in einer rename-Unterklausel umbenannt wurden, können in
export- und redefine-Klauseln nur unter ihrem neuen Namen angesprochen
werden.
Informatik I, Wintersemester 1993/94
122
Vererbung
Mehrfachvererbung: Realisierung einer deferred class
class FIXED LIST[X]
inherit LIST[X];
ARRAY[X] export {} all
creation new
feature
-- Bereits effektiv deklariert: length: INTEGER;
-empty: BOOLEAN
new is -- Erzeuge leere Liste
do make(1,0); length:=0
end; -- new
cons(r:X) is -- Hänge r vor die Liste
do if length = upper then resize(1,length+1) end;
length := length+1;
put(r,length)
end; -- cons
head: X is -- Erstes Element
do Result := item(length)
end; -- head
tail is -- Entferne erstes Element
do if length/=0 then length:=length-1 end
end -- tail
end -- Informatik
classI, LIST[X]
Wintersemester 1993/94
123
Vererbung
Namenskonflikt
class STUDENT
feature
universität: STRING;
fachbereich: INTEGER;
matrikelnummer: INTEGER
end -- class STUDENT
class HILFSKRAFT
inherit
UNI-ANGESTELLTE
.
.
end; -- feature-Anpassung von UNI-ANGESTELLTE
STUDENT
.
.
end; -- feature-Anpassung von STUDENT
feature
.
.
end -- class HILFSKRAFT
– Feature fachbereich erscheint doppelt
– Mehrfachvererbungen mit Namenskonflikten sind verboten
⇒ Umbenennung nötig
Informatik I, Wintersemester 1993/94
124
Vererbung
Umbenennung
class HILFSKRAFT
inherit
UNI-ANGESTELLTE
redefine
gehalt
export
name, vornamen, adresse, gehalt
end; -- feature-Anpassung von UNI-ANGESTELLTE
STUDENT
rename
fachbereich as studienfachbereich
export
universität, studienfachbereich
end -- feature-Anpassung von STUDENT
feature
monatsstunden: INTEGER;
gehalt: REAL is -- Gehalt berechnen
do Result := Festgehalt nach monatsstunden end
end -- class HILFSKRAFT
Informatik I, Wintersemester 1993/94
125
Vererbung
Vererbungsregeln V
• Regel des wiederholten Erbens:
Bei wiederholtem Erben wird jedes feature des gemeinsamen Vorfahren als
gemeinsam genutzt (shared) angesehen, wenn es auf dem gesamten
Vererbungspfad nicht umbenannt wurde.
Features, die auf mindestens einem Wege umbenannt wurden, werden als
vervielfältigt (replicated) angesehen.
• Regel der Generizität bei wiederholtem Erben:
Bei wiederholtem Erben darf der Typ eines gemeinsam genutzten features in der
Elternklasse kein generischer Parameter sein.
Eine gemeinsam genutzte Routine darf in der Elternklasse keine formalen
Argumente enthalten, deren Typ ein generischer Parameter ist.
Informatik I, Wintersemester 1993/94
126
Vererbung
Vererbungsregeln VI
• Regel der Umbenennung:
In einer Klasse K tritt ein Namenskonflikt auf, wenn zwei Eltern E1 und E2
von K ein feature mit demselben Namen f enthalten.
Ein Namenskonflikt ist erlaubt, wenn f in einem gemeinsamen Vorfahren V von
E1 und E2 erstmalig definiert wurde, auf keinem Vererbungspfad von V nach
E1 und nach E2 umbenannt wurde und in seiner Typdeklaration nicht an
generische Parameter von V gebunden ist.
Nicht erlaubte Namenskonflikte müssen durch Umbenennung aufgelöst werden.
Informatik I, Wintersemester 1993/94
127
Vererbung
Vererbungsregeln VII
• Regel der Elterninvarianten:
Die Invarianten aller Eltern einer Klasse gelten für die Klasse selbst.
• Regel der Zusicherungsredefinition:
Ist r eine Routine der Klasse K und s eine Redefinition von r in einem Nachkommen
von K, so müssen die Vorbedingungen von s schwächer sein als die von r und die
Nachbedingungen stärker.
– Fehlt in einer redefinierten Routine Vor- oder Nachbedingung, so wird die Vorbzw. Nachbedingung der ursprünglichen Version übernommen.
– Vorbedingungen können nur durch eine require else-Klausel abgeschwächt werden.
– Nachbedingungen können nur durch eine ensure then-Klausel verstärkt werden.
Informatik I, Wintersemester 1993/94
128
Vererbung
Kriterien für gute Entwurfsmethoden
Zerlegbarkeit in Module
Zusammensetzbarkeit aus Modulen
Verständlichkeit der Module
Stetigkeit der Module
Modularer Schutz
Eiffel unterstützt diese Kriterien
Informatik I, Wintersemester 1993/94
129
Entwurfsmethodik
Entwurfsprinzipien
Moduln müssen Klassen entsprechen
– fördert Verständlichkeit und Kombinierbarkeit
Minimale Kommunikation zwischen Moduln
– fördert Stetigkeit
Schmale Schnittstellen
– fördert Stetigkeit und modularen Schutz
Vollständige Beschreibung der Schnittstellen
– fördert Zerlegbarkeit, Kombinierbarkeit, Verständlichkeit, Stetigkeit
Geheimnisprinzip
– fördert Stetigkeit und modularen Schutz
Informatik I, Wintersemester 1993/94
130
Entwurfsmethodik
Analyse und Gestaltung
Entwurf von Softwaresystemen
= Gesetzmäßigkeiten des Umfelds entdecken
+ Modell eines Ausschnitts der Realität gestalten
Entwurfsphasen
– Grobspezifikation
Analyse der nach außen sichtbaren Leistungen
– Feinspezifikation
Zerlegung des Systems in unabhängige interne Komponenten
Einfallsreichtum, Erfahrung, Training erforderlich
Informatik I, Wintersemester 1993/94
131
Entwurfsmethodik
Grundideen des objektorientierten Entwurfs
dezentrale Architektur
überschaubare, unabhängige, gleichberechtigte Einheiten
• Klassen sind der einzige Strukturierungsmechanismus
– keine Schachtelung von Klassen
– Unabhängigkeit (nur Benutzung und Vererbung)
• Dienstleistungen werden gleichermaßen bereitgestellt
– keine Operationen mit höherer oder niedriger Bedeutung
– keine Vorschriften über Reihenfolge des Aufrufs
• Keine Beschränkung der Anzahl der Dienstleistungen
• Bottom-up Entwurf sinnvoll
– Aktivierung fertiger Programmteile anstreben
– Neue Klassen allgemein genug gestalten
• Zentralistisches Denken ablegen
Informatik I, Wintersemester 1993/94
132
Entwurfsmethodik
Wie sinnvolle Klassen identifizieren?
• Lerne, vorhandene Entwürfe zu analysieren
– Stärken und Schwächen beurteilen
– Erfahrungen für eigene Entwürfe sammeln
– Teamarbeit: Brainstorming und Kritik
– Selbst Vorschläge machen und kritisieren lassen
• Für Routineprobleme Eiffel-Bibliotheken durchforsten
• Klassen an externen Objekten orientieren
– Daten, die sich nicht ändern, sind keine Objekte
– Unnötige Klassen vermeiden
Informatik I, Wintersemester 1993/94
133
Entwurfsmethodik
Schnittstellentechniken
• Strikte Trennung von Prozeduren und Funktionen
– Funktionen sollen nur Werte berechnen
– Seiteneffekte in Funktionen vermeiden
• Datenbehälter aktiv gestalten
– mehr als nur Sammlungen von Information
– selbständig arbeitender Betrieb (z.B. durch einen Cursor)
• Eine Schnittstelle für mehrere Implementierungen
– Schnittstelle im Oberbegriff
– spezielle Implementierungen in Erbenklassen
• Mehrere Schnittstellen für eine Implementierung
– Implementierung im (geheimen) Oberbegriff
– Verschiedene Schnittstellen für verschiedene Sichten
Informatik I, Wintersemester 1993/94
134
Entwurfsmethodik
Vererbungstechniken
Vererbung gezielt einsetzen
• Vererbung beschreibt Spezialfälle der Elternklasse
– In anderen Fällen Benutzung über Schnittstellen verwenden
– Ausnahmen von dieser Regel können sinnvoll sein
• Verallgemeinerungen erzeugen
– von Hand durch Editieren des Spezialfalls
– in spezielleren Klassen Erbklausel mit Redefinition einfügen
• Redefinition
– falls für Erbenklasse effizientere Implementierung verfügbar
– Redefinition von Funktionen als Attribute sorgfältig abwägen
– Semantik der redefinierten Routine muß erhalten bleiben
Informatik I, Wintersemester 1993/94
135
Entwurfsmethodik
Bibliothekenverwaltung: Analyse I
• Bücher
– haben Autor, Titel, Themengebiet und Kennung
– sind entleihbar, Präsenzexemplar, Semesterapparat oder ausgeliehen
– Ausleihdaten: letztes Ausleihdatum, Ausleihfrist, Rückgabedatum
– Ein Buch gehört zu genau einer Bibliothek
– Eine Bibliothek kann mehrere Exemplare eines Buchs
(mit verschiedenen Kennungen) haben
..
– Mehrere Bibliotheken können das gleiche Buch enthalten.
• Entleiher
– können entleihbare Bücher aus einer Bibliothek entnehmen,
deren Bibliotheksausweis sie besitzen
– können Bücher zu einer Bibliothek zurückbringen
Informatik I, Wintersemester 1993/94
136
Entwurfsmethodik
Bibliothekenverwaltung: Analyse II
• Ausleihe
– Bücher werden nach Autor und Titel ausgeliehen
– Bücher können an Entleiher ausgeliehen werden, wenn
∗ der Entleiher eine Bibliotheksausweis der Bibliothek besitzt
∗ die Bibliothek ein ausleihbares Exemplar besitzt
– Bücher können an Universitätsangestellte ausgeliehen werden, wenn
∗ der Universitätsangestellte Zugang hat
∗ die Bibliothek ein ausleihbares Exemplar oder ein Präsenzexemplar besitzt.
– Ausleihdatum und die Ausleihfrist werden vermerkt
– Leihfrist: 4 Wochen nach Entleihdatum
..
..
..
– Leihfrist für Hochschullehrer: ein Semester nach Entleihdatum
Informatik I, Wintersemester 1993/94
137
Entwurfsmethodik
Bibliothekenverwaltung: Klassen des Systems
• Selbständig agierenden Objekte der realen Welt
– Bibliotheken, Bücher, Entleiher,
– Mitarbeiter, Universitätsangestellte, Hochschullehrer
• Vorgesehene Erweiterung
– Autoren
• Wurzelklasse
– Verwaltung
• Transaktionen müssen eigenständige Klassen sein
– Ausleihe, Verlängern, Rückgabe, Entnahme, Hinzufügen
Informatik I, Wintersemester 1993/94
138
Entwurfsmethodik
Bibliothekenverwaltung: Verarbeitungsstruktur
Start: Informationen über bekannte Objekte werden geladen
• Anwender wählt Transaktion im Menü der Verwaltung
• Verwaltung bildet Transaktionsobjekt der entsprechenden Klasse, wobei
Entleiher interaktiv bestimmt wird
• Transaktionsobjekt veranlaßt Entleiher, Transaktion bei Bibliothek zu
beantragen
• Entleiher beantragt Transaktion zu der er berechtigt ist
• Bibliothek bestimmt Transaktionsdaten und löst im konkreten Buch Eintragen
der Daten aus
• Wiederholung bis Anwender beendet
Ende: Informationen werden gesichert
Informatik I, Wintersemester 1993/94
139
Entwurfsmethodik
Bibliothekenverwaltung:
Leistungen von BIB VERWALT
Dienstleistung
Kunde
bestehende Objekte laden
Start
Datum anpassen
Start
Ständige Benutzerinteraktion initiieren
Start
Bibliothek auswählen
Anwender
Transaktion auswählen und auslösen
Anwender
Datum verändern
Anwender
bestehende Objekte sichern
Ende
Datum mitteilen
BIBLIOTHEK
Informatik I, Wintersemester 1993/94
140
Entwurfsmethodik
Bibliothekenverwaltung:
Leistungen von TRANSAKTION und Erben
Klasse
Dienstleistung
Kunde
TRANSAKTION
Transaktion durchführen (deferred)
BIB VERWALT
Entleihername eingeben
Anwender
AUSLEIHE
Transaktion erzeugen mit Bibliothek
BIB VERWALT
Erbe
Transaktion durchführen
BIB VERWALT
VERLÄNGERN
Transaktion erzeugen mit Bibliothek
BIB VERWALT
Erbe
Transaktion durchführen
BIB VERWALT
RÜCKGABE
Transaktion erzeugen mit Bibliothek
BIB VERWALT
Erbe
Transaktion durchführen
BIB VERWALT
ENTNAHME
Transaktion erzeugen mit Bibliothek
BIB VERWALT
Erbe
Transaktion durchführen
BIB VERWALT
HINZUFÜGEN
Transaktion erzeugen mit Bibliothek
BIB VERWALT
Erbe
Transaktion durchführen
BIB VERWALT
Informatik I, Wintersemester 1993/94
141
Entwurfsmethodik
Bibliothekenverwaltung:
Leistungen von BIBLIOTHEK
Dienstleistung
Kunde
Entleihbares Buch ausleihen
ENTLEIHER
Entleihbares Buch oder Präsenzexemplar ausleihen
UNI ANG
Entleihbares Buch oder Präsenzexemplar an Professoren ausleihen
PROFESSOR
Leihfrist verlängern
ENTLEIHER
Leihfrist für Professoren verlängern
PROFESSOR
Buch zurücknehmen
RÜCKGABE
Buch entnehmen
MITARBEITER
Buch hinzufügen
MITARBEITER
Autorname, Titel, Themengebiet oder Kennung eingeben
Anwender
Entleiher nach Namen bestimmen
TRANSAKTION
(und Erben)
Informatik I, Wintersemester 1993/94
142
Entwurfsmethodik
Implementierung zuverlässiger Programme
• Verträge erlauben bei Implementierung lokale Sicht
– nur Vor- und Nachbedingungen und Invarianten zu beachten
• Verträge müssen eingehalten werden
– ansonsten keine Aufteilung der Verantwortung möglich
⇒ Wie zuverlässige Routinen implementieren?
– Programmkonstrukte kennen und verstehen
– Zuweisung, Fallunterscheidung, Schleifen, Prozeduren ...
– elementare Ausdrücke kennen
– Konstrukte einsetzen und Korrektheit beweisen lernen
Die Korrektheit von Programmen
kann nicht mit Programmabläufen geprüft werden
Informatik I, Wintersemester 1993/94
143
Verifikation
Korrektheit von Routinen und Klassen
Ergänze Implementierung um logische Bestandteile
.
.
is -require pre
do
Anweisung1;
Anweisung2;
.
.
Anweisungn
ensure post
end
Informatik I, Wintersemester 1993/94
{ pre}}
{ Aussage1}
{ Aussage2}
{ post}}
144
Verifikation
{ pre}} instruction { post}}
Satz des Hoare-Kalküls für Programmbeweise
– für pre und post sind Ausdrücke der Prädikatenlogik
erlaubt, ergänzt um die Zusicherungssprache von Eiffel.
instruction muß eine korrekte Eiffel Anweisung sein
– ist wahr genau dann, wenn pre eine Vorbedingung dafür
ist, daß instruction terminiert und danach post gilt.
(totale Korrektheit)
Informatik I, Wintersemester 1993/94
145
Verifikation
Korrektheit von Routinen
Eine Routine r heißt genau dann (total) korrekt,
wenn für alle gültigen Argumente xr der Satz
{ prer (xr )}} Br { postr (xr )}}
ein wahrer Satz des Kalküls für Programmbeweise ist.
prer : Vorbedingung von r
postr : Nachbedingung von r
Br : Anweisungsteil (Body) von r
gültige Argumente von r: Werte, die für formale Argumente unter Einhaltung
der Typbedingungen eingesetzt werden dürfen
Informatik I, Wintersemester 1993/94
146
Verifikation
Korrektheit von Klassen
Klasse K mit Invariante INV heißt korrekt, wenn
1. Für jede exportierte Routine r von K
und alle gültigen Argumente xr ist
{ INV
∧
prer (xr )}} Bi { INV
∧
postr (xr )}}
ein wahrer Satz des Kalküls für Programmbeweise.
2. für jede Initialisierungsprozedur i von K
und alle gültigen Argumente xi gilt
{ DefaultK
∧
prei(xi)}} Br { INV
∧
posti(xi)}}
DefaultK : Zusicherung, daß alle Attribute von K
die Initialwerte ihrer Typen tragen
Informatik I, Wintersemester 1993/94
147
Verifikation
Kalkül für Verifikation
• Beweisführung = Anwendung syntaktischer Regeln
• ermöglicht neutrale Prüfung der Korrektheit (Software-TÜV)
• Schrittweise Argumentation über Einzelanweisungen
– Suche “schwache” Vorbedingung zu Nachbedingung und Anweisung
• Prädikatentransformation wp (weakest precondition)
∧
{ wp(instruction,post)}} instruction { post}}
{ pre}} instruction { post}} ⇒ (pre ⇒ wp(instruction,post))
– Manchmal unhandlich wegen Quantoren (liefert aber Vorschlag)
• Bisher nur für Copy-Semantik
Informatik I, Wintersemester 1993/94
148
Verifikation
Einfache Regeln für Programmbeweise
Verstärkung der Vorbedingung (VV)
pre ⇒ pre’, { pre’}} instruction { post}}
{ pre}} instruction { post}}
Abschwächung der Nachbedingung (AN)
{ pre}} instruction { post’}} , post’ ⇒ post
{ pre}} instruction { post}}
Kombination der Vorbedingungen
{ pre}} instruction { post}} , { pre’}} instruction { post}}
{ pre ∨ pre’}} instruction { post}}
Kombination der Nachbedingungen
{ pre}} instruction { post}} , { pre}} instruction { post’}}
{ pre}} instruction { post ∧ post’}}
Informatik I, Wintersemester 1993/94
149
Verifikation
Strukturierung von Routinen
• Zuweisung
• Routinenaufruf (qualified call)
• Zusammengesetzte Anweisungen
• Bedingte Anweisung und Fallunterscheidung (if, inspect)
• Schleife (loop)
• Überprüfung während eines Programmablaufs (check)
• Ausnahmebehandlung (rescue und retry)
• Zusätzliche Anweisungen für DEBUG (debug)
Informatik I, Wintersemester 1993/94
150
Verifikation
Wertzuweisung:
Verifikationsregel und Prädikatentransformer
{ P(Ausdruck}}
entity := Ausdruck
{ P(entity)}}
wp(entity := Ausdruck , P(entity) ) ≡ P(Ausdruck)
Informatik I, Wintersemester 1993/94
151
Verifikation
Geschützte formale Argumente von Routinen
Formalen Argumente einer Routine dürfen innerhalb des
Anweisungsteils nicht direkt verändert werden
direkte Veränderung von yi:
• Wertzuweisung der Form yi:=Ausdruck
• Veränderung des in yi enthaltenen Verweises
durch Aufruf von Initialisierungsprozeduren
Informatik I, Wintersemester 1993/94
152
Verifikation
Lokale und entfernte Routinenaufrufe
• Ein lokaler Aufruf bezieht sich auf das aktuelle Exemplar:
(ohne Argumente)
r
(mit Argumenten).
r(A1,...,An)
• Ein entfernter Aufruf wird auf ein Objekt angewandt, das
durch einen beliebigen Ausdruck dargestellt werden darf:
(einfach, ohne Argumente)
entity.r
(durch Funktion, ohne Argumente)
f(a).r
g(f(a)).h(b,x).z.r(A1 ,...,An)
(mehrstufig geschachtelt mit Argumenten).
Mehrstufig qualifizierter Aufruf u.v.r ist Abkürzung für x:=u.v ; x.r
Informatik I, Wintersemester 1993/94
153
Verifikation
Verifikationsregeln für Prozeduraufrufe
Für eine korrekte Prozedur r mit formalen Argumenten yr und
abstrakten Vor- und Nachbedingungen prer bzw. postr gilt
{ prer (Ar ,entity)}} entity.r(Ar ) { postr (Ar ,entity)}}
wp(entity.r(Ar ), postr (Ar ,entity)) ≡ prer (Ar ,entity)
Bei unqualifizierten Aufrufen wird Current für entity eingesetzt und der Ausdruck vereinfacht.
Prozedur r(y1:T1,...,yn:Tn) is do ... end hat
– abstrakte Vorbedingungen prer (y1,...,yn, actual)
– abstrakte Nachbedingungen postr (y1,...,yn, actual)
Informatik I, Wintersemester 1993/94
154
Verifikation
Verifikationsregel für Funktionsaufrufe
Für eine korrekte Funktion f mit formalen Argumenten yf
und abstrakten Vor- und Nachbedingungen pref bzw. postf
gilt
pref (Af , entity) ⇒ postf (Af , entity, entity.f(Af ))
Bei unqualifizierten Aufrufen wird Current für entity eingesetzt und der Ausdruck
vereinfacht.
Informatik I, Wintersemester 1993/94
155
Verifikation
Verifikationsregel für zusammengesetzte
Anweisungen
Anweisung1 ;...; Anweisungn
{ pre}} Anweisung1 { p}} , { p}} Anweisung1 { post}}
{ pre}} Anweisung1 ; Anweisung2 { post}}
wp(Anweisung1 ;Anweisung2 , post)
≡
wp(Anweisung1 , p(Anweisung2 , post))
Informatik I, Wintersemester 1993/94
156
Verifikation
Bedingte Anweisung – Grundform
.
.
abstand(x,y:REAL):REAL -- Abstand der Zahlen x und y
is
if x<y then Result := y-x
else Result := x-y
end
end
if Bedingung then Anweisung1 else Anweisung2 end
oder
if Bedingung then Anweisung1 end
Informatik I, Wintersemester 1993/94
157
Verifikation
Mehrere Alternativen
signum(x:REAL):REAL -- Signumfunktion
is
if x>0 then Result := 1
else if x<0 then Result := -1
else Result := 0
end
end
end
besser
signum(x:REAL):REAL -- Signumfunktion
is
if x>0 then Result := 1
elseif x<0 then Result := -1
else Result := 0
end
end
Informatik I, Wintersemester 1993/94
158
Verifikation
Bedingte Anweisung – allgemein
if Bedingung1 then Anweisung1
elseif Bedingung2 then Anweisung2
elseif Bedingung3 then Anweisung3
.
.
else Anweisungelse
end
Bedeutung:
if Bedingung1 then Anweisung1
else if Bedingung2 then Anweisung2
else if Bedingung3 then Anweisung3
.
.
else Anweisungelse
end
.
.
end
end
end
Informatik I, Wintersemester 1993/94
159
Verifikation
Komplexere Fallunterscheidung
-- DEKLARATIONEN
-- t:TRANSAKTION
(Void)
-- home bib:BIBLIOTHEK (bereits bestimmt)
-- Ausleihe, Verlängern, Rückgabe, Entnahme, Hinzufügen: CHARACTER
-- transaktion:CHARACTER (interaktiv erfragt)
-- sitzung beenden:BOOLEAN (false)
.
.
if
transaktion = Ausleihe
then !AUSLEIHE!t.init(home bib)
elseif transaktion = Verlängern then !VERLÄNGERN!t.init(home bib)
elseif transaktion = Rückgabe
then !RÜCKGABE!t.init(home bib)
elseif transaktion = Entnahme
then !ENTNAHME!t.init(home bib)
elseif transaktion = Hinzufügen then !HINZUF ÜGEN!t.init(home bib)
else sitzung beenden := true
end
Unnötig aufwendig
Informatik I, Wintersemester 1993/94
160
Verifikation
Fallunterscheidung mit inspect
.
.
inspect transaktion
when Ausleihe
then !AUSLEIHE!t.init(home bib)
when Verlängern then !VERLÄNGERN!t.init(home bib)
when Rückgabe
then !RÜCKGABE!t.init(home bib)
when Entnahme
then !ENTNAHME!t.init(home bib)
when Hinzufügen then !HINZUFÜGEN!t.init(home bib)
else sitzung beenden := true
end
Informatik I, Wintersemester 1993/94
161
Verifikation
Fallunterscheidung – Syntax
inspect Ausdruck
when Auswahl1 then Anweisung1
when Auswahl2 then Anweisung2
when Auswahl3 then Anweisung3
.
.
else Anweisungelse
end
Ausdruck vom Typ INTEGER oder CHARACTER
Auswahli: Liste von Konstanten oder Intervallen,
ohne Überlappung und vom Typ des Ausdrucks.
Ausdruck wird ausgewertet und mit Auswahlmöglichkeiten verglichen
Ausnahmesituation, wenn keine Auswahlmöglichkeit zutrifft
und else-Fall fehlt
Informatik I, Wintersemester 1993/94
162
Verifikation
Verifikationsregeln für bedingte Anweisungen
{ pre ∧ Bedingung}} Anweisung1 { post}} ,
{ pre ∧ ¬Bedingung}} Anweisung2 { post}}
{ pre}} if Bedingung then Anweisung1 else Anweisung2 end { post}}
{ pre ∧ Bedingung}} Anweisung1 { post}} ,
pre ∧ ¬Bedingung ⇒ post
{ pre}} if Bedingung then Anweisung1 end { post}}
wp(Bedingung then Anweisung1 else Anweisung2 end, post)
≡ Bedingung ⇒ wp(Anweisung1, post)
∧
¬Bedingung ⇒ wp(Anweisung2, post)
wp(Bedingung then Anweisung1 end, post)
≡ Bedingung ⇒ wp(Anweisung1, post)
Informatik I, Wintersemester 1993/94
∧
163
¬Bedingung ⇒ post
Verifikation
Verifikationsregeln für Fallunterscheidung
{ pre ∧ Bedingung1} Anweisung1 { post}} ,
{ pre ∧ ¬Bedingung1 ∧ Bedingung2} Anweisung2 { post}} ,
.
.
{ pre ∧ ¬Bedingung1 ∧ ... ∧ ¬Bedingungn} Anweisungelse { post}}
{ pre}} if Bedingung1 then Anweisung1 elseif ... else Anweisungelse end { post}}
Informatik I, Wintersemester 1993/94
164
Verifikation
Fakultätsprogramm – äußerer Rahmen
Programm
Zusicherungen
fakultät(arg:INTEGER):INTEGER
is -- Berechnung von arg!
if arg > 0
then
{ arg>0}}
fakultäts-berechnung
{ Result=arg!}}
korrekt:=true
else
korrekt:=false
end
end
{ korrekt ⇒ Result=arg!}}
Informatik I, Wintersemester 1993/94
165
Verifikation
Fakultätsprogramm – Verifikation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Programm
Zusicherungen
fakultät(arg:INTEGER):INTEGER
is -- Berechnung von arg!
{ true}}
if arg > 0
then
{ true ∧ arg>0}}
{ arg>0}}
fakultäts-berechnung
{ Result=arg!}}
{ false ∨ Result=arg!}}
{ ¬true ∨ Result=arg!}}
{ true ⇒ Result=arg!}}
korrekt:=true
{ korrekt ⇒ Result=arg!}}
else
{ true ∧ ¬(arg>0)}}
{ true}}
{ true ∨ Result=arg!}}
{ ¬false ∨ Result=arg!}}
{ false ⇒ Result=arg!}}
Prämissen
pre
pre ∧ Bedingung
K1,K11
Spezifikation
K10,K1
K8
Wertzuweisung
post
pre ∧ ¬Bedingung
∧ -E
K10,K1
K8
korrekt:=false
Wertzuweisung
post
{ korrekt ⇒ Result=arg!}}
end
end
{ korrekt ⇒ Result=arg!}
}
166
Informatik I, Wintersemester 1993/94
Verifikation
post
Wiederholung
from sitzung beenden := false
until sitzung beenden = true
loop -- Interaktionsmenü verarbeiten
inspect benutzerantwort im interaktionsmenü
when Ausleihe
then !AUSLEIHE!t.init(home bib)
when Verlängern then !VERLÄNGERN!t.init(home bib)
when Rückgabe
then !RÜCKGABE!t.init(home bib)
when Entnahme
then !ENTNAHME!t.init(home bib)
when Hinzufügen then !HINZUFÜGEN!t.init(home bib)
else sitzung beenden := true
end
end
from Initialanweisung
until Abbruchbedingung loop Schleifenanweisung
end
Informatik I, Wintersemester 1993/94
167
Verifikation
Fakultäts-berechnung
from Result := 1 ; n := 1
until n>=arg
loop
n := n+1;
Result := Result*n
end
Invariante: was bleibt stabil bei jedem Durchlauf? (partielle Korrektheit)
Variante: Wird etwas kleiner bei der Berechnung? (Terminierung)
from Result := 1 ; n := 1
invariant n<=arg
-- und Result=n!
variant arg-n
until n>=arg
loop
n := n+1;
Result := Result*n
end
Informatik I, Wintersemester 1993/94
168
Verifikation
Verifikationsregel für Schleifen
{ pre}} Init { Inv
∧
Var≥0}} ,
{ Inv
∧
Var≥0
∧
¬Abbruch
Anweisung { Inv
∧
∧
Var≥0
Var=n}}
∧
Var<n}}
{ pre}} from Init until Abbruch loop Anweisung end { Inv
∧
Abbruch}}
wp(from Init until Abbruch loop Anweisung end , post )
≡
wp(Init, ∃n:IN . Hn(Anweisung, Abbruch, post))
wobei
H0(Anweisung, Abbruch, post) ≡ Abbruch
∧
post
Hn+1(Anweisung, Abbruch, post)
≡ ¬Abbruch
∧
wp(Anweisung, Hn(Anweisung, Abbruch, post))
Informatik I, Wintersemester 1993/94
169
Verifikation
from
{ arg>0}}
{ arg>0}}
{ 1=1! ∧ 1≤arg
arg>0 ⇒ 1≤arg
∧
∧
arg-1≥0
∧
pre
1=1!
arg-1≥0}}
Result:= 1 ;
{ Result=1!
1≤arg
∧
arg-1≥0}}
{ Result=n! ∧ n≤arg
invariant n<=arg -- und Result=n!
variant arg-n
until n>=arg
loop
{ Result=n! ∧ n≤arg
∧
arg-n≥0}}
Inv ∧ Var≥0
¬(n≥arg)
Inv ∧ ¬Abbruch ∧ Var≥0 ∧ Var=x
arg-n=x}}
n≤arg ∧ ¬(n≥arg) ⇒ n<arg
∧
n:= 1
{ Result=n!
∧
n<arg
∧
∧
arg-n>0
{ Result*(n+1)=(n+1)!
∧
∧
∧
arg-n>0
∧
arg-n=x}}
n+1≤arg
∧
arg-n=x ⇒ arg-n≤x ⇒ arg-(n+1)<x
arg-n>0 ⇒ arg-(n+1)≥0
n<arg ⇒ n+1≤arg
Result=n! ⇒ Result*(n+1)=(n+1)!
arg-(n+1)≥0 ∧ arg-(n+1)<x}}
n:= n+1;
{ Result*n=n! ∧ n≤arg ∧ arg-n≥0 ∧ arg-n<x}}
Result:= Result*n
{ Result=n! ∧ n≤arg ∧ arg-n≥0 ∧ arg-n<x}}
end
{ Result=n! ∧ n≤arg ∧ n≥arg}}
{ Result=n! ∧ n=arg}}
{ Result=arg!}}
Informatik I, Wintersemester 1993/94
170
Inv ∧ Var≥0 ∧ Var<x
Inv ∧ Abbruch
n≤arg ∧ n≥arg ⇒ n=arg
Result=n! ∧ n=arg ⇒ Result=arg!
Verifikation
Rekursive Routinen: Fakultätsberechnung
fak berechnung(n:INTEGER):INTEGER is
require n>0
do
if n=1 then Result := 1
else Result := n * fak berechnung(n-1)
end
end
Mathematisch eleganter als Schleifen aber weniger effizient
Informatik I, Wintersemester 1993/94
171
Verifikation
Rekursive Routinen: Fibonaccizahlen
fib(1) = fig(2) = 1, fib(n+2) = fib(n+1)+fib(n)
fib(n:INTEGER):INTEGER is
require n>0
do
if n<3 then Result := 1
else Result := fib(n-1)+fib(n-2)
end
ensure fib(1)=1; fig(2)=1; fib(n+2)=fib(n+1)+fib(n)
end
mit Schleifen
fib(n:INTEGER):INTEGER is
require n>0
local i, fib 1, fib 2 : INTEGER
do if n<3 then Result := 1
else from fib 1 := 1; fib 2 := 1; Result := fib 1+fib 2; i := 3
until
i = n
invariant Result=fib(i); fib 1=fib(i-1); fib 2=fib(i-2)
variant n-i
loop i:= i+1; fib 2:= fib 1; fib 1:= Result; Result:= fib 1+fib 2
end
end
ensure fib(1)=1; fig(2)=1; fib(n+2)=fib(n+1)+fib(n)
end
Informatik I, Wintersemester 1993/94
172
Verifikation
Rekursive Routinen: Verifikation
• Partielle Korrektheit: Ist die Implementierung
korrekt, wenn jeder Aufruf korrekt ist?
Invariante entspricht dem Vertrag der rekursiven
Routine, den sie auch mit sich selbst schließt.
• Terminierung: liefern alle Aufrufe irgendwann ein
Ergebnis ohne einen weiteren rekursiven Aufruf ?
Variante hängt nur von äußeren Eigenschaften
(formale Parameter und aktuelles Objekt) ab und
muß bei jedem rekursiven Aufruf kleiner werden.
Informatik I, Wintersemester 1993/94
173
Verifikation
Fakultätsberechnung: Partielle Korrektheit
fak berechnung(n:INTEGER):INTEGER is
pre
do
{ n>0}}
if n=1
n>0 ∧ n=1 ⇒ 1=n!
then
{ n>0 ∧ n=1}}
{ 1=n!}}
Result := 1
{ Result=n!}}
else
{ n>0 ∧ n6=1}}
n>0 ∧ n6=1 ⇒ n-1>0 ∧ n*(n-1)!=n!
{ n-1>0 ∧ n*(n-1)!=n!}}
n-1>0 ⇒ fak berechnung(n-1)=(n-1)!
{ n*fak berechnung(n-1)=n!}}
Result := n * fak berechnung(n-1)
{ Result=n!}}
post
end
{ Result=n!}}
end
Variante ist der Parameter n
Informatik I, Wintersemester 1993/94
174
Verifikation
Verifikationsregel für rekursive Routinen
r habe Argumente yr , Vor- und Nachbedingungen prer bzw. postr .
Br enthalte rekursive Aufrufe der Form entityi.r(Ai(yr )) .
Bedi(yr ) sei die Bedingung für den i-ten rekursiven Aufruf.
r ist genau dann total korrekt, wenn gilt
Partielle Korrektheit: wenn alle rekursiven Aufrufe korrekt sind, gilt
{ prer (yr )}} Br { postr (yr )}}
Terminierung: Es gibt einen Integer-Ausdruck Var mit
prer (yr ) ⇒ Var(yr ,Current)≥0
und für jeden rekursiven Aufruf entityi.r(Ai(yr ))
prer (yr )
∧
Bedi(yr ) ⇒ prer (Ai(yr ))
Informatik I, Wintersemester 1993/94
∧
Var(Ai(yr ),entityi)<Var(yr ,Current)
175
Verifikation
Disziplinierte Ausnahmen
Fehler müssen zu einem definierten Verhalten führen
• Wiederaufnahme: versuche Ausnahmesituation durch
Korrekturmaßnahmen zu beseitigen und starte neu.
⇒ Kontrakt der Routine wird eingehalten
• Organisierte Panik: geordneter Abbruch mit Fehler
⇒ Klasseninvariante wird erfüllt, Nachbedingung nicht
⇒ Kunde muß selbst Fehler behandelt
!!! Nicht akzeptabel ist stillschweigendes Aufhören !!!
Eine Routine muß ihren Vertrag erfüllen oder scheitern
Informatik I, Wintersemester 1993/94
176
Verifikation
Disziplinierte Ausnahmen in Eiffel
• rescue-Klausel behandelt Fehler außerhalb des Rumpfes
• retry-Anweisung startet Anweisungsteil der Routine erneut
• Routine scheitert, wenn Ende der rescue-Klausel erreicht
• Implizite rescue-Klausel wird automatisch ergänzt
Innerhalb einer Klasse K mit Invariante INV heißt r genau dann
Ausnahme-korrekt, wenn für alle gültigen Argumente xr und jeden Zweig b
ihres rescue-Blocks gilt
• { true}} b { INV
∧
prer (xr )}} , falls b mit retry endet
• { true}} b { INV}} , falls b ohne retry endet
Informatik I, Wintersemester 1993/94
177
Verifikation
Ein- und Ausgabe
• Keine vordefinierten Befehle von Eiffel
• Dienstleistung der Klassen FILE und STANDARD FILES
– Keine vordefinierten Befehle von Eiffel
– vordefiniertes feature io:STANDARD FILES
⇒ qualifizierter Aufruf io.putint(43)
(oder erben)
• Einlesen getrennt in Einleseprozedur und Funktionsaufruf
– io.readint; n := io.lastint
Einlesen ist eine Doppeloperation
• Strenge Typisierung (readint, readreal, readchar,...)
Σ: Sehr gewöhnungsbedürftig
– erst bei komplexen Benutzeroberflächen von Vorteil
Informatik I, Wintersemester 1993/94
178
Verifikation
Allgemeine Entwurfsprinzipien
• Programmentwicklung durch Beweisführung
• Eigenschaften zu manipulierender Objekte klären
• Formalismus und gesunder Menschenverstand
• Bewußtes Anwenden von Prinzipien
• Entwicklung am angestrebten Resultat orientieren
• Problemstellung einfach und präzise beschreiben
• Programmiere nicht innerhalb einer Programmiersprache
sondern in die Sprache hinein.
Informatik I, Wintersemester 1993/94
179
Systematik
Maximale Segmentsumme
• Gegeben eine Folge a1, a2, . . . , an ganzer Zahlen
q
Bestimme die Summe Pi=p ai eines Segmentes, die maximal
im Bezug auf alle möglichen Summen von Segmenten ist
q
Mn ≡ max({Pi=p ai | 1≤p≤q≤n})
• Direkte Lösung leicht zu finden, aber ineffizient
• Induktive Betrachtung liefert
M 1 = a1 ,
Mn+1 = max(Mn,Ln+1)
wobei Ln ≡ max({Pn
i=p ai | 1≤p≤n})
L1 = a 1 ,
Ln+1 = max(Ln+an+1,an+1) )
→ eleganterer und effizienterer Algorithmus
Informatik I, Wintersemester 1993/94
180
Systematik
Maximale Segmentsumme – direkte Lösung
maxseg:INTEGER is
local p, q, i, sum :INTEGER
do
from p := lower
-- variiere untere Grenze p
Result := item(lower); -- Initialwert zum Vergleich
until p >= upper
loop
from q := p
-- variiere obere Grenze q
until q > upper
loop
from i := p ;
-- Berechne Pqi=p ai
sum := item(i) -- Initialwert der Summe
until i = q
loop
i := i+1;
sum := sum+item(i)
Pq
end -- sum = i=p ai
if sum > Result then Result := sum end
q := q+1
end;
p := p+1
end
end
Informatik I, Wintersemester 1993/94
181
Systematik
Maximale Segmentsumme: systematische Lösung
maxseg:INTEGER
is
local n, L n :INTEGER
do
from n := lower;
Result := item(n);
L n := item(n)
until n >= upper
invariant
-- Result = Mn ∧
variant upper - n
loop
if L n > 0
then L n := L n + item(n)
else L n := item(n)
end;
-- L n = Ln+1
if L n > Result
then Result := L n
end;
-- Result = Mn+1
n := n+1
end
end
Informatik I, Wintersemester 1993/94
182
L n = Ln
Systematik
Strategie zur Erzeugung bedingter Anweisungen
Ein Programmstück sei spezifiziert durch pre und post.
1. Suche eine Instruktion Anweisung, deren Ausführung die
Nachbedingung in einigen Fällen erfüllt.
2. Bestimme eine Bedingung B für die gilt
{ pre ∧ B}} Anweisung { post}} .
3. Erzeuge if B then Anweisung else ?? end
bzw. Anweisung, wenn B den Wert true hat
4. Für ?? setze pre’ ≡ pre ∧ ¬B und wiederhole die
Strategie, bis die in (2) gefundene Bedingung true wird.
Informatik I, Wintersemester 1993/94
183
Systematik
Strategie zur Erzeugung von Schleifen
Ein Programmstück sei spezifiziert durch pre und post.
1. Ausgehend von der Beweisidee lege Inv und Var fest.
2. Bestimme Initialanweisung Init, welche Inv erfüllt.
3. Wähle eine Abbruchbedingung Abbruch, für die gilt
Inv ∧ Abbruch ⇒ post.
4. Bestimme eine Anweisung, welche die Variante verringert und die Invariante erhält.
Verfolge die Verringerung der als erstes verfolgt
5. Erzeuge das Programm
from Init until Abbruch loop Anweisung end
Informatik I, Wintersemester 1993/94
184
Systematik
Invarianten und Varianten
• Eine Invariante kann durch Abschwächung der
Nachbedingung auf folgende Arten erzeugt werden.
– Entfernen eines Konjunktionsgliedes
– Ersetzen einer Konstanten durch eine Variable
– Erweiterung des Wertebereichs einer Variablen
– Erweiterung durch Disjunktion
• Die Variante sollte zunächst informal als eine
Eigenschaft, die sich aus der Invariante und der
Spezifikation ergibt, beschrieben und anschließend als
Integer-Ausdruck formalisiert werden.
Informatik I, Wintersemester 1993/94
185
Systematik
Sinnvoller Einsatz von Rekursion
• Entwurf durch Reduktion auf leichtere Probleme:
Versuche, ein Problem so aufzuspalten, daß zunächst die Lösung eines bekannten
einfacheren Problems angewandt werden kann und der Rest eine Variante des
ursprünglichen Problems beschreibt.
• Divide&Conquer Strategie:
Teile das Problem in zwei “gleiche” Hälften auf und behandle jede Hälfte mit dem
gleichen Verfahren, bis die Teile klein genug sind, um eine direkte Lösung zu
erlauben.
• Ersetze Rekursion durch Schleifen,
wann immer dies einfach durchzuführen ist
Informatik I, Wintersemester 1993/94
186
Systematik
Ethik und Verantwortung
Der Verantwortung gerechtwerden – privat und im Beruf
• Versuchung zum Mißbrauch eigener Fähigkeiten widerstehen
• Informatik hat massive Auswirkungen auf die Allgemeinheit
→ Konsequenzen eigener Arbeit abschätzen
→ Fach- und Sachkompetenz erwerben
→ Gesprächsbereit sein
• Grenzen der eigenen Kompetenz realistisch einschätzen
→ Keine überzogene Versprechungen machen
→ Fehler rechtzeitig eingestehen
• In Konfliktsituationen Zivilcourage aufbringen
Informatik I, Wintersemester 1993/94
187
Systematik
Herunterladen