2. Einleitung
n Seminar:
– Beantwortung von Fragen
– Zahlreiche Zwischenaufgaben
n Klassen und Objekte
– Diagramme
– Schnittstellen und Sichtbarkeitsbereich
– Kommunikation zwischen Objekten
– Initialisierung durch Konstruktor
5. Programmidee Klassen
n Programmname: Buchleser
n Objekttypen: Bücher und Leser
n Funktion: Gelesene Seiten eines Lesers
speichern
Buch: Leser:
n Titel n Name
n Seiten n Gelesene Seiten
6. Klassendiagramm Klassen
Aussage:
n Details über Daten- und
Verhaltensstruktur des Systems
Aufgabe:
n Zusammenstellung von Objekttypen,
deren Inhalte und Beziehungen
[nach M. Jeckle, 2004]
8. Klassendiagramm Klassen
Klasse
Klassenname
Buch Leser
n Klassennamen beginnen stets mit einem
Großbuchstaben
n Benennung: Substantiv im Singular,
zusätzlich kann ein Adjektiv angegeben
werden
n Bsp. Seminar, öffentliche Ausschreibung
9. Klassendiagramm Klassen
Buch Leser
Attribute m_titel m_name
m_seiten m_geles_seiten
10. Klassendiagramm Klassen
Buch Leser
Attribute m_titel m_name
m_seiten m_geles_seiten
n Attribute sollten immer mit „m_“ beginnen
n Attribute kann man innerhalb jeder
Methode der Klasse mit ihrem Namen
ansprechen
11. Klassendiagramm Klassen
Buch Leser
Attribute m_titel m_name
m_seiten m_geles_seiten
n Wir wollen die Attribute der Klasse von aussen nur
über ihre Methoden ansprechen.
n getAttributname() – Holt den Wert eines Attributs
n setAttributname() – Setzt den Wert eines Attributs
13. Klassendiagramm Klassen
Buch Leser
m_titel m_name
m_seiten m_geles_seiten
setTitel(titel) setName(name)
Methoden getTitel() getName()
setSeiten(seiten) setGelesSeiten(seiten)
getSeiten() getGelesSeiten()
n Welche Grundtypen und Rückgabewerte
benutzen die Elemente der Klassen?
14. Klassendiagramm Klassen
Buch Leser
m_titel : string m_name : string
m_seiten : int m_geles_seiten : int
setTitel(titel : string) : void setName(name : string) : void
getTitel() : string getName() : string
setSeiten(seiten : int) : void setGelesSeiten(seiten : int) : void
getSeiten() : int getGelesSeiten() : int
n WelcheGrundtypen und Rückgabewerte
benutzen die Elemente der Klassen?
16. Implementation verbergen Klassen
n Klassenersteller:
Erstellen neue Datentypen
n Anwendungsentwickler:
Benutzen die Datentypen in ihrer Anwendung
Ziele für den Klassenersteller :
n Bibliothek (Werkzeugkiste) erstellen
n Alles verbergen, was unnötig ist
[nach B. Eckel, 2000]
23. Fragen (1) Klassen
n Was macht ein „Klassenersteller“ und was
macht ein „Anwendungsentwickler“?
n Was ist bei der Namensgebung von
Klassen und Attributen zu beachten?
n Wie sollte man die Methode benennen, die
das Attribut „m_augenfarbe“ einer Klasse
„Mensch“ zurückgibt?
24. Projektverzeichnis Klassen
n Buch.h Deklaration (Prototyp)
n Buch.cpp Implementierung
n Leser.h Deklaration (Prototyp)
n Leser.cpp Implementierung
n Main.cpp Haupt-Programm
37. Fragen (2) Klassen
n Wasist eine Deklaration und was ist eine
Implementation?
38. Aufgaben (1) Klassen
Aufgabe 1 (5 Minuten Zeit):
Legen Sie ein neues Projekt namens
„buchleser“ an. Dort sollen die folgenden
Dateien enthalten sein:
n Leser.cpp, Leser.h
n Buch.cpp, Buch.h
n Main.cpp
40. // Leser.h: interface for the Leser class.
// Klassen
//////////////////////////////////////////////////////////////////////
#ifndef _LESER_H_ Include-Wächter
#define _LESER_H_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class Leser Deklaration der Klasse
{
public:
Leser();
virtual ~Leser();
};
#endif // _LESER_H_
41. Aufgaben (2) Klassen
Aufgabe 2 (5 Minuten Zeit):
Passen Sie den Include-Wächter in den
Header-Dateien buch.h und leser.h an.
#ifndef _LESER_H_
#define _LESER_H_
…
#endif
42. Klassenprototyp (Buch.h) Klassen
class Buch
{
Buch
private:
- m_titel string m_titel;
- m_seiten
int m_seiten;
+ setTitel(titel)
+ getTitel()
+ setSeiten(seiten) public:
+ getSeiten() void setSeiten( int seiten );
int getSeiten( );
void setTitel( string titel );
string getTitel( );
};
43. Aufgaben (3) Klassen
Aufgabe 3 (15 Minuten Zeit):
Erstellen Sie die Klassenprototypen in den
Header-Dateien buch.h und leser.h.
Buch Leser
- m_titel - m_name
- m_seiten - m_geles_seiten
+ setTitel(titel) + setName(name)
+ getTitel() + getName()
+ setSeiten(seiten) + setGelesSeiten(seiten)
+ getSeiten() + getGelesSeiten()
48. Objektdiagramm Objekte
Aussage:
n Zeigt Objekte, Werte und Beziehungs-
ausprägungen
Aufgabe:
n Darstellung einer Momentaufnahme des
Systems zur Laufzeit
[nach M. Jeckle, 2004]
53. Gekapseltes Objekt Objekte
buch1 : Buch hole
m_titel = „Räuber Hotzenplotz“ setze Titel Titel
m_seiten = 250
Titel:
„Räuber H.“
Buch Seiten:
- m_titel setze 250 hole
- m_seiten Seiten Seiten
+ setTitel(titel)
+ getTitel()
Zustand
+ setSeiten(seiten)
+ getSeiten()
Verhalten
54. Gekapseltes Objekt Objekte
buch1 : Buch
m_titel = „Räuber Hotzenplotz“
m_seiten = 250
Buch
- m_titel
- m_seiten
+ setTitel(titel)
+ getTitel()
+ setSeiten(seiten)
+ getSeiten()
[nach H. Balzert, 1999]
55. Klassen sind Schablonen Objekte
Stempel: setze
hole Objekt
Titel
des
Buch Titel
Titel:
„Räuber H. “ Types
Seiten:
hole
setze 250 hole buch1 : Buch
setze Titel Seiten Seiten
Titel
Typ oder Titel:
Klasse setze
Seiten:
hole
Seiten Seiten
hole
n Stichwort: setze
Titel
Titel:
Titel Objekt
des
„Ausprägung“ „Kater M.“
Seiten:
Types
310
Ein Exemplar
setze hole
n Seiten Seiten buch2 : Buch
56. Aufgaben (5) Objekte
Aufgabe 5 (15 Minuten Zeit):
Erzeugen Sie die Objekte wie beschrieben.
buch1 : Buch
m_titel = „Räuber Hotzenplotz“ leser1 : Leser
m_seiten = 250
m_name = „Gundalf“
m_geles_seiten = 0
buch2 : Buch
m_titel = „Kater Mikesch“
m_seiten = 310
57. Funktion: Leser liest Buch Objekte
Buch
// Leser liest ein Buch
- m_titel
- m_seiten int buch_s =
+ setTitel(titel) buch1.getSeiten();
+ getTitel()
+ setSeiten(seiten)
+ getSeiten()
Leser
- m_name
- m_geles_seiten
+ setName(name)
+ getName()
+ setGelesSeiten(seiten)
+ getGelesSeiten()
77. Aufgaben (8) Erweiterung
Aufgabe 8 (10 Minuten Zeit):
Erweitern Sie das Programm entsprechend.
Main.cpp: Leser.cpp:
// Leser liest ein Buch void Leser::leseBuch( int seiten)
int buch_s = {
buch1.getSeiten(); geles_seiten += seiten;
}
leser1.leseBuch(buch_s);
80. Zusammenfassung
n Klassen entwerfen und implementieren
n Klassen- und Objektdiagramme
n Zugriffsbeschränkung und Schnittstellen
(Geheimnisprinzip)
n Get-Set als Lese -Schreib-Schnittstelle
n Hilfs-Funktion (Modell brechen)
n Konstruktor für die Initialisierung
83. Literatur
n Helmut Balzert: Lehrbuch Grundlagen der
Informatik, Spektrum Akademischer
Verlag, 1999
n Bruce Eckel: Thinking in C++, Second
Edition, MindView, 2000
n Mario Jeckle u. a.: UML 2 Tutorial, 2003