Classes (Klassen)
Kurz: Eine Klasse ist ein Bauplan, der beschreibt, welche Eigenschaften (Felder) und Fähigkeiten (Methoden) daraus erzeugte Objekte haben.
Genauer: Eine Klasse selbst ist noch kein konkretes Ding, sondern nur die Vorlage — erst wenn mit ihr ein Objekt erzeugt wird (instanziiert), existiert eine konkrete Ausprägung mit eigenen Werten. Über Konstruktoren wird festgelegt, wie ein neues Objekt beim Erzeugen initialisiert wird. Klassen können außerdem von anderen Klassen erben (siehe Vererbung), um gemeinsame Funktionalität wiederzuverwenden.
Im Detail
Die Analogie, die am häufigsten hilft: Eine Klasse ist wie ein Bauplan für ein Haus, ein Objekt ist ein konkretes, aus diesem Plan gebautes Haus. Aus demselben Bauplan lassen sich beliebig viele Häuser bauen, jedes mit eigener Adresse, eigener Wandfarbe usw. — aber alle mit derselben grundsätzlichen Struktur (Anzahl Zimmer, Grundriss).
class Auto {
marke
tempo = 0
beschleunigen(betrag) {
tempo = tempo + betrag
}
}
auto1 = neues Auto() // eigenes Objekt, eigener tempo-Wert
auto2 = neues Auto() // komplett unabhängig von auto1
auto1.beschleunigen(20) // beeinflusst NUR auto1.tempo, nicht auto2.tempoEine Klasse besteht typischerweise aus zwei Arten von Mitgliedern: Feldern (auch Attribute/Eigenschaften genannt — die Daten, die jedes Objekt individuell mit sich trägt) und Methoden (die Fähigkeiten/das Verhalten, das auf diesen Daten arbeitet). In den meisten Sprachen kann man außerdem zwischen Instanz-Mitgliedern (gehören zu einem konkreten Objekt, jedes Objekt hat seine eigene Kopie) und statischen/Klassen-Mitgliedern (gehören zur Klasse selbst, werden von allen Objekten gemeinsam geteilt) unterscheiden.
Eine gute Klasse sollte nach dem Prinzip der “Single Responsibility” möglichst genau EINE klar umrissene Aufgabe/Verantwortlichkeit abbilden — eine Klasse, die gleichzeitig Datenbankzugriff, Geschäftslogik und Formatierung für die Anzeige übernimmt, wird schnell unübersichtlich und schwer zu ändern, ohne unbeabsichtigt etwas anderes kaputtzumachen.
Siehe auch: Objects, Constructors, Inheritance, OOP