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