Zugriff auf Daten kann eingeschränkt werden (Zugriffsrechte)
Code kann wiederverwendet werden (Vererbung)
Um dies zu Erreichen werden Klassen definiert, in
welchen man die Daten und Methoden definiert.
Von jeder Klasse können beliebig viele Objekte
zur Laufzeit erzeugt werden.
Eine Klasse besteht aus
Namen
Attributen (auch Eigenschaft oder Property), sie halten die Daten
Für eine Klasse Person z.B. Vorname, Nachname, Geburtsdatum, ...
Für ein Klasse Kreis z.B. den Radius
Methoden beschreiben die Funktionalität
In der Klasse Person z.B. gibAlter()
In der Klasse Kreis z.B. berechneFläche()
Zugriffsrecht
Public (öffentlich) wird mit einem + dargestellt
auf öffentliche Attribute oder Methoden kann jedes Objekt zugreifen.
Diese bilden die Schnittstelle für andere Objekte.
Private wird mit einem - dargestellt
auf private Attribute und Methoden können nur Objekte der eigenen Klasse zugreifen.
Dies wird für Hilfsmethoden verwendet, auf die nicht von außen zugegriffen werden soll.
Meist macht man alle Attribute private (Datenkapselung), da so nur über Methoden auf sie zugegriffen werden kann
und keine ungültigen Attribut-Werte auftreten können (z.B. negatives Alter).
Protected (geschützt) wird durch # dargestellt.
Protected Attribute und Methoden können von Objekten der eigenen Klasse und deren Unterklassen
zugegriffen werden. Dies spielt erst eine Rolle, wenn man Vererbung verwendet.
Datentypen
Jedes Attribut, jeder Parameter einer Methode und jede Methode, die ein Ergebnis zurückliefert, hat einen Datentyp.
Diese können z.B.
int für ganze Zahlen
float für Kommazahlen
string für Text
sein.
Klassendiagramm
Die Darstellung einer Klasse in UML erfolgt dreigeteilt:
oben steht der Klassenname (fett und zentriert)
Attribute in der Form Zugriffsrecht Name : Typ (linksbündig)
Methoden in der Form Zugriffsrecht Name(...):Typ (linksbündig)
Rechteck
+ breite : int
+ höhe : int
+ berechne_Fläche() : int
+ berechne_Umfang() : int
Der Konstruktor
Der Konstruktor wird im UML-Klassendiagramm als Methode dargestellt, welche den gleichen Namen wie die Klasse hat.
Der Konstruktor ist aber keine normale Methode, sondern er dient dazu Objekte der Klasse zu erzeugen.
Ist kein Konstruktor im UML-Diagramm angegeben, so gibt es implizit einen Konstruktor ohne Parameter.
Die Klasse Rechteck oben hat keinen Konstruktor im Klassendiagramm, somit kann man aber Objekte mit dem
Konstruktor Rechteck() erzeugen.
Erweitert man diese Klasse wie im folgenden Klassendiagramm, so hat sie zwei Konstruktoren.
Man kann jetzt Rechtecksobjekte mit r1=Rechteck() oder r2=Rechteck(2,5)
erzeugen.
Die Aufgabe des Konstruktors ist es alle Attribut zu initialisieren, d.h. allen Attributen gültige
Startwerte zuzuweisen.
In der Klasse Rechteck kann der Konstruktor der breite und höhe den Wert
0 zuweisen, wenn keine Parameter übergeben wurden oder er kann
breite=b und höhe=h setzen, wenn Parameter mit übergeben wurden.
Rechteck
+ breite : int
+ höhe : int
+ Rechteck()
+ Rechteck(b:int, h:int )
+ berechne_Fläche() : int
+ berechne_Umfang() : int
Diese Klasse hat 2 Konstruktoren,
einen mit 0 und einen mit 2 Parametern
Aufgaben
Es werden Objekte der Klasse Rechteck erzeugt.
Ordnen Sie die Begriffe Klasse, Attribut, Attribut-Wert, Methode und Objektname
den folgenden Begriffen und Werten zu:
100
breite
r1
berechne_Fläche()
20
Rechteck
berechne_Umfang()
höhe
100 - Attribut-Wert
breite - Attribut
r1 - Objektname
berechne_Fläche() - Methode
20 - Attribut-Wert
Rechteck - Klasse
berechne_Umfang() - Methode
höhe - Attribut
Für eine Adressverwaltung soll eine Klasse Person erstellt werden.
Überlegen Sie, welche Attribute nötig sind und geben Sie ein UML-Klassendiagramm an, in welchem alle
Attribute mit der Sichtbarkeit public angegeben sind.
Methoden sind keine verlangt.
Welche Attribute muss der Konstruktor initialisieren?
Welche Funktionen haben die Methoden?
Warum kann man vom Hauptprogramm nicht direkt auf das Saldo der Kontoobjekte zugreifen?
Der Konstruktor muss alle Attribute initialisieren.
Für das Saldo nimmt er 0 und für das Attribut Kontonummer nimmt er den übergebenen Parameter kontonummer.
Die Namen sind ziemlich selbsterklärend.
Weil ein - (Minus) davor steht und das Attribute private ist.
Wir verwenden das Klassendiagramm aus der vorherigen Aufgabe weiter.
Welche Methoden müssen nacheinander aufgerufen werden, dass ein neues Konto mit der Kontonummer 0815 angelegt wird
und darauf 2000€ eingezahlt, dann der Kontostand abgerufen wird und anschließend 100€ abgehoben werden?
Zuerst muss das Konto mit dem Konstruktor aufgerufen werden
Konto(0815)
Dann muss eingezahlt werden mit
einzahlen(2000)
dann wird der Kontostand abgefragt
getSaldo()
Nun heben wir 100€ ab
abheben(100)
Damit das alles funktioniert müssen wir das neu Konto an ein Objekt binden:
k = Konto(0815)
k.einzahlen(2000)
k.getSaldo()
k.abheben(100)