Was ist der Unterschied zwischen Objekten und Methoden und Klassen (Programmierung)?

7 Antworten

Klassen sind letztendlich nichts Anderes als eigene Datentypen. Bisher hast du bestimmt schon Datentypen wie int (Ganzzahl), double (Kommazahl) oder char (Zeichen) kennengelernt. Mit Klassen hast du die Möglichkeit, eigene Datentypen zu definieren.

Man hat sich das ganze objektorientierte Prinzip (OOP) ausgedacht, als Codes immer komplizierter und länger wurden.

Zunächst kam die funktionale Programmierung. D.h. man hat festgestellt, dass bestimmter Code immer wieder ausgeführt wird. Entweder wird er ganz genauso mehrfach ausgeführt (Prozedur) oder von Eingaben abhängig (Funktion). Man hat ihn also ausgelagert.

Mit der objektorientierten Programmierung hat man festgestellt, dass das auch noch nicht ausreicht. Es ist immer noch einiges zu komplex. Auch hier hat man herausgefunden, dass bestimmte Funktionen nach bestimmten Mustern immer wieder aufgerufen werden.

Um also unnötige Wiederholungen zu vermeiden und gleichzeitig dafür zu sorgen, dass niemand mehr den "Code hinter den Kulissen" verstehen muss, hat man sich etwas ausgedacht, was viel mehr am echten Leben dran ist.

Letztendlich ist im echten Leben alles ein Objekt. Sei es beispielsweise ein Auto. Nun gibt es verschiedene Autos. Sie unterscheiden sich in bestimmten Eigenschaften/Attributen wie Farbe, Größe, Form, Leistung etc. Dennoch haben sie auch gewisse Gemeinsamkeiten:

Alle Autos haben eine Farbe, eine Leistung etc. Alle Autos haben gleiche Fähigkeiten wie Beschleunigen, Bremsen, Lenken, Blinken, Hupen etc. Das unterscheidet ein Auto von einem Menschen oder einer Katze.

Deshalb macht es Sinn, sich zunächst einen Bauplan für ein solches Objekt zu erstellen. Diesen Bauplan bezeichnet man als Klasse.

Letztendlich ist es, wie ich ganz am Anfang erwähnt hatte, nichts anderes als ein eigener Datentyp. Ein Objekt, dass ich nach dem Bauplan eines Autos erstelle ist keine Zahl und auch kein Zeichen, sondern ein Auto. Der Datentyp ist folglich Auto.

Ein solcher Bauplan muss festlegen, über welche Eigenschaften und Methoden ein Objekt bzw. eine Instanz der Klasse verfügt. Dadurch kann man beliebig viele Objekte gleicher Ursprungsklasse erstellen, diesen jedoch unterschiedliche Eigenschaften geben.

Dabei ist es unerheblich, wie das Auto beschleunigt und wie es bremst. Du musst nur wissen, wie du es dazu bringst es zu tun. Was hinter den Kulissen geschieht, geht dich nichts an. Denn damit hat sich bereits der Programmierer beschäftigt, der die Klasse implementiert hat.

Dadurch hat man den entscheidenden Vorteil, dass man sich nicht so stark in den Code anderer einarbeiten braucht, sondern einfach Datentypen nutzen kann, die der jeweilige Entwickler erstellt hat. Es reicht völlig aus, zu wissen, welche Methoden und Eigenschaften eines Objektes man aufrufen bzw. verändern kann.

Man kann somit sagen, dass Klassen komplexe Datentypen sind, die aus primitiven Datentypen zusammengesetzt sind. Nehmen wir als Beispiel eine Klasse für eine Zeichenkette. String ist nämlich ein zusammengesetzter Datentyp. Ein String besteht aus einzelnen Zeichen (char).

Eine Eigenschaft wird also ein char-Array sein, welches den Text enthält. Weitere Eigenschaften wären z.B. die Länge (length).

Es sind auch Methoden vorhanden. Beispielsweise eine, die uns das Zeichen an einer bestimmten Stelle angibt (charAt), oder eine, die uns einen Teilstring (substring) ausgibt.

Diese String-Klasse ist der Bauplan, nach dem alle Zeichenketten erstellt werden. Sie haben alle verschiedene Eigenschaften wie Länge, Zeichen an bestimmten Stellen etc., doch weisen alle einen gleichen Aufbau auf. Es handelt sich bei allen um einen Text.

Durch die Objektorientierung braucht man (was in diesem Fall natürlich weniger stark ins Gewicht fällt, da Strings auch in nicht objektorientierten Klassen auf anderem Wege verankert sind) also nicht für jeden String ein Array erstellen und für bestimmte Aktionen auch noch durch dieses iterieren. Stattdessen notiert man einmalig, wie dies gemacht wird und bedient sich künftig einfacheren Herangehensweisen.

Insgesamt bewirken Klassen, dass man am eigentlichen Programm, also z.B. dem Teil zum Beschleunigen eines Autos nicht mehr rumpfuschen braucht. Man hat das einmal fertiggestellt und kann es immer wieder verwenden. Dazu muss man nicht mal wissen, was hinter den Kulissen eigentlich alles passiert.

Du wirst mit ein bisschen praktischer Erfahrung schnell merken, dass die Objektorientierung die Programmierung doch erheblich erleichtert. Es gibt sogar eine Lösung dafür, wenn du die Funktionalität einer Klasse erweitern möchtest: Vererbung.

