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

7 Antworten

Klassen sind sozusagen ganz primitiv gesagt wie Ordner, die verschiedene Sachen beinhalten können (z.B. Methoden oder Variablen...)
Damit teilt man Programme in Klassen ein, die jeweils einen bestimmten Aufgabenbereich abdecken. Dient hauptsächlich dazu, Code besser überschauen zu können.

Methoden sind die Teile der Klasse, die irgendetwas machen. Sie können etwas, berechnen, etwas zeichnen, etwas generieren, ausgeben, ... --> alles was an Code ausgeführt werden soll steht in Methoden.

Die Klasse an sich ist ja mehr oder weniger nur ein Stück Code. Sobald es verwendet wird, wird eine sogenannte Instanz der Klasse erstellt. Das nennt man Objekt.

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!

Woher ich das weiß:Studium / Ausbildung – Abi 1,0

Eigentlich müsste die Objektorientierung ja "Klassenorientierung" heißen. Denn alles dreht sich um Klassen. In Klassen definiert man die Funktionalität für einen bestimmten zusammengehörenden Bereich. Z.B. könnte es eine Klasse "Ampel" geben. In der sind dann alle Funktionen einer Ampel definiert. So eine Funktion nennt man Methode. Methoden sind also Teile einer Klasse, in die man die Funktionalität schreibt. Habe ich zwei Funktionalitäten, habe ich zwei Methoden. Z.B. die Methode schalteAmpelNachOben und die Methode schalteAmpelNachUnten.

Um so eine Klasse jetzt verwenden zu können, muss man sie erst mal laden. Also muss dafür irgendwo Speicher beansprucht werden. Das ganze nennt man Instanziierung, weil man von der Klasse sozusagen eine Instanz davon im Speicher erzeugt. Und diese Instanz ist nichts anderes als ein Objekt. Von einer Klasse können auch beliebig viele Objekte erzeugt werden (klar, denn du kannst ja "etwas" auch mehrfach speichern). Z.B. könntest du aus der Klasse "Ampel" fünf Ampel-Objekte erzeugen und diese an verschiedenen Stellen im Programm einsetzten. Jedes dieser Objekte kann seinen eigenen Zustand speichern. So zeigt die eine Ampel vielleicht gerade orange an und die andere einen blinkenden grünen Pfeil.

Warum man die Objektorientierung Objektorientierung  nannte, liegt vermutlich daran, dass Klassen Objekte des "realen Lebens" wiederspiegeln sollen. Zusammengehörige Sachen sollen zusammen in einer Klasse stehen. Die Klasse Ampel kümmert sich um alles, was eine Ampel eben können muss. Statt dessen könnte man auch einfach das, was in den Methoden drin steht nicht ordnen und einfach wild durcheinander schreiben. Das ist der Vorteil von Objektorientierung. Es ordnet dein Programm und macht es leichter wartbar. 

Nur Objekte des "realen Lebens"? Nein, natürlich gibt es auch rein technische Klassen. Aber das Prinzip ist exakt das Gleiche. Z.B. kümmert sich die Klasse DatumsFormatierer  darum ein Datum verschieden darzustellen. Und dieses Funktionalität kannst du dann überall im Programm wiederverwenden.
 

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.