Die Klasse Vertiefung

Die Klasse – Vertiefung Vom Objekt zur Klasse ● ● ● Basis des OO-Paradigmas ist (wen verwundert es): Das Objekt Objekte werden in der Lehre und i...
3 downloads 0 Views 158KB Size
Die Klasse – Vertiefung

Vom Objekt zur Klasse ●





Basis des OO-Paradigmas ist (wen verwundert es): Das Objekt Objekte werden in der Lehre und im allgemeinen Programmier-Jargon selbstverständlich mit Klassen in Verbindung gebracht Das dies NICHT notwendigerweise so ist, zeigt Javascript

Vom Objekt zur Klasse - Javascript ●

Javascript ist eine objektorientierte aber klassenlose dynamisch typisierte Skriptsprache –

Hat Objekte, aber keine Klassen (???)



Hat dynamische Typen (Typen abhängig vom Inhalt)



Braucht einen Interpreter (In diesem Fall den Webbrwoser)

Vom Objekt zur Klasse - Javascript ●







Wie kann eine OO-Programmiersprache keine Klassen haben ? Durch eine Unterart der ObjektOrientierung, der prototypbasierten Programmierung Dabei wird auf das Konzept der Klasse verzichtet Die Sprache besitzt inheränt einige grundlegende Objekte

Vom Objekt zur Klasse - Javascript ●





Diese werden „geklont“ und ggfl. Durch neue Funktionen erweitert Durch das „Klonen“ werden die vorhandenen Attribute und Methoden des Ursprungsobjekts in das neue Objekt kopiert und stehen zur Verfügung Dabei gilt wie beim Klassenkonzept die Sichtbarkeitssteuerung per Schlüsselwort –

private



protected



public

Vom Objekt zur Klasse - Javascript ●

Um ein neues Objekt zu instanziieren, wird eine Javascript-Funktion genutzt

function meinObjekt () { this.zahl = 1; } var objekt = new meinObjekt(); // erzeugt Objekt window.alert(objekt.zahl); // gibt 1 aus

Vom Objekt zur Klasse - Javascript ●



Die objekterzeugenden Funktionen können Attribute und Methoden beinhalten Dabei können die Sichtbarkeiten festgelegt werden

function meinObjekt (parameter) { var private_eigenschaft = "privat"; this.oeffentliche_eigenschaft = "öffentlich"; var private_methode = function () { window.alert(private_eigenschaft); }; };

Vom Objekt zur Klasse - Javascript Vererbungs - Beispiel



var object1 = {a:1,b:2}; // Array function child(){ this.c=3; this.d=4 }; child.prototype=object1; var object2=new child(); alert(object2.a); // zeigt den Wert 1 an alert(object2.c); // zeigt den Wert 3 an

Vom Objekt zur Klasse - Javascript ● ●









Prototypen erlauben hohe Flexibilität Objekte können quasi überall definiert und instaziiert werden Dabei muß nicht mal auf Vererbung und Sichtbarkeit verzichtet werden Allerdings exisitiert keinerlei CodeWiederverwendung Ebenso sind keine überprüfbaren Strukturen vorhanden Somit sind keine automatischen Test möglich

Vom Objekt zur Klasse – Die Klasse ●





Um Objekte zusammenfassen zu können und damit Code-Wiederverwendung überhaupt möglich zu machen, gibt es die Klasse Eine Klasse beschreibt also die gemeinsamen Attribute und Methoden gleichartiger Objekte Diese werden dann als Exemplarer einer Klasse bezeichnent

Vom Objekt zur Klasse – Die Klasse ●







Da das Klassen-Konzept in den meisten OO-Sprachen inheränt vorhanden ist, werden die Begriffe „Exemplar“ und „Objekt“ meist synonym gebraucht Wichtig ist zu wissen, das ein Objekt aber nicht zwangsläufig ein Exemplar sein muß (siehe Javascript) Exemplar bezeichnet immer die Zugehörigkeit eines Objekts zu einer Klasse, während ein Objekt an sich auch ohne Klasse erzeugt werden kann Exemplare heißen auch Instanzen

