Fakultät für
Wirtschaftswissenschaften
Einführung in die Programmierung
Klassendefinition und Objekte
Uwe Lämmel
www.wi.hs-wismar.de/~laemmel
[email protected]
Uwe Lämmel
Klassendefinition und Objekte
Folie 1
Inhalt
 Klasse
– Bauplan: Zweck, Aufbau, Entwurf
– ausführbare Klasse
– Bibliotheksklasse
 Methoden
– Konstruktor
– Zugriff
– Ausgabe
– Verarbeitung
 Parameter
 Erzeugung und Nutzung von Objekten
Uwe Lämmel
Klassendefinition und Objekte
Folie 2
Klasse
 repräsentiert alle Objekte eines Typs (Bauart),
z.B.: "Student ", "Ticketautomat"
 beschreibt Objekte mittels:
– Daten = Merkmale
(Attribute, Instanz-Variablen)
– Aktionen = Methoden
Uwe Lämmel
Klassendefinition und Objekte
Folie 3
Ticket-Automat: Nutzersicht = externe Sicht
Beispiel:
 Ein naiver Ticket-Automat:
– liefert Tickets zum festen Preis
 Fragen:
– Wie wird dieser Festpreis festgelegt?
– Wie wird "Geld eingeworfen"?
– Wie verwaltet der Automat das Geld?
Uwe Lämmel
Klassendefinition und Objekte
Folie 4
Ticket-Automat: Programmierer= interne Sicht
 Klasse muss Objekte so beschreiben,
dass gewünschtes Verhalten erreicht wird
Merkmale?
preis
bisherGezahlt
gesamtsumme
anzVerkaufterTickets
Uwe Lämmel
Methoden?
Konstruktor
getPreis
getBisherGezahlt
geldEinwerfen
ticketDrucken
Klassendefinition und Objekte
Folie 5
Merkmal (Datenfeld, Instanz-Variable)
 Instanz-Variablen speichern
Merkmale
 BlueJ: "inspect" zeigt die
Merkmale eines Objekts
 Werte der Instanz-Variablen
= Zustand eines Objekts
Sichtbarkeit
public class TicketAutomat{
private int preis;
private int bisherGezahlt;
private int gesamtsumme;
//hier: Konstruktoren und Methoden
} //TicketAutomat
Typ
Name der Variable
private int preis;
Uwe Lämmel
Klassendefinition und Objekte
Folie 6
Konstruktoren
 … erzeugen ein Objekt
 … haben denselben Namen wie die Klasse
 … legen Anfangswerte für Merkmale fest:
häufig: Anfangswert als Parameter "von außen"
public TicketAutomat (int ticketPreis) {
preis
= ticketPreis;
bisherGezahlt = 0;
gesamtsumme = 0;
anzTickets
= 0;
} // TicketAutomat
Uwe Lämmel
Klassendefinition und Objekte
Folie 7
Daten-Übergabe mittels Parameter
TicketAutomat bus = new TicketAutomat(500);
Uwe Lämmel
Klassendefinition und Objekte
Folie 8
Zuweisung (Assignment)
variable = expression;
 Werte in Variablen speichern:
preis = ticketPreis;
bisherGezahlt = 0;
 Variable speichert NUR EINEN Wert;
vorheriger Wert verloren
Uwe Lämmel
Klassendefinition und Objekte
Folie 9
Methoden
 legen das Verhalten von Objekten fest
 unterscheiden:
– Konstruktor-Methoden
– Zugriffsmethoden (lesend, schreibend)
– Verarbeitungsmethoden
– Ausgabe-Methoden
 einheitlicher Aufbau:
– Kopf (Signatur)
public int getPreis()
– Körper
{ … Anweisungen … }
Uwe Lämmel
Klassendefinition und Objekte
Folie 10
Zugriffsmethode, lesend
 Information über das Objekt
 besitzt Ergebnis-Typ und return-Anweisung
 return-Anweisung bestimmt Ergebnis
