Springe zum Inhalt

Das Prinzip der Objektorientierung

In diesem Artikel möchte ich euch die wesentlichen Merkmale der Objektorientierung anhand der Programmiersprache Java erklären, die von vornherein als objektorientierte Sprache entwickelt wurde und somit das Konzept hervorragend veranschaulicht. Die Objektorietnierung geht davon aus, dass ein Modell der Realität über eine Menge von Objekten abgebildet werden kann. Hierbei geht man so vor, dass man zunächst im Problembereich denkt, der in der Regel sehr Komplex ist, da die Objekte der Realen Welt zahlreiche Eigenschaften haben, die jedoch nicht alle relevant für die Lösung sind. Dementsprechend nimmt man eine Abstraktion des Problembereiches vor und modelliert den sogenannten Lösungsbereich als einen Ausschnitt der realen Wel, der nur die Objekte und die Eigenschaften enthält der für die Lösung des Problems notwendig sind.

Die Eigenschaften von Objekten werden über sogenannte Attribute dargestellt, während der Zugriff auf die Eigenschaft mit Hilfe von Methoden erfolgt. Objektorientierte Softwaresysteme haben zudem die hilfreiche Eigenschaft sehr stabil gegenüber nachträglichen implementierten Änderungen zu sein, anders als dies z.B. bei der Funktionsorientierten Programmierung schnell zu instabilen Zuständen führen kann.

 

In der Objektorientierten Programmierung unterscheidet man einfache Datentypen und sogenannte Klassentypen. Eine Klasse ist im Grunde eine Art Bauplan für ein Objekt. Eine Klasse ist ein eigens definierter Datentyp der über beliebig viele Variablen (Felder) und Methoden (Funktionen) verfügen kann. Ein Objekt hingegen ist eine Instanz, also eine Ausprägung des Klassentyps. Bei der Definition einer solchen Klasse legt man einen zusammengehörigen Satz von Variablen und Methoden an. Ausserdem muss jeder objektorientierte Datentyp einen sogenannten Konstruktor besitzen über den dann eine Instanz (Objekt) dieses Datentyps erzeugt werden kann. Bei der Erzeugung wird eine Referenz auf diese Instanz an eine Variable des Klassentyps gebunden.

 

Codebeispiel – Erzeugung einer Instanz
MeinEigenerDatentyp var_ref = new MeinEigenerDatentyp(parameter1, parameter2, parameter2)
//oder am konkreten Beispiel der Wrapper-Klasse Integer
int i=100;
Integer i_ref=new Integer(i) // Jetzt haben wir ein Integer Objekt das eigene Methoden zum Modifizieren mitbringt

 

Datenkapselung

Ein wichtiger Punkt bei der Objektorientierten Programmierung ist die Datenkapselung. Dabei verfolgt man stets die Absicht, dass auf die Variablen bzw. Objekte eines Klassentypen nur über die vorgegebenen Methoden zugegriffen werden kann. Es stehen also nur Modifikationen zur Verfügung die man vorher selbst definiert hat. Daten und Funktionen verschmelzen zu einer Einheit und werden nicht mehr getrennt betrachtet. Durch diese Betrachtungsweise entsteht eine Kapsel die nur über die Schnittstellenmethoden verändert werden kann. Damit macht man einerseits das Verhalten der Methoden sichtbar, verbirgt jedoch andererseits die inneren Details der Implementierung und der Datenstrukturen. Das Einzige was zur Benutzung einer Klasse bekannt sein muss ist die Signatur (Übergabeparameter und Rückgabetypen) der Schnittstellenmethoden. Daher spricht man in diese Zusammenhang auch von „Information Hiding“ oder Geheimnisprinzip. Hier liegt auch die Grundlage dafür, dass die genaue Implementierung einer Klasse keine Rolle für die Funktionsweise einer anderen Klasse hat und somit auch ein System nachträglich sehr einfach um weitere Klassen erweitert werden kann.

Instanz und Klassenmethoden

Man unterscheidet bei der Definition von Java-Klassen zwischen zwei Formen von Methoden. Zum Einen wären da die sogenannten Instanzmethoden. Sie können nur dann aufgerufen werden wenn vorher eine Instanz des Klassentypen mit dem new-Operator erzeugt wurde. Der Aufruf geschieht dann über die Instanz (siehe Codebeispiel). Instanzmethoden modifizieren dementsprechend auch die Variablen eines konkreten Objektes über das sie aufgerufen werden.

Zum Anderen gibt es noch die sogenannten Klassenmethoden (auch statische Methoden genannt). Sie sind grundsätzlich immer aufrufbar, ganz unabhängig ob Instanzen vorliegen oder nicht. Der Aufruf von Klassenmethoden erfolgt über den Klassennamen (Code-Aufruf Klassenmethoden: Klassenname.Methodenname). Static-Methoden sind vielseitig einsetzbar und können auch jede Funktion ausführen die man möchte und müssen überhaupt nichts mit der eigentlichen Klasse zu tun haben bzw. mit der Aufgabe der Klasse.

Jetzt zeige ich euch noch an einem Beispiel wie ihr eigene Klassen definiert, also eure eigenen Datentypen mit allem drum und dran erschafft.

 

Codebeispiel – Definition von Java-Klassen
Public class Person{
private String vorname;
private String nachname;
int geburtsjahr;

//jetzt kommt der Konstruktor – der hat immer den Modifizierer “public” da er immer aufrufbar sein muss
public Person(String vorname, String nachname, int geburtsjahr){
// die übergebenen Parameter müssen nun an die Instanzvariablen gebunden werden
this.vorname = vorname //“this.variable“ zeigt immer auf die globale Variable – während die //übergebenen Parameter ja nur lokal im Konstruktor gültig sind und bei gleicher benennung im //Konstruktor den Variablennamen überschreiben 
this.nachname=nachname;
this.geburtsjahr=geburtsjahr;
}//ende Konstruktor

//jetzt folgen noch einige Instanz-Methoden die ich brauche um die Variablen einer erzeugten
//Instanz bearbeiten zu können ohne diese jedesmal neu schreiben zu müssen wenn ich sie brauche

public void setVorname(String vorname){
//setzt einen neuen Vornamen
this.vorname=vorname;
}//Ende Methode 

public int getGeburtsjahr(){
//gibt einen Rückgabewert und zwar das jeweilige Geburtsjahr der Instanz
return geburtsjahr; //hier brauchen wir auch kein this weil die Variable nicht lokal überschrieben ist
}// Ende Methode
// diese Art von Methoden nennt man getter-Methoden und setter-Methoden die für jede Variable //einer Klasse vorhanden sein sollten – sie lassen sich z.B. in Eclipse automatisch erzeugen

//Jetzt definiere ich noch eine Klassenmethode
public static void meineKlassenmethode(){
//eine statische Methode kann alles machen und steht nicht notwendigerweise in Beziehung zum Zweck der Klasse
System.out.println(„Dieser Text hat einfach nicht den geringsten Sinn und ist völliger Quatsch“);
}//Ende Methode meine Klassenmethode
}// Ende Klasse Person

 

 

Veröffentlicht inJavaTechnik und Technologie

Sei der Erste der einen Kommentar abgibt

Schreibe einen Kommentar