Vom Objekt zur Klasse – Die Klasse ●



Zu Beginn der Software-Entwicklung steht die Aufgabe, die benötigten Objekte zu identifizieren und anschliessend zu klassifizieren Die Klassifizierung kann (und wird auch meistens) einen Vererbungsbaum ergeben, an dem Objekte auf verschiedenen Ebenen als Exemplarerabgeleitet werden

Vom Objekt zur Klasse – Die Klasse ●

Beispiel einer Klassifizierung

Vom Objekt zur Klasse – Die Klasse ●





In den meisten Programmiersprachen wird die einfache Klassifizierung umgesetzt Ein Objekt ist immer nur Exemplar einer Klasse Aus dem Paradigma heraus kann ein Objekt theoretisch aber auch Exemplar mehrerer Klassen gleichzeitig sein

Vom Objekt zur Klasse – Die Klasse ● ●





Klassen sind Datentypen Alle Exemplare einer Klasse sind also Exemplare eines Datentypes Dies ist vergleichbar mit primitiven Datentypen Gemäß des Typsystems einer Programmiersprache können dann Überprüfungen auf diesem Datentyp stattfinden

Vom Objekt zur Klasse – Die Klasse ●





Das Typsystem einer Programmiersprache überprüft die verwendeten Datentypen auf Korrektheit Jeder Ausdruch (z.B. int i = 5; int i = 5.5) wird auf Richtigkeit gemäß des genutzten Types geprüft Dabei wird der Typ an sich geprüft (5.5 ist z.B. kein int) als auch die Operation, die auf dem Typ ausgeführt wird (z.B. gibt es keine Addition auf Texttypen)

Vom Objekt zur Klasse – Die Klasse ● ●



Klassen sind Module Meistens sind Klassen auch eine Implementierungseinheit eines Programms Zu den abstrakt formulierten Operationen bieten Klassen meist auch eine Methodenimplementierung an

Vom Objekt zur Klasse – Die Klasse ●

Dabei stellen Klassen meist folgende Elemente eines Moduls zur Verfügung –

Deklaration der Methoden der Klasse



Implementation der Methoden der Klasse



Deklaration der Datenelemente ihrer Exemplarer



Deklaration eigener Datenelemente

Vom Objekt zur Klasse – Die Klasse ●







Eine Klasse stellt im Gegensatz zu einem Objekt nicht nur die implementierten Methoden sondern auch die zugehörige Schnittstellendefinition zur Verfügung Damit können vereinheitlichte Zugriffe auf alle Exemplare der Klasse genutzt werden Allerdings müssen Klassen nicht unbedingt die Implementation anbieten Klassen, die nur die Schnittstellendefinition enthalten, heißen abstrakt (oder in Java Interface)

Vom Objekt zur Klasse - Sichtbarkeit ● ●





Wozu eigentlich ? Wie schon bekannt, definieren Klassen die Schnittstelle und implementieren (ggfl.) die Methoden Aber nicht jede Methode der Klasse muß in der Schnittstelle sichtbar sein Beispiel sind interne Verarbeitungs- oder Hilfsfunktionen der Klasse, die nach außen nicht sichtbar sein müssen (sollen)

Vom Objekt zur Klasse - Sichtbarkeit ●







In Java (und C++) wird das Klassenbasierte Sichtbarkeitskonzept umgesetzt Es besagt, das auf private Daten oder Methoden eines Objekts nur aus den Methoden der deklarierenden Klasse zugegriffen werden kann Dabei kann von gleichen Exemplaren aus auf die privaten Bereiche zugegriffen werden Die Zugehörigkeit zur selben Klasse bestimmt die Sichtbarkeit

Vom Objekt zur Klasse - Sichtbarkeit class MyClass implements Comparable { private int size; // Private Variable size public int compareTo(MyClass other) {

} }

if (size < other.size) return –1; if (size > other.size) return 1; return 0; ...