Ergebnis-Typ
Sichtbarkeit
Methodenname
Parameterliste
public int getPreis(){
return preis;
} //getPreis
return-Anweisung
bestimmt Ergebnis
Kommentar zur schließenden Klammer
Anfang und Ende des Methoden-Körpers (block)
Uwe Lämmel
Klassendefinition und Objekte
Folie 11
Zugriffsmethode, schreibend




Sichtbarkeit
Verändert die Merkmale eines Objekts
besitzt (meist) Parameter
kein Ergebnis-Typ (void)
enthält Zuweisungen an Instanz-Variable
(kein) Ergebnis-Typ
Methodenname
Parameterliste
public void setPreis(int neu){
preis = neu;
Zuweisung
} //setPreis
Kommentar zur schließenden Klammer
Anfang und Ende des Methoden-Körpers (block)
Uwe Lämmel
Klassendefinition und Objekte
Folie 12
Ausgabemethode
 KEINE Verarbeitung
 nur Ausgabe der Objekt-Werte in gewünschter Form
 2 Möglichkeiten:
– direkte Ausgabe : Ergebnistyp void, Ausgabe: System.out.println(…);
– toString-Methode: Ergebnistyp String und return-Anweisung
public void ausgabe() {
System.out.println("Preis=" + preis + " Geldsumme= "+gesamtsumme);
} //ausgabe
public String toString() {
return "Preis=" + preis + " Geldsumme= "+gesamtsumme;
} //toString
Uwe Lämmel
Klassendefinition und Objekte
Folie 13
Klasse = Bauplan
class Klasse {
– Merkmale
– Konstruktoren
– Methoden
// Merkmale = Instanz-Variablen (private)
private int number;
// Konstruktor(en) mit/ohne Parameter
public Klasse( ) { /* Initialisierungen */ }
// Zugriffsmethoden: getX/setX
public int getNumber()
{ return number;}
public void setNumber(int n) { number=n; }
// Arbeitsmethoden
public boolean istTeiler(int a) { … }
// Ausgabe
public void ausgabe() {
System.out.println("Nummer= "+number);
}
}//Klasse
Uwe Lämmel
Klassendefinition und Objekte
Folie 14
Klasse TicketAutomat
 Beispiel in BlueJ entwickeln.
 Klasse testen:
– TicketAutomat-Objekt erzeugen
– Methoden an das Objekt senden
– mittels "inspect" Zustand des Objekts einsehen
– Schreiben einer ausführbaren Klasse
Uwe Lämmel
Klassendefinition und Objekte
Folie 15
Ausführbare Klasse
 enthält main Methode: public static void main(String[ ] args) { … }
 kann als Programm ausgeführt werden:
class Klasse {
// main-Methode:
public static void main(String[ ] args) {
// Verarbeitung
TicketAutomat bus = new TicketAutomat(500);
bus.geldEinwerfen(200);
bus.ticketDrucken();
bus.ausgabe();
System.out.println(bus);
}//main
}//Klasse
Uwe Lämmel
Klassendefinition und Objekte
Folie 16
Zusammenfassung




Klassen bilden reale oder virtuelle Welt ab
Klassen beschreiben Objekte
Klasse: Merkmale, Konstruktoren, Methoden
Merkmale = Instanzen-Variablen
– Menge der Werte = Zustand des Objekts
 Konstruktor: erzeugt Objekt
 Zugriffsmethoden: lesend, schreiben
 Methoden können …
– Zustand des Objekts ändern
– Parameter besitzen
– ein Ergebnis liefern
 Zuweisung Wert an Variable: Speicher
Uwe Lämmel
Klassendefinition und Objekte
Folie 17
Aufgabe
 Machen Sie sich mit dem Projekt
"Naiver-Ticket-Automat" vertraut.
 Verbessern Sie den Ticket-Automaten
