Upload
hoangnhu
View
222
Download
0
Embed Size (px)
Citation preview
BlueJ und Java:Grundkonzepte
objektorientierten Programmierens
Thomas Karp, C. Uhrhan
14.02.2011 - 16.02.2011PL Speyer
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
Teil 1: Einführung in die Objektorientierung
(aus der Java-Perspektive)Dr. M. Schillo, Christoph Uhrhan
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Programm 1.Tag: OO-Modellierung mit UML
• Begriffe
- 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
‣ Komplexe Projekte ohne Kodierung
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
Merkmale von Objekten
Objekte haben ...
• ... einen Typ
- der Name der Klasse, dessen Instanz sie sind.
• ... einen Namen
• ... einen Zustand
- Die Gesamtheit aller Variablenwerte.
• ... eine Identität
- dazu später mehr!
14
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()
15M. 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
16
M. 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?
17
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
20
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Der Fahrplan
1. Druckerwarteschlange (vormittag)
2. Bankautomat (nachmittag)
21
- 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
22
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
23M. 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>>
24
Anwendungsfall-Diagramm: Druckerwarteschlange
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>>
26
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
27
Vorbereitung des Klassendiagramms!
Extern
Elementar
+ Warteschlangenelement
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Klassendiagramm für Warteschlange und Druckauftrag
0 1Warteschlange
Kopf
432
28
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
Klassendiagramm für Warteschlange und Druckauftrag
0 1Warteschlange
Kopf
432
29
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()
30
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()
31
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 ); } } }}
32
ÜbunggibWarteschlangeAus()
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Aktivitätsdiagramm: gibWarteschlangeAus()
nein
ja
nachfolger.gibRestDerWSAus()
34
gibWarteschlangeAus()
nachfolger.gibDokukmentNameAus()
existiert nachfolger?
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
gibRestDerWSAus()
Sequenzdiagramm: gibWarteschlangeAus()
w1:Warteschlange kopf:Druckauftrag d1:Druckauftrag d2:Druckauftrag
gibRestDerWSAus()
35
gibDokumentInfoAus()
gibDokumentInfoAus()
gibRestDerWSAus()
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Code: gibWarteschlangeAus()
public class Warteschlange{ public void gibWarteschlangeAus(){ kopf.gibNachfolgerZurueck().gibAuftraegeAus(); }}
public class Druckauftrag{ public void gibAuftraegeAus(){ gibDokumentAus(); if ( nachfolger != null ) nachfolger.gibAuftraegeAus(); } public void gibDokumentAus(){ System.out.println( id + " p: "+ prioritaet + " " + dokumentname ); }}
36
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•...
37
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
40
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Anwendungsfalldiagramm
41
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!
• ............
• ............
• ............
• ............
• ............
• ............
• ............
• ............
• ............
42
Vorbereitung des Klassendiagramms!
Extern
Elementar
+ ............
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Klassendiagramm
43
{-,+,#}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
44
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
45M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Vorschlag: Vorgehensweise für den Unterricht
46
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, oder
- objects first: besitzt nicht genug “Fleisch”.
47
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
50
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
51x
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
52
id
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Code: entferneAuftrag(id)
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 ); }}
53M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Allgemeinbildende Aspekte
• Beschreibung komplexer Systeme
- Beschreibungswerkzeuge (Interaktion, Ablauf)
- nicht reduzieren, sondern annehmen der Komplexität
- Textverarbeitung, SchO
54
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
OOM + Textverarbeitung
55M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
OOM + Politische Strukturen
56
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Allgemeinbildende Aspekte
• Beschreibung komplexer Systeme
- Beschreibungswerkzeuge (Interaktion, Ablauf)
- nicht reduzieren, sondern annehmen der Komplexität
- Textverarbeitung, SchO
• Perspektivenwechsel
- Nicht Kausalbeziehung
- vgl. Hermeneutischer Zirkel
57M. 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
58
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
61
Gymnasium HermeskeilSchwerpunkte Musik und Informatik
Material zum Bankautomaten
MuLö
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Die Konto- und Kartendaten
64
Name ktonummer ktostand BLZ
konto1
konto2
konto3
747 200,00 ! 50059050
256 15.000,00 ! 50059050
815 -275,00 ! 30039030
Name ktoNummer pin BLZ krtNummer
karte1
karte2
karte3
747 1111 50059050 7711
256 2222 50059050 7722
815 3333 30039030 7733
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de 65
Anwendungsfall-Diagramm: Bankautomat
Benutzer
System
PIN Prüfen
Kontostandabfragen
Geldabheben
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Liste der “natürlichen Objekte”
66
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
67
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
68
1 public class Karte {23 int pin ;4 int kartenNr ;5 int kontoNr ;6 int b l z ;78 Karte ( int krtnr , int ktonr , int b , int p) {9 pin = p ;
10 kartenNr = krtnr ;11 kontoNr = ktonr ;12 b l z = b ;13 }1415 int gibPin ( ) {16 return pin ;17 }1819 int gibkartenNr ( ) {20 return kartenNr ;21 }2223 int gibKontoNr ( ) {24 return kontoNr ;25 }2627 int gibBLZ ( ) {28 return b l z ;29 }3031 }
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Die Klasse Konto
69
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
70
1 public class Konto {2 int kontoNr ;3 int b l z ;4 double kontoStand ;56 Konto ( int ktonr , int b , double d) {7 kontoNr = ktonr ;8 b l z = b ;9 kontoStand = d ;
10 }1112 int gibKontoNr ( ) {13 return kontoNr ;14 }1516 int gibBLZ ( ) {17 return b l z ;18 }1920 double gibKontoStand ( ) {21 return kontoStand ;22 }2324 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
71
konto1: Kontokonto2: Kontokonto3: Konto
Kontoverwaltung
(c) Kontoverwaltung()findeKonto(ktonr: int): Konto
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Quelltext der Klassse KontoVerwaltung
72
1 public class KontoVerwaltung {23 Konto konto1 ;4 Konto konto2 ;5 Konto konto3 ;67 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 }1213 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
73
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)
74
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de 75
Quellcode der Klasse BankAutomat (II)
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de 76
Quellcode der Klasse BankAutomat (1II)
M. Schillo, C. UhrhanGymnasium Hermeskeilwww.gymherm.de
Klassendiagramm
77
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
78
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
79
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()