BlueJ und Java: Teil II: Einführung in die Grundkonzepte...

22
BlueJ und Java: Grundkonzepte objektorientierten Programmierens Thomas Karp, Christoph Uhrhan 7.5.2012 - 9.5.2012 PL Speyer Gymnasium Hermeskeil Schwerpunkte Musik und Informatik Teil II: Einführung in die Objektorientierte Modellierung Christoph Uhrhan M. Schillo, C. Uhrhan Gymnasium Hermeskeil www.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

Transcript of BlueJ und Java: Teil II: Einführung in die Grundkonzepte...

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()