Du brauchst also nicht wieder die gleiche Klasse neu schreiben, sondern kannst, wenn du eine Klasse Fahrzeug hast, ganz einfach Kindklassen wie Auto oder Fahrrad erstellen. Diese erben alle Eigenschaften und Methoden von der Elternklasse und können diese überschreiben sowie weitere hinzufügen.

Ich hoffe, ich konnte es dir das Prinzip der KIassen einigermaßen anschaulich und verständlich erklären.

Ich versuch's auch noch mal, je mehr Erklärungsansätze, desto besser versteht man es nämlich manchmal. :-)

Objektorientierung bedeutet, seinen Code und seine Daten nach Objekten zu strukturieren, das heißt, dass Informationen und Verhalten einer Ampel etwa gänzlich separiert von Informationen und Verhalten davor anstehender Auto (in einer Ampelschaltungssoftware) gespeichert werden.

Objektorientierte Programmierung wird dazu häufig gleich verwendet; die Objektorientierung weist allerdings auch noch andere Subdisziplinen wie das Objektdesign auf. Da notierst du dir - meist in standarisierter UML-Syntax -, wie deine ganzen Objekte aufgebaut sind. Das hilft beim Verschaffen eines Überblicks und dem Über-das-ganze-wunderbare-Coden-nicht-die-Struktur-aus-dem-Kopf-Verlieren. ;-)
Ein einfaches Objektdiagramm schaut etwa so hier aus: https://image.slidesharecdn.com/oop-seminar-018-120629171559-phpapp01/95/klassen-und-objekte-dezember-2005-82-728.jpg?cb=1340990220

Ein Objekt ist damit eine der Realität (bzw. unserer Wahrnehmung davon, sei der philosophische Exkurs denn gestattet) nachempfundene Einheit von Daten und Verhaltensweisen, fachlicher: Variablen (die im objektorientierten Kontext aber anders heißen: Feldern und darüber hinaus Eigenschaften - letztere sind fortgeschrittener) und Methoden (Prozeduren/Funktionen).

Variablen speichern ebenso wie Felder einen Wert - zum Beispiel:

name = "Denis";
alter = 42;
augenfarbe = rot;

Methoden bündeln ein oder mehrere Anweisungen im Quellcode:

int geburtsjahrErmitteln(int alter, int aktuellesJahr)
{
    int geburtsjahr = aktuellesJahr - alter;
    return geburtsjahr;
}

void geburtsjahrAusgeben(int alter, int aktuellesJahr)
{
    int geburtsjahr = geburtsjahrErmitteln(alter, aktuellesJahr);
    string ausgabe = "Das Geburtsjahr ist " + alter + ".";
    WriteLine(ausgabe);
    return;
}

Sie unterscheidet man weiterhin in Prozeduren, die sich durch die Abwesenheit eines Rückgabewertes bzw. das Schlüsselwort void kennzeichnen - sie führen Code aus, mehr nicht -, und in Funktionen, grob ähnlich denen, welche du bereits aus der Mathematik kennen magst. Sie haben einen Rückgabewert, werden also erst ausgeführt und hinterlassen dem Aufrufer dann einen Wert zur Weiterverarbeitung. Das kannst du im obigen Beispiel nachvollziehen.

So, und was sind nun Klassen?
Ich habe immer den einprägsamen Satz gehört: Die Klasse ist der Bauplan eines Objekts. Während ein Objekt also eine konkrete Merksmalsausprägung eines Dings repräsentiert, also etwa einen roten VW Porsche mit dem Kennzeichen BB-XY-123, sind in der zugehörigen Klasse des Typs "Auto" die Felder des Objekts deklariert - etwa die Farbe, das Modell, die Farbe oder das Kennzeichen. Ihnen wird dann je Objekt ein Wert zugewiesen.

Hier spricht man auch von Instanziierung, ein Objekt ist eine Instanz (d. h. so viel wie Merkmalsausprägung) einer Klasse.

Für diese Klassen gelten dann die drei wesentlichen objektorientierten Prinzipien, die es dir massiv erleichtern sollen, übersichtlichen, unproblematischen und wiederverwendbaren Quellcode zu schreiben, aber die lernst du sicherlich auch noch kennen. Und wenn du erneut Fragen hast, bist du hier jederzeit wieder willkommen. :-)

Ich hoffe, ich konnte dir helfen!

Eine Klasse ist eine Schablone, die eine bestimmte Sache beschreibt. Beispielsweise ein Auto. Ein Auto kann Eigenschaften haben. Eine Farbe zum Beispiel. Ein Objekt ist eine konkrete Instanz des Autos. Dein Auto zum Beispiel in der Farbe rot. Bekommt deine Freundin auch ein Auto, gibt es wieder eine konkrete Instanz der Klasse, diesmal in blau. Du nimmst die Klasse als Schablone, um nicht alles immer wieder machen zu müssen. Sobald du ein konkretes Auto brauchst, instanzierst du die Klasse und initialisierst das Objekt mit den konkreten Eigenschaften. Und Methoden sind eben Funktionen des Autos. Ein Auto kann fahren. In der Klasse implementierst du alles, was zu dieser Funktion gehört, genau einmal. Und wenn du dann eine konkrete Instanz der Klasse hast (dein Auto -> ein Objekt), dann rufst du einfach nur "fahre" auf.

Was möchtest Du wissen?