Modul 404
Objektbasiert programmieren nach Vorgabe
Ueli Hagger
Modul 404
Kompetenz: Vorgabe interpretieren, objektbasiert mit einer Programmiersprache implementieren, dokumentieren und testen.
Übung Lotto
Aufgabe Lotto Teil 1
Sie kennen vermutlich das Schweizer Zahlenlotto.
https://www.swisslos.ch/de/swisslotto/einzeltipps/spielen.html#tipp
Nun wollen sie dieses in einem Java-Programm simulieren wobei folgendes möglich sein muss:
• Auswahl von 6 Zahlen (Tipp).
• Ziehung der Lottozahlen (button)
• Auswertung (gezogene zu getippten Zahlen)
Lotto Vorübung unabhängies Programm
Im ersten Schritt sollen 6 Zahlen in eine JList mit DefaultListModel erfasst werden können. Die Zahlen sollen über ein Textfeld eingegeben und nachher im Objekt eines DefaultListModel gespeichert und in der Jlist untereinander ausgegebenen werden.
Danach soll das Programm so ergänzt werden, dass
a) nur Zahlen im Bereich 1 bis 42 eingeben werden können b) keine gleichen Zahlen eingegeben werden können.
c) Die Zahlen sortiert werden
Aufgabe Lotto Teil 1
Vorgehen
• Entwickeln sie das GUI
• Als erstes soll nur die Auswahl der getippten Zahlen gemacht werden können.
• Die Zahlen sollen in eine JList ausgegeben untereinander ausgegeben werden.
• Die Zahlen soll in einer Liste gespeichert werden
• Auswahl von 6 Zahlen (Tipp).
• Ziehung der Lottozahlen (button) (random)
Aufgabe Lotto Teil 2
Vorgehen
• Entwickeln sie das GUI
• Nun sollen auch noch folgende Tests programmiert werden.
▪ Tippzahlen im Bereich 1 bis 42
▪ Nur 6 Zahlen können getippt werden
▪ Test, dass keine gleichen Zahlen getippt bzw. gezogen werden
• Auswertung (gezogene zu getippten Zahlen)
• Die Zahlen sollen sortiert ausgegeben werden
User Interface Lotto
Liste für gezogene Zahlen
DefaultListModel listeGezogen = new DefaultListModel();
JList gezogen = new JList(listeGezogen);
gezogen.setFont(new Font("Tahoma", Font.PLAIN, 20));
gezogen.setBounds(182, 183, 120, 169);
contentPane.add(gezogen);
8
"Eingabe": Event Handler
"Ziehen": Event Handler
10
Event Handler für Button "Ziehen"
btnZiehen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
listeGezogen.clear();
Random random = new Random();
// 6 Zahlen zwischen 1 und 42 ziehen for (int i = 0; i < 6; i++) {
int randomInt = random.nextInt(42) + 1;
listeGezogen.addElement(randomInt);
} // 6 Zahlen ziehen } // ziehen
});
Event Handler für "Eingabe"
eingabe.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
// Eingabe des Tipps
String zahl = eingabe.getText();
if (listeTipp.getSize()>=6)
JOptionPane.showMessageDialog(null,7,"Zuviele Zahlen",JOptionPane.ERROR_MESSAGE);
else{
int iZahl = Integer.parseInt(zahl);
if (iZahl>=1 && iZahl<=42) listeTipp.addElement(zahl);
else
JOptionPane.showMessageDialog(null,zahl,"Zahl nicht im Bereich", JOptionPane.ERROR_MESSAGE);
} // zuviele Zahlen } // mein Tipp
});
12
Kontrolle ob Tipp in Bereich 1 bis 42
Weiterführende Aufgaben
1. Es dürfen keine gleichen Zahlen getippt und gezogen werden
2. testen
Anhang
Übersicht Klassendiagramm
Beziehungen zwischen Klassen: Assoziationen
Haben alle Objekte einer Klasse eine bestimmte Beziehung zu einem oder mehreren Objekten einer anderen Klasse, so wird diese Beziehung Teil der Klassenbeschreibung.
Beispiel:
Beziehungen (Assoziationen) können für eine oder beide Richtungen der Beziehung einen Namen haben. Die Leserichtung wird durch einen Pfeil markiert.
Mitarbeiter arbeitet-für Unternehmen
beschäftigt
Beziehungen zwischen Klassen: Rollen
18
Die an einer Beziehung beteiligten Klassen nehmen darin eine bestimmte Rolle ein, die bei Bedarf angegeben werden kann.
Person arbeitet-für Unternehmen
beschäftigt
Mitarbeiter Arbeitgeber
Kunde Konto
Weiteres Beispiel:
ist-kontoinhaber
ist-kontoberechtigter
Multiplizitäten (Kardinalitäten) in Beziehungen
Auto Motor
0..1 1
Frage 2:
Ein Motor gehört zu wie vielen Autos?
Frage 1:
Ein Auto besitzt wie viele Motoren?
Multiplizität:
Liefert Antwort auf die Frage:
• Mit wie vielen Objekten der gegenüberliegenden Klasse kann ein Objekt der Klasse verbunden sein?
Vermerk der Anzahl in Leserichtung, also bei der
besitzt gehört zu
Multiplizitäten (Kardinalitäten) in Beziehungen
20
Frage 2:
Ein Unternehmen beschäftigt wie viele Personen?
Frage 1:
Eine Person arbeitet für wie viele
Unternehmen?
Person arbeitet-für Unternehmen
beschäftigt
Mitarbeiter Arbeitgeber
1..* 1
Notation von Multiplizitäten
Person
Person 1
nicht angeschrieben bedeutet 1!
genau 1
Person 0 .. 1
0 bis 1
Person 3 .. *
3 bis beliebige viele
Person beliebige viele (entspricht 0 .. *)
Person 0 .. 2
0 bis 2
Person
2 genau 2
Person 2, 4, 6
2, 4 oder 6
*
Spezielle Beziehungen: Aggregierung
Aggregierung ist eine Teil-Ganzes-Beziehung zwischen zwei Klassen.
Auf der Seite der Klasse, welche das Ganze darstellt, ist eine kleine Raute angebracht.
22
Auto Motor
Ganzes
1 1
Teil
Ein Teil kann zu mehreren Ganzen gehören:
Zimmer 1..* 1.. * Wand
Spezielle Beziehungen: Aggregierung
Teile können selber wieder Teile enthalten und eine Aggregation kann auch einen Namen haben:
Motor 1 4 .. 32 Ventil
Zylinder
Zylinderblock 2 .. 8
1 Auto
1 1
hat
Spezielle Aggregierung: Komposition
24
Komposition ist ein Spezialfall der Aggregation:
• Die Teile sind existenzabhängig vom Ganzen.
• Die Teile existieren folglich nur, wenn das Ganze existiert.
• Ein Teil kann somit nur zu einem Ganzen gehören.
Komposition ist durch eine gefüllte Raute auf der Seite des Ganzen angezeigt.
Rechnung 1 1..* Position
Buch 1 1..* Kapitel
Generalisierung
Girokonto sollzinsen : double
Festgeldkonto Sparkonto
Generalisierung ist eine Beziehung zwischen einer allgemeineren Klasse und einer Untermenge dieser Klasse.
Die Unterklasse enthält durch Vererbung alle Attribute der Oberklassen(n).
Die Unterklasse erweitert die Oberklassen durch weitere Attribute oder Beziehungen.
Generalisierung Spezialisierung
Konto
kontostand : double inhaber : string
habenzinsen : double
Operationen (Methoden)
26
Konto
kontostand : double inhaber : string
habenzinsen : double einzahlen()
zeigeKontostand() kuendigen()
Klassenname Attribute
Operationen
Mit Objekten kann man etwas tun, z.B. für ein Konto:
darauf einzahlen, den Kontostand anzeigen, das Konto kündigen, etc.
Jeder Klasse von Objekten kann man in UML deshalb Operationen
(auch Methoden genannt) zuordnen:
Vererbung von Operationen
Über eine Spezialisierung werden neben Attributen auch Operationen
vererbt.
Girokonto
sollzinsen : double dispo : double
Festgeldkonto mindBetrag : int laufzeit : int
Sparkonto
auszahlen() Konto
kontostand : double inhaber : string
habenzinsen : double einzahlen()
zeigeKontostand() kuendigen()
Konventionen für die Namensgebung
28
Kunde adresse
gibAdresse()
Konto kontoNr
kontoStand auszahlen()
1
0..*
0..*
besitzt
kontoInhaber
Klassenname: Substantiv
Rollenname: Substantiv
Beziehungsname: Verb
Attribute: Substantiv
Operationen: Verb
Namen sollte man so wählen, dass man Sätze formen kann.
Beispiel:
Beispiel
• Quelle: http://www.srvtz.de/Wiki.jsp?page=JavaI.Alles&print=ja
Beispiel 1: CD-Datenmodell (1)
Problembeschreibung:
Es soll ein Klassenmodell für ein Informationssystem über CDs modelliert werden:
• Jede CD enthält einen oder mehrere Titel.
• Jede CD ist von einer Plattenfirma herausgebracht.
• Eine CD hat einen CD-Titel.
• Ein Titel kann auf mehreren CDs enthalten sein.
• Ein Titel hat einen Namen und eine Länge.
• Jeder Titel kann von mehreren Künstlern gespielt werden.
• Ein Künstler kann mehrere Titel spielen.
30
Möglichkeit zur Findung von Klassen
• Beschreiben Sie in textueller Form das Problem. Beachten Sie das die Beschreibung in Aufsatzform abgefasst werden muss, d.h. keine Stichworte, Aufzählungen usw.
• Markieren Sie alle Hauptwörter, z.B. mit einem roten Stift.
• Markieren Sie alle Verben, z.B. mit einem grünen Stift.
• Markieren Sie alle Multiplizitäten, z.B. mit einem blauen Stift.
• Alle Hauptwörter sind nun Klassen, bzw. Attribute.
• Alle Verben sind Methoden, welche die Attribute verändern, bzw. etwas ausführen oder Beziehungen
Beispiel 1: CD-Datenmodell (1)
Problembeschreibung:
Es soll ein Klassenmodell für ein Informationssystem über CDs modelliert werden:
• Jede CD enthält einen oder mehrere Titel.
• Jede CD ist von einer Plattenfirma herausgebracht.
• Eine CD hat einen CD-Titel.
• Ein Titel kann auf mehreren CDs enthalten sein.
• Ein Titel hat einen Namen und eine Länge.
• Jeder Titel kann von mehreren Künstlern gespielt werden.
• Ein Künstler kann mehrere Titel spielen.
Klassen oder Attribute
CD, Titel, Plattenfirma, CD-Titel, Titel, Namen, Länge, Künstler
Methoden, Beziehungen
enthält, enthalten sein, gespielt werden, spielt
Klassen oder Attribute
CD, Titel, Plattenfirma, CD-Titel, Namen, Länge, Künstler
Methoden, Beziehungen
enthält, enthalten sein, gespielt werden, spielt
34
Beispiel 1: CD-Datenmodell (1)
Problembeschreibung:
Es soll ein Klassenmodell für ein Informationssystem über CDs modelliert werden:
• Jede CD enthält einen oder mehrere Titel.
• Jede CD ist von einer Plattenfirma herausgebracht.
• Eine CD hat einen CD-Titel.
• Ein Titel kann auf mehreren CDs enthalten sein.
• Ein Titel hat einen Namen und eine Länge.
• Jeder Titel kann von mehreren Künstlern gespielt werden.
• Ein Künstler kann mehrere Titel spielen.
Beispiel 1: CD-Datenmodell (2)
36
CD cdTitel
plattenfirma
Titel
titelName titelLänge
Kuenstler name
1..* spielt
gespielt-von
1..* 1..* 1..*
Beispiel 1: CD-Datenmodell (3)
Erweiterung:
Über eine Plattenfirma sollen Aussagen gemacht werden können:
Plattenfirma
gibt-heraus
herausgegeben-von
1 CD
cdTitel
Titel
titelName titelLänge
Kuenstler name spielt
gespielt-von
1..* 1..* 1..* 1..*
1..*
CD cdTitel
plattenfirma
Titel
titelName titelLänge
Kuenstler name
1..* spielt
gespielt-von
1..* 1..* 1..*