BlueJ und Java:Grundkonzepte
objektorientierten Programmierens
Thomas Karp, Christoph Uhrhan
7.5.2012 - 9.5.2012PL Speyer
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
Teil II: Einführung in die Objektorientierte
ModellierungChristoph Uhrhan
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Programm 1.Tag: OO-Modellierung mit UML
• Grundbegriffe (kurz)
- Bauplan, Instanz, Eigenschaft, Fähigkeit
- Klasse, Objekt, Variable, Methode
• Diagrammformen für den Unterricht
- Anwendungsfalldiagramm, Liste der natürlichen Objekte, Klassendiagramm, Sequenzdiagramm, Aktivitätsdiagramm
- Beispiel: Druckerwarteschlange
• Ausprobieren am Beispiel (Rollenspiel/GA)
- Bankautomat
3
Objektorientierung
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Wie verhält sich Objektorientierung zur prozeduralen Programmierung?
• Programmieren “im Kleinen” bleibt erhalten
• Prozedurorientierte Modellierung
- Struktogramme etc.
• Objektorientierte Modellierung
- UML
5M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Einstiegsbeispiel
6
Eine Ampel kommt selten allein
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Codebeispiel: Ampelklasse
7
public class Ampel{ int zustand;
public void schalteWeiter(){ zustand = ( zustand + 1 ) % 4; } public void zeichneAmpel(){! ... }}
Ampel ampel1 = new Ampel();Ampel ampel2 = new Ampel();...ampel1.schalteWeiter();ampel2.schalteWeiter();
...
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Idee der Objektorientierung
• Vorstrukturierung komplexer Systeme anhand natürlicher Objekte
• Jedes Objekt hat Fähigkeiten und Eigenschaften
• Verteilung von Lösungskompetenzen, Zuständigkeiten und Geheimnissen
• Planung des Kontrollflusses (“Meta-Algorithmus”)
8
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Kern der Objektorientierung
9
Konzept Effekt Hintergrund
KapselungReduktion von Nebeneffekten
Viele Entwickler
KlassenReduzierung von Codelänge
Effizienz
Modellierung natürlicher Objekte
Komplexitätsreduktion“Der Code ist die Dokumentation”
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
OO-Programmierung
OO-Modellierung
Objektorientierung: Phasenmodell
OO-Analyse
10
OO-EntwicklungOO-Entwurf
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Beispiel: Digitale Uhr
• Aufbau
- Stunden, Minuten, Sekunden, Takt, ...
• Wie implementiert man zwei Uhren (Weltuhr)?
- den Code kopieren und noch einmal einfügen
- Variablen umbenennen
- Bei Änderungen alles doppelt
• drei Uhren, vier Uhren ...?
11M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
public class Uhr{ int stunden, minuten, sekunden;
public Uhr( int h, int m, int s ){ stunden = h; minuten = m; sekunden = s; }
public void zaehleWeiter(){ sekunden = sekunden + 1; if ( sekunden == 60 ){ sekunden = 0; minuten++; } if ( minuten == 60 ){ minuten = 0; stunden++; } ... }
public void zeigeUhrzeitAn(){ System.out.println( stunden + ”:” + minuten + “:” +sekunden ); }}
Uhr london = new Uhr( 13, 30, 45);london.zaehleWeiter();
Uhr speyer = new Uhr( 14, 30, 45);speyer.zaehleWeiter();
12
...
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Begriffe der Objektorientierung
13
Begriff Beispiel Erläuterung
Objekt speyer Exemplar oder Instanz
Klasse Uhr Bauplan
Methode zaehleWeiter() Fähigkeit, Prozedur, „Methode“
Objektvariable stundenEigenschaft, Variable,
„Attribut“
Vererbung AnalogUhr Anreicherung von Eigenschaften
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Bezeichnerkonventionen
1. Sinntragende Bezeichner2. Konkatenation
• Klasse: Uhr
- Substantiv, Großschreibung
• Variable: meineUhr = new Uhr()
- Substantiv, Kleinschreibung
• Methode: zaehleWeiter()
- Verb, Kleinschreibung
Beispiel: meineUhr.zaehleWeiter()
14
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Vorteile der Implementierung mit Objektorientierung
Bessere Kapselung von:
Komplexität => Bessere Modularisierung
Daten => Geheimhaltung
Zuständigkeiten => Interaktion statt Manipuliation
=> Klare Schnittstellen
Arbeitsersparnis:
Klassenbibliotheken => Wiederverwendung von Funktionalität
Objekte => Wiederverwendung von Code
15M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Warum Java für OOI?
• Pro
- Plattformübergreifend
- Einbindung ins Web -> Applets
- Unterstützung:
• Bibliotheken, IDEs, Literatur, Foren
- universellere Konzepte, kompakter
• JavaScript !?!
• Kontra
- Overhead bei Ein-/Ausgabe
- Kein Einstieg ohne OO ?bsh?
16
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Merkmale von Objekten
Objekte haben ...
• ... einen Typ
- der Name der Klasse, dessen Instanz sie sind.
• ... einen Namen
- Der Variablenname, über den Zustand und Methoden des Objekts zugreifbar sind.
• ... einen Zustand
- Die Gesamtheit aller Variablenwerte.
• ... eine Identität
- dazu jetzt mehr...
17
Hund christophsHund = new Hund(„Lassie“, „Collie“, 56);Hund nachbarsHund = new Hund(„Lassie“, „Collie“, 56);
// Um Verwirrungen vorzubeugen;nachbarsHund.name = „Waldi“;
// Wie hiess mein Hund noch mal?System.out.println(christophsHund.name);
Programm
Speicher
christophsHund nachbarsHund
Collie
#F7
56
LassieLassie
Collie56
#3ALassieLassie
Hund christophsHund = new Hund(„Lassie“, „Collie“, 56);Hund nachbarsHund = christophsHund;
// Um Verwirrungen vorzubeugen;nachbarsHund.name = „Waldi“;
// Wie hiess mein Hund noch mal?System.out.println(christophsHund.name);
Programm
Speicher
christophsHund nachbarsHund
Collie56
#3ALassieLassieWaldiWaldi
Fragen?
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
UML - die Unified Modelling Language
Die wichtigsten Diagrammformen derUML für den Unterrichtseinsatz
am Beispiel einer Druckerwarteschlange
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
• Worum geht es?. Beispiele für UML im Unterricht. Denkwerkzeuge für die Modellierung. Allgemeinbildende Aspekte
• Worum geht es nicht?. Vermittlung des UML-Standards auf Niveau von Softwareentwicklern
Einstieg
22
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Der Fahrplan
1. Druckerwarteschlange (vormittag)
2. Bankautomat (nachmittag)
23
- Anwendungsfalldiagramm
- Klassendiagramm
- Aktivitätsdiagramme
- Sequenzdiagramme
2x4
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Anwendungsfall-Diagramm: Druckerwarteschlange
Rolle
Systemgrenze
Anwendungsfälle
Anwender
Druckauftrag drucken
Druckauftrag erzeugen
Warteschlangen- inhalt ansehen
24
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Textuelle Beschreibung der Anwendungsfälle
• Man will einen Druckauftrag erzeugen und (nach Priorität oder Reihenfolge des Einreichens) einreihen können
• Die Warteschlange muss den nächsten Druckauftrag ausgeben können
• Die Nutzer wollen die Warteschlange einsehen können
• Evtl. muss ein Druckauftrag vorgezogen werden können
25M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Rolle
Systemgrenze
Anwendungsfälle
Druckauftrag erzeugen
Anwender
Warteschlangen- inhalt ansehen
Druckauftrag drucken
Warteschlange anhalten
Druckauftrag entfernen
<<enthält>>
Informationen zu Druckauftrag ansehen<<enthält>>
Priorität ändern<<enthält>>
<<enthält>>
Druckauftrag einsortieren
<<enthält>>
Druckauftrag mit Priorität erzeugen
<<erweitert>>
26
Anwendungsfall-Diagramm: Druckerwarteschlange
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Zur Wahl des Beispiels
• Druckaufträge bilden eine verkettete Liste.
• Exemplarisch für die 4 Seiten eines Objekts.
- Typ, Name, Zustand, Identität
• Listeneinträge bestehen aus zusammengesetzten Datenstrukturen (Objekten)
- Vorgriff auf Datenstrukturen für Bäume und Graphen
- Einübung von Rekursion
• geeignet für Rollenspiel
• Überschaubare Codemenge
27
Rollenspielzu: Einsortieren eines Auftrages
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Rolle
Systemgrenze
Anwendungsfälle
Druckauftrag erzeugen
Anwender
Warteschlangen- inhalt ansehen
Druckauftrag drucken
Warteschlange anhalten
Druckauftrag entfernen
<<enthält>>
Informationen zu Druckauftrag ansehen
<<enthält>>
Priorität ändern<<enthält>>
<<enthält>>
Druckauftrag einsortieren
<<enthält>>
Druckauftrag mit Priorität erzeugen
<<erweitert>>
29
Anwendungsfall-Diagramm: Druckerwarteschlange
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Liste der “natürlichen Objekte”
• Nutzer
• Warteschlange
• Druckauftrag
• Papier
• Drucker
• Priorität
• Papierstau
• Dokumentname
• Druckertreiber
30
Vorbereitung des Klassendiagramms!
Extern
Elementar
+ Warteschlangenelement
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Klassendiagramm für Warteschlange und Druckauftrag
0 1Warteschlange
Kopf
432
31
dokumentName: Stringnachfolger: DruckAuftragprio: int
DruckAuftrag
(c) DruckAuftrag(dn: String, p: int)druckeDokumentAus(): voidfuegeDruckAuftragEin(da: DruckAuftrag)gibDokumentNameAus(): voidgibNachfolger(): DruckAuftragsetzeNachfolger(da: Druckauftrag): voidgibPrio(): intsetzePrio(p: int): voidgibRestWsAus(): voiddruckeDokumentAus(): voidgibRestLaengeAus(lb: int): int
11
druckerName: Stringkopf: DruckAuftrag
DruckerWarteschlange
(c) DruckerWarteschlange(dn: String)druckeNaechstenAuftrag(): DruckAuftragerzeugeDruckAuftrag(da: DruckAuftrag): voidgibLaengeAus(): intgibWarteschlangeAus(): void
verwaltet
0..1
Nachfolger0..1
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Aktivitätsdiagramm: fügeAuftragEin()
32
fügeAuftragEin(neuerAuftrag)
ja
nachfolger.fügeAuftragEin(neuerAuftrag)
nachfolger = neuerAuftrag
neuerAuftrag.nachfolger = nachfolger
ja
neuerAuftrag
existiert nachfolger?
nein
nachfolger = neuerAuftrag
nein
pneu < nachfolger.gibPrioritaetZurueck()
pneu=neuerAuftrag. gibPrioritaetZurueck()
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Sequenzdiagramm: fügeAuftragEin()
w1:Warteschlange kopf:Druckauftrag d1:Druckauftrag d2:Druckauftrag
fuegeAuftragEin()
fuegeAuftragEin()
fuegeAuftragEin()
33
gibPrioritaetZurueck()
id
gibPrioritaetZurueck()
id
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Code: fügeAuftragEin()
public class Druckauftrag{ public void fuegeAuftragEin( Druckauftrag d ){ if ( nachfolger == null ){ setzeNachfolger( d ); } else { if ( d.gibPrioritaetZurueck() < nachfolger.gibPrioritaetZurueck()){ d.setzeNachfolger( nachfolger ); setzeNachfolger( d ); } else { nachfolger.fuegeAuftragEin( d ); } } }}
34
ÜbunggibWarteschlangeAus()
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Aktivitätsdiagramm: gibWarteschlangeAus()
nein
ja
nachfolger.gibRestWSAus()
36
gibRestWSAus()
nachfolger.gibDokukmentNameAus()
existiert nachfolger?
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
gibRestWSAus()
Sequenzdiagramm: gibWarteschlangeAus()
w1:Warteschlange kopf:Druckauftrag d1:Druckauftrag d2:Druckauftrag
gibRestWSAus()
37
gibDokumentInfoAus()
gibDokumentInfoAus()
gibRestWSAus()
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Code: gibWarteschlangeAus()
public class Warteschlange{ public void gibWarteschlangeAus(){ kopf.gibNachfolgerZurueck().gibRestWSaus(); }}
public class Druckauftrag{ public void gibRestWSaus(){ gibDokumentAus(); if ( nachfolger != null ) nachfolger.gibRestWSAus(); } public void gibDokumentAus(){ System.out.println( id + " p: "+ prioritaet + " " + dokumentname ); }}
38
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Variationen
•+setze Priorität( int id )•+aendereAnzahl( int anzahl )•Drucken zu einem bestimmten Zeitpunkt•Auswahl s/w oder Farbe•Verschieben von einer Warteschlange in eine andere•...
39
Fragen?
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
UML (2)Die wichtigsten Diagrammformen im Überblick
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
UML: Überblick
Phase AnalyseEntwurf:Struktur
Entwurf:Verhalten
Diagramm Anwendungsfall KlassendiagrammSequenzdiagrammAktivitätsdiagramm
42
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Anwendungsfalldiagramm
43
Rolle 1
Systemgrenze
Anwendungsfall
Anwendungsfall
Anwendungsfall
<<enthält>>
Rolle 2
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Liste der “natürlichen Objekte”, nicht in UML!
• ............
• ............
• ............
• ............
• ............
• ............
• ............
• ............
• ............
44
Vorbereitung des Klassendiagramms!
Extern
Elementar
+ ............
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Klassendiagramm
45
{-,+,#}methode()......
{-,+,#}feld: Typ......
Klassenname
Beziehung
0..1 1..*
{-,+,#}methode()......
{-,+,#}feld: Typ......
Klassenname2
Kardinalität:1:1! entfällt n ! (unbekannt, aber beschränkt)0..1! (3..10 1..n)1..*! (1 oder mehr)*! (0 oder mehr)
Sichtbarkeit:- private+public#protected
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Aktivitätsdiagramm
Name der Aktivität
nein
ja
Arbeitsschritt
Arbeitsschritt
Entscheidung
ja
ArbeitsschrittKontrollfluss:
Start
ErgebniswertParameter
46
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Sequenzdiagramm
instanz1:Klasse1 instanz2:Klasse2 instanz3:Klasse3 instanz4:Klasse4
externeMethode()interneMethode()
x
externeMethode()
RückgabewertRückgabewert
Lebenslinie
Ende der Lebenslinie
Bear
beitu
ngsz
eit
47M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Vorschlag: Vorgehensweise für den Unterricht
48
Anwendungsfall-diagramm
Sequenz-diagramm
Aktivitäts-diagramm
Gruppen-arbeit
Natürliche Objekte
F-Entw.
Binnen-diff.?
HA: Text?
Klassen-diagramm
Partner-Arbeit
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Strukturelle Probleme des Unterrichtseinsatzes der OO-Modellierung
• Modellierung setzt Kodierungserfahrung voraus
- manche Software-Objekte sind nicht natürlich sondern technisch bedingt;
- viele natürliche Objekte sind nicht relevant
• Vorteil der Objektorientierung: bei großen Projekten, nicht bei kleinen
• Objektorientierung
- setzt imperative Programmierung voraus
• Hilft hier der Objects-First-Ansatz von BlueJ?(ernst gemeinte Frage)
49
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
Fragen?
ÜbungAuftrag löschen und Priorität ändern
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Sequenzdiagramm: löscheAuftrag(id) (1)
w1:Warteschlange kopf:Druckauftrag d1:Druckauftrag d2:Druckauftrag
löscheAuftrag(id)
löscheAuftrag(id)
x
52
gibIDZurueck()
id
gibIDZurueck()
id
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
gibIDZurueck()
id
Sequenzdiagramm: entferneAuftrag(id)
w1:Warteschlange kopf:Druckauftrag d1:Druckauftrag d2:Druckauftrag
entferneAuftrag(id)
entferneAuftrag(id)
entfernterAuftragentfernterAuftrag
53x
gibIDZurueck()
id
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Aktivitätsdiagramm: entferneAuftrag(id)
entferneAuftrag(id)
nein
ja
nimm nachfolger
entfernterAuftrag
nachfolger = entfernterAuftrag.nachfolger
entfernterAuftrag = nachfolger
nachfolger.gibIDZurueck() = id?
ja
54
id
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
Code: public class Warteschlange{ public void loescheAuftrag( int id ){ kopf.entferneAuftrag( id ); }}
public class Druckauftrag{ public Druckauftrag entferneAuftrag( int id ){ if ( nachfolger.gibIDZurueck() == id ){ Druckauftrag auftrag = nachfolger; nachfolger = nachfolger.gibNachfolgerZurueck(); return auftrag; } return nachfolger.entferneAuftrag( id ); }}
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
Didaktische Überlegungen
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Zur Wahl des Beispiels DruckerwarteschlangeI.: Exemplarität
• Bauplanprinzip einer Klasse
- gleiche Methoden
- unterschiedlicher Zustand
- wir bei vielen Objeken gleichen Typs deutlich.
• Identität eines Objekts
- natürlich: unterschiedliche Druckaufträge mit gleichem Dokument und gleicher Priorität
• Grundprinzipien der Rekursion
- Rekursionsschritt: Nachfolger vorhanden
- Rekursionsanker: kein Nachfolger vorhanden.
57M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Zur Wahl des Beispiels DruckerwarteschlangeII.: Propädeutik
• Weiterführende Themen der Rekursion
• Abgeleitete Datenstrukturen
- Bäume (mehr als ein Nachfolger - Liste von Nachfolgern)
- Graphen (Vorgänger kann später auch Nachfolger sein)
58
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Rollenspiel + UML + OOI = EIS(nach Bruner)
• Enaktiv
- konkrete Handlungen
- hier: Rollenspiel
• Ikonisch
- bildliche Repräsentationen und Darstellungen
- hier. UML
• Symbolisch
- symbolische / abstrakte Darstellungsformen.
- hier: Implementierung in Java / BlueJ
59M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Allgemeinbildende Aspekte
• Beschreibung komplexer Systeme
- Beschreibungswerkzeuge (Interaktion, Ablauf)
- nicht reduzieren, sondern annehmen der Komplexität
- Textverarbeitung, SchO
60
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
OOM + Textverarbeitung
61M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
OOM + Politische Strukturen
62
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Allgemeinbildende Aspekte
• Beschreibung komplexer Systeme
- Beschreibungswerkzeuge (Interaktion, Ablauf)
- nicht reduzieren, sondern annehmen der Komplexität
- Textverarbeitung, Struktur von Organisationen
• Perspektivenwechsel
- Nicht Kausalbeziehung
- vgl. Hermeneutischer Zirkel
63M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Zusammenfassung
• UML
- Grafische Beschreibungssprache
• Anwendungsfalldiagramm
• Klassendiagramm,
• Aktivitätsdiagramm
• Sequenzdiagramm
- Perspektivenwechsel, Überblick
• Methodische Vorschläge
- Auswahl an Diagrammen, Natürliche Objekte, Projektablauf
64
Pause
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
Unterrichtsmaterial “Bankautomat” und UML
Dr. Michael SchilloGymnasium Hermeskeil
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Aufgabe
• Fertigen Sie ein Klassendiagramm an
• Fertigen Sie Aktivitäts- und Sequenzdiagramme für folgende Abläufe an:
- Ablaufdatum überprüfen
- PIN prüfen
- Saldo ausgeben
- 50€ abheben
- beliebigen Betrag abheben
• Dabei sollen die Aktivitätsdiagramme zentrale Methoden abbilden, das Sequenzdiagramm beginnt beim Bankautomaten
67
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
Material zum Bankautomaten
MuLö
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Die Konto- und Kartendaten
70
Name ktonummer ktostand BLZkonto1konto2konto3
747 200,00 € 50059050256 15.000,00 € 50059050815 -275,00 € 30039030
Name ktoNummer pin BLZ krtNummerkarte1karte2karte3
747 1111 50059050 7711256 2222 50059050 7722815 3333 30039030 7733
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de 71
Anwendungsfall-Diagramm: Bankautomat
Benutzer
System
PIN Prüfen
Kontostandabfragen
Geldabheben
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Liste der “natürlichen Objekte”
72
Benutzer
Konto BLZ
GeldausgabeGeld
Karte(Betrag)
Kontonr
Kontostand
Automat Tageslimit
Sprache Ein-/AusgabeBargeldbestand
PIN
+ Kontoverwaltung
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Die Klasse Karte
73
pin: intkartenNr: intkontoNr: intblz: int
Karte
(c) Karte(p: int, krtnr: int, ktonr: int, b: int)gibPin(): intgibKartenNr(): intgibKtoNr(): intgibBLZ(): int
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Queltext der Klasse Karte
74
1 public class Karte {
2
3 int pin ;
4 int kartenNr ;
5 int kontoNr ;
6 int b l z ;
7
8 Karte ( int krtnr , int ktonr , int b , int p) {
9 pin = p ;
10 kartenNr = krtnr ;
11 kontoNr = ktonr ;
12 b l z = b ;
13 }
14
15 int gibPin ( ) {
16 return pin ;
17 }
18
19 int gibkartenNr ( ) {
20 return kartenNr ;
21 }
22
23 int gibKontoNr ( ) {
24 return kontoNr ;
25 }
26
27 int gibBLZ ( ) {
28 return b l z ;
29 }
30
31 }
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Die Klasse Konto
75
kontoNr: intblz: intkontoStand: float
Konto
(c) Konto(ktonr: int, blz: int, ktostd: float)gibKtoNr(): intgibBLZ(): intgibKontoStand(): floathebeAb(betrag: float): boolean
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Quellcode der Klasse Konto
76
1 public class Konto {
2 int kontoNr ;
3 int b l z ;
4 double kontoStand ;
5
6 Konto ( int ktonr , int b , double d) {
7 kontoNr = ktonr ;
8 b l z = b ;
9 kontoStand = d ;
10 }
11
12 int gibKontoNr ( ) {
13 return kontoNr ;
14 }
15
16 int gibBLZ ( ) {
17 return b l z ;
18 }
19
20 double gibKontoStand ( ) {
21 return kontoStand ;
22 }
23
24 boolean hebeAb (double betrag ) {
25 i f ( kontoStand > betrag ) {
26 kontoStand = kontoStand � betrag ;
27 return true ;
28 } else {
29 return fa lse ;
30 }
31 }
32 }
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Die Klasse KontoVerwaltung
77
konto1: Kontokonto2: Kontokonto3: Konto
Kontoverwaltung
(c) Kontoverwaltung()findeKonto(ktonr: int): Konto
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Quelltext der Klassse KontoVerwaltung
78
1 public class KontoVerwaltung {
2
3 Konto konto1 ;
4 Konto konto2 ;
5 Konto konto3 ;
6
7 KontoVerwaltung ( ) {
8 konto1 = new Konto (747 , 50059050 , 200 . 0 ) ;
9 konto2 = new Konto (256 , 50059050 , 15000 .0 ) ;
10 konto3= new Konto (815 , 30039030 , �275.0) ;
11 }
12
13 Konto f indeKonto ( int ktoNr ) {
14 i f ( konto1 . gibKontoNr ( ) == ktoNr ) {
15 return konto1 ;
16 } else i f ( konto2 . gibKontoNr ( ) == ktoNr ) {
17 return konto2 ;
18 } else i f ( konto3 . gibKontoNr ( ) == ktoNr ) {
19 return konto3 ;
20 } else {
21 return null ;
22 }
23 }
24 }
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Die Klasse BankAutomat
79
ktoVerwaltung: KontoverwaltungaktuelleKarte: KarteaktuellesKonto: KontobargeldBestand: float
Bankautomat
(c) Bankautomat()pruefePin(krt: Karte, pin: int): booleangibKtoStand(): floathebeAb(betrag: float): booleanbeendeTranskation(): void
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Quellcode der Klasse BankAutomat (1)
80
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de 81
Quellcode der Klasse BankAutomat (II)
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de 82
Quellcode der Klasse BankAutomat (1II)
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Klassendiagramm
83
kontoNr: intblz: intkontoStand: float
Konto
(c) Konto(ktonr: int, blz: int, ktostd: float)gibKtoNr(): intgibBLZ(): intgibKontoStand(): floathebeAb(betrag: float): boolean
pin: intkartenNr: intkontoNr: intblz: int
Karte
(c) Karte(p: int, krtnr: int, ktonr: int, b: int)gibPin(): intgibKartenNr(): intgibKtoNr(): intgibBLZ(): int
konto1: Kontokonto2: Kontokonto3: Konto
Kontoverwaltung
(c) Kontoverwaltung()findeKonto(ktonr: int): Konto
ktoVerwaltung: KontoverwaltungaktuelleKarte: KarteaktuellesKonto: KontobargeldBestand: float
Bankautomat
(c) Bankautomat()pruefePin(krt: Karte, pin: int): booleangibKtoStand(): floathebeAb(betrag: float): booleanbeendeTranskation(): void
3
1
1
11
1
11
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Sequenzdiagramm
84
ba: BankAutomat ktoVerwaltung: KontoVerwaltung konto1: Konto konto2: Konto
Sequenzdiagramm: BankAutomat.pruefePin(karte2, 2222)
gibKontoNr()
747
true
karte2: Karte
gibPin()
256
gibKontoNr()aktuelleKarte: Karte
findeKonto(256)
gibKontoNr()
256
konto2
pruefePin(karte2, 2222)
true
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Aktivitätsdiagramm
85
krt: Karte
pin: intkrt.pin == pin ergebnis = false
finde Konto zur aktuellen Karte
aktuelleKarte = krt
aktuellesKonto != null
ergebnis = true
ergebnis = false
beendeTransaktion()
ergebnis
BankAutomat.pruefePin()
beendeTransaktion()