– Es wird ein Ticket nur gedruckt, falls genügend
(ev. auch mehr) Geld eingeworfen wurde.
– Eine Methode gibt das Wechselgeld heraus.
– Es werden nur sinnvolle Geldbeträge in der Methode
"geldEinwerfen" akzeptiert.
 selbst erarbeiten!
Uwe Lämmel
Klassendefinition und Objekte
Folie 18
Digitale Uhr: Klassen und Objektinteraktion
Uwe Lämmel
Klassendefinition und Objekte
Folie 19
Digitale Uhr: Nutzersicht = externe Sicht
 Ein digitale Uhrenanzeige
– Zeigt Stunde und Minute
 Fragen:
– Wie wird erkannt, dass eine Minute vorbei ist?
– Wie kann die Uhr gestellt werden?
Uwe Lämmel
Klassendefinition und Objekte
Folie 20
Digitale Uhr: Programmierer = interne Sicht
Warum vierstellige Anzeige?
Zwei Anzeigen
zu je 2 Ziffern!
Vorteil:
 EINE Klasse für eine zweistellige Anzeige
 ZWEI Objekte der Klasse für die Uhr einsetzen:
– Ein Anzeige-Objekt stunden
– Ein Anzeige-Objekt minuten
Uwe Lämmel
Klassendefinition und Objekte
Folie 21
Abstraktion und Modularisierung
Abstraktion
–
–
Details ignorieren
Konzentration auf Wesentliches
Modularisierung
–
–
–
Uwe Lämmel
Teilen der Aufgabe in kleinere Teile
getrennte Lösung der Teilprobleme
Interaktion der Teillösungen
Klassendefinition und Objekte
Folie 22
Digitale Uhr: Objekt-Interaktion
Uwe Lämmel
Klassendefinition und Objekte
Folie 23
Nummernanzeige: Programmiersicht
 Klasse muss Objekte so beschreiben,
dass gewünschtes Verhalten erreicht wird
 Hochzählen (Methode erhoehen)
 Wenn limit erreicht, dann auf 0 setzen
Merkmale?
- limit
- wert
Uwe Lämmel
Methoden?
- Konstruktor
- getLimit
- getWert
- getAnzeigeWert
- setWert
- erhoehen
Beispiel
Zähler bis 12:
Wert Anzeige
0
1
2
…
9
10
11
0
1
…
00
01
02
…
09
10
11
00
01
…
Klassendefinition und Objekte
Folie 24
Klasse Nummeranzeige
Merkmale
Konstruktor
public class Nummernanzeige {
private int limit;
private int wert;
public Nummernanzeige(int anzeigeLimit) {
limit = anzeigeLimit;
wert = 0;
} //Konstruktor
// Methoden fehlen hier.
} // Nummernanzeige
Uwe Lämmel
Klassendefinition und Objekte
Folie 25
Klasse Nummernanzeige: Methoden
// Zugriffsmethoden:
public int getWert() { return wert; }
public String getAnzeigewert() {
if(wert<10)
{ return "0" + wert;}
else
{ return "" + wert; }
} //gibAnzeigewert
public void setWert(int ersatzwert) {
if((ersatzwert >= 0) && (ersatzwert < limit)) {
wert = ersatzwert;
} //if
} //setzeWert
public void erhoehen() {
wert = wert + 1;
if((wert == limit) wert =0;
} //erhoehen
Uwe Lämmel
Klassendefinition und Objekte
Folie 26
Klasse Uhrenanzeige
public class Uhrenanzeige {
private Nummernanzeige stunden;
private Nummernanzeige minuten;
// Konstruktor und
// Methoden fehlen hier!
} // Uhrenanzeige
Uwe Lämmel
Klassendefinition und Objekte
Folie 27
Klasse Uhrenanzeige: Programmiersicht
 Klasse muss Objekte so beschreiben,
dass gewünschtes Verhalten erreicht wird
 Anzeige der Zeit
 Eine Minute vorbei (Methode taktsignalGeben)
Merkmale?
- stunden
- Minuten
- zeitanzeige
Uwe Lämmel
Methoden?
- Konstruktor
- getUhrzeit
- getStunden
- getMinuten
- setStunden
- setStunden
- setUhrzeit
- taktsignalGeben
Klassendefinition und Objekte
Folie 28
Klassendiagramm
Uwe Lämmel
Klassendefinition und Objekte
Folie 29
Uhrenanzeige: Instanzvariablen
public class Uhrenanzeige {
private Nummernanzeige stunden;
private Nummernanzeige minuten;
private String zeitanzeige; // techn. Gründe
Neu:
 Instanzvariablen können Objekte sein
 Instanzvariable stunden
ist Objekt der Klasse Nummernanzeige
Uwe Lämmel
Klassendefinition und Objekte
Folie 30
Uhrenanzeige: Konstruktor
 ZWEI Objekte der Klasse Nummernanzeige bilden eine Uhr
 Sind Instanzvariablen Objekte,
dann müssen diese im Konstruktor erzeugt werden:
 Stunden = new Nummeranzeige(24);
// Konstruktor
public Uhrenanzeige (){
stunden = new Nummernanzeige(24);
minuten = new Nummernanzeige(60);
anzeigeAktualisieren();
} // Konstruktor
Uwe Lämmel
Klassendefinition und Objekte
Folie 31
Klasse Uhrenanzeige: Methoden
public String getUhrzeit(){ return zeitanzeige; }
Setzen einer Uhrzeit
=
Setzen der Werte in
Nummernanzeige-Objekten
Methoden-Aufruf:
objekt.methode(parameter);
Zeitanzeige ist ein String
aus zweistelliger Angabe
der Stunden, dem „:“
als Trennzeichen
und den Minuten.
public void setUhrzeit(int stunde, int minute){
stunden.setWert(stunde);
minuten.setWert(minute);
anzeigeAktualisieren();
} //setzeUhrzeit
private void anzeigeAktualisieren(){
zeitanzeige = stunden.getAnzeigewert() + ":"
+ minuten.getAnzeigewert();
} //anzeigeAktualisieren
Methoden setWert(int wert) und getAnzeigewert()
aus Klasse Nummernanzeige werden benutzt.
Uwe Lämmel
Klassendefinition und Objekte
Folie 32
Klasse Uhrenanzeige: Methoden 2
/**
* - Operation einmal pro Minute aufrufen
* - sorgt dafür, dass die Uhrenanzeige um eine Minute
* weiter gestellt wird.
*/
public void taktsignalGeben( ) {
minuten.erhoehen( );
if (minuten.gibWert( ) == 0) { // Stunde vorbei, nach 59 folgt 0;
stunden.erhoehen( );
// nächste Stunde einstellen
} //if
anzeigeAktualisieren(); // String zeitanzeige aktualisieren
} //taktsignalGeben
Uwe Lämmel
Klassendefinition und Objekte
Folie 33
Zusammenfassung










Uwe Lämmel
Klassen bilden reale/virtuelle Welt ab
Klassen beschreiben Objekte
Klasse: Merkmale, Konstruktoren, Methoden
Merkmale = Instanzen-Variablen
– Menge der Werte = Zustand des Objekts
Konstruktor: erzeugt Objekt
Zugriffsmethoden: lesend, schreiben
Methoden können …
– Zustand des Objekts ändern
– Parameter besitzen
– ein Ergebnis liefern
Objekte können andere Objekte benutzen
Klassen fördern Modularisierung
Modularisierung fördert Wiederverwendung
Klassendefinition und Objekte
Folie 34
Aufgabe
 Implementieren Sie das Uhr-Beispiel
 Wertungsaufgabe
– Datumsanzeige 14.10.23 (alle Monate 30 Tage)
– dazu Klasse Nummernanzeige nutzen
 Erweiterung der Datumsanzeige
– Korrekte Zahl der Tage je Monat
– Schaltjahr
Uwe Lämmel
Klassendefinition und Objekte
Folie 35