Programmierung und Angewandte Mathematik

Werbung
Programmierung und Angewandte
Mathematik
C++ /Scilab Programmierung und Einführung in das Konzept der
objektorientierten Anwendungen zu wissenschaftlichen Rechnens
SS 2012
F
Fomuso
Ek
Ekellem
ll
Inhalt




Einführung in der Vererbung
Mechanismus der Vererbung
Zugriffsrechte(private, public und protected)
Zugriffrecht(friend)
Fomuso Ekellem
Programmierung und Angewandte Mathematik
2
Einführung in der Vererbung
Bestandteile objektorientierter Programmierung:

Bestehende Klassen können durch Spezialisierung und Erweiterung weiterentwickelt
werden, ohne den Programmcode der alten Klassen verändern zu müssen
Vererbung
Dadurch erspart man sich zunächst einmal, bestehenden Programmcode neu zu schreiben oder zu
d li i
duplizieren.
 Statt dessen schreibt man eine neue Klasse und gibt bei der Beschreibung an, von welcher
bestehenden Klasse ausgegangen werden soll (Ableiten aus dieser Klasse).
 Die neue Klasse erbt Methoden und Attribute der alten Klasse ((Basisklasse oder Superklasse)
p
) und
kann zusätzlich durch neue ergänzt werden bzw. Methoden der alten Klasse können umdefiniert
werden.


Die Idee,
Idee Klassenhierarchien aufzubauen,
aufzubauen sollte aber nicht allein dazu dienen,
dienen Schreibweisen
zu vereinfachen, sondern konzeptionelle Ideen von Programmdesign umsetzen. Im
wesentlichen bedeutet das für uns, dass die Sprachmechanismen von C++ dazu genutzt
werden sollen, Gemeinsamkeiten zwischen Klassen auszudrücken.
Fomuso Ekellem
Programmierung und Angewandte Mathematik
3
Einführung in der Vererbung

Beispiel: Das Konzept von einem Beamten, einem Studenten und einem Angestellten /
Mitarbeiter sind miteinander verwandt. Alle drei sind Universitätsangehöriger. Bei der
D
Darstellung
ll
von Beamten,
B
Studenten
S d
und
d Angestellter/Mitarbeitern
A
ll /Mi b i
i einem
in
i
P
Programm,
ohne die Notation einer Universitätsangehöriger einzuführen, fehlt „etwas“.
Universitätsangehöriger
Beamter
Angestellter/
Mitarbeiter
Professor
Wissenschaftler
Fomuso Ekellem
WM
Student
Tutor
Lehrveranstalter
Programmierung und Angewandte Mathematik
4
Einführung in der Vererbung

Der Compiler muss von dieser Beziehung mitgeteilt werden. Ableiten einer Klasse mit
Doppelpunkt : und Zugriffsrecht:
Class Universitätsangehöriger{
public:
…
private:
…
protected:
…
};
class Beamter : public Universitätsangehöriger{
public:
…
private:
…
protected:
…
};
Fomuso Ekellem
class Mitarbeiter : private Universitätsangehöriger{
public:
…
private:
…
protected:
…
};
Programmierung und Angewandte Mathematik
class Student : protected Universitätsangehöriger{
public:
…
private:
…
protected:
…
};
5
Mechanismus der Vererbung:





Beamter, Student und Mitarbeiter sind von Universitätsangehöriger abgeleitet.
Universitätsangehöriger ist Basisklasse für aller drei.
Alle drei besitzen alle Member von Universitätsangehöriger plus zusätzlich eigenen.
Alle drei können so auch überall dort verwendet werden, wo ein Universitätsangehöriger
erlaubt ist.
Das Objekt einer abgeleiteten Klasse kann deshalb wie ein Objekt der
Basisklasse(Superklasse) behandelt werden, wenn es über Zeiger und Referenzen manipuliert
wird. Die Umkehrung hiervon ist ungültig:
void Vorlesung(Student s, Universitätsangehöriger Ua )
{
Universitätsangehöriger * pUa = &s;
// o.k.
Student* ps = &Ua;
// error
}
Fomuso Ekellem
Programmierung und Angewandte Mathematik
6
Zugriffsrechte



Alle public und protected Methoden(Funktionen) und Variablen(Eigenschaften) werden
vererbt und sind dadurch auch in der Subklasse vorhanden.
Diese Sichtbarkeit kann mit dem Zugriffsrecht nach dem Doppelpunkt weiter eingeschränkt
werden:
Man beachte, dass der Default Zugriffsrecht private ist und nicht public – auch wenn man
in den allermeisten Fällen public benötigt.
Fomuso Ekellem
Programmierung und Angewandte Mathematik
7
Zugriffrecht

Beispiel zu private / protected / public Vererbung:
class A {
private:
int priv;
protected:
int p
prot;;
public:
int publ;
};
Fomuso Ekellem
class B : pxxx A {
public:
void m() {...};
};
void f() {
A a;
B b;
}
Programmierung und Angewandte Mathematik
8
Zugriffrecht


private / protected Vererbung: alle public Methoden der Superklasse sind in der Subklasse
nicht mehr public. Oft eine zu starke Einschränkung.
Generell wird private/protected Vererbung in der Praxis selten verwendet. Mit sauberem
OODesign sollten Sie private/protected Vererbung eigentlich nicht verwenden müssen.
Fomuso Ekellem
Programmierung und Angewandte Mathematik
9
Zugriffrecht(friend)
Friend Klassen:

In einigen Fällen kann es notwendig werden, dass andere Klassen oder Funktionen Zugriff
auf die geschützten Member einer Klasse benötigen.

Damit eine Klasse Class1 Zugriff auf alle Member einer anderen Klasse Class2 erhält, wird die
Klasse Class1 als friend-Klasse der Klasse Class2 deklariert. Dazu wird innerhalb der
Kl
Klassendefinition
d fi iti d
der Kl
Klasse, di
die ih
ihren 'S
'Schutz'
h t ' aufgibt,
f ibt ffolgende
l
d A
Anweisung
i
eingefügt:
i fü t
Siehe Beispiel : friend_to_friend
Fomuso Ekellem
Programmierung und Angewandte Mathematik
10
Zugriffrecht(friend)
Friend methoden:

Außer den friend-Klassen gibt es auch noch friend-Methoden. friend-Methoden gehören
keiner Klasse an und haben ebenfalls vollen Zugriff auf alle Member einer Klasse. Um eine
Methode als friend-Methode einer Klasse zu deklarieren, wird wieder innerhalb der Klasse
die ihren 'Schutz' aufgibt folgende Anweisung eingefügt:
friend Rückgabetyp Methodenname(...);
Methodenname( )

Man beachte:
Die friend-Eigenschaft
friend Eigenschaft einer Klasse ist nicht vererbbar.
vererbbar

Siehe Beispiel: friendfunction
Fomuso Ekellem
Programmierung und Angewandte Mathematik
11
Herunterladen