Klassenbasierte Programmierung
Klassenbasierte Programmierungoder häufiger Klassenorientierung, ist ein Stil von Objekt orientierte Programmierung (Oop), in dem Nachlass tritt durch Definition auf Klassen von Objekte, anstatt die Vererbung allein über die Objekte aufzutreten (vergleichen Prototypbasierte Programmierung).
Das beliebteste und entwickelte Modell von OOP ist ein klassenbasiertes Modell anstelle eines objektbasierten Modells. In diesem Modell sind Objekte Entitäten, die sich kombinieren Zustand (d. h. Daten), Verhalten (d. h. Verfahren oder Methoden) und Identität (Einzigartige Existenz unter allen anderen Objekten). Die Struktur und das Verhalten eines Objekts werden durch a definiert Klasse, die ein Definition, oder Entwurfvon allen Objekten eines bestimmten Typs. Ein Objekt muss explizit basierend auf einer Klasse erstellt werden und ein so erstelltes Objekt wird als eine angesehen Beispiel dieser Klasse. Ein Objekt ähnelt a StrukturMit der Hinzufügung von Methodenzeiger, der Zugriffskontrolle der Mitglieder und eines impliziten Datenmitglieds, das Instanzen der Klasse (d. H. Objekte der Klasse) in der Klassenhierarchie (wesentlich für die Laufzeit -Erbschaftsfunktionen) lokalisiert.
Verkapselung
Verkapselung verhindert, dass Benutzer das brechen Invarianten der Klasse, die nützlich ist, da die Implementierung einer Klasse von Objekten für Aspekte geändert werden kann, die nicht ohne Auswirkungen auf den Benutzercode in der Schnittstelle aufgedeckt werden. Die Definitionen der Kapselung konzentrieren sich auf die Gruppierung und Verpackung verwandter Informationen (Zusammenhalt) anstelle von Sicherheitsproblemen.
Nachlass
In klassenbasierter Programmierung, Nachlass wird durchgeführt, indem neue Klassen definiert werden Erweiterungen der vorhandenen Klassen: Die vorhandene Klasse ist die Elternklasse Und die neue Klasse ist die Kinderklasse. Wenn eine Kinderklasse nur eine Elternklasse hat, ist dies als bekannt als Einzelvererbung, Während eine Kinderklasse mehr als eine Elternklasse haben kann, ist dies als bezeichnet als Mehrfacherbe. Dies organisiert Klassen in a Hierarchie, entweder ein Baum (wenn ein einzelnes Vererbung) oder Gitter (wenn mehrere Vererbung).
Das definierende Merkmal der Vererbung ist, dass sowohl Schnittstelle als auch Implementierung vererbt werden. Wenn nur die Schnittstelle vererbt wird, wird dies als bezeichnet als Schnittstellenvererbung oder Subtyping. Vererbung kann auch ohne Klassen wie in erledigt werden Prototypbasierte Programmierung.
Kritik von klassenbasierten Modellen
Klassenbasierte Sprachen oder genauer gesagt, um genauer zu sein, Typisierte Sprachen, wo Unterklasse ist der einzige Weg von Subtypingwurden kritisiert, um Implementierungen und Schnittstellen zu mischen-das wesentliche Prinzip in der objektorientierten Programmierung. Die Kritiker sagen, man könnte eine Taschenklasse erstellen, die a speichert Sammlung von Objekten, dann erweitern Sie es, um eine neue Klasse namens SET -Klasse zu erstellen, in der die Duplikation von Objekten beseitigt wird.[1][2] Eine Funktion, die ein Objekt der Bag -Klasse nimmt, kann erwarten, dass das Hinzufügen von zwei Objekten die Größe einer Beutel um zwei erhöht. Wenn man jedoch ein Objekt einer festgelegten Klasse übergibt, kann das Hinzufügen von zwei Objekten die Größe von erhöhen oder nicht. eine Tasche von zwei. Das Problem entsteht genau deshalb, dass die Unterklasse auch in den Fällen, in denen das Prinzip der Subtyping, bekannt als die Liskov -Substitutionsprinzip, hält nicht. Barbara Liskov und Jeannette Wing formulierte das Prinzip in einem Papier von 1994 wie folgt:
Untertypanforderung: Lassen Seien Sie eine Eigenschaft, die über Objekte nachweisbar ist of type . Dann sollte für Objekte zutreffen of type wo ist ein Subtyp von .
Normalerweise muss man Subtyping und Subklasse unterscheiden. Die meisten aktuellen objektorientierten Sprachen unterscheiden Subtyping und Subklassierung, einige Ansätze für das Design jedoch nicht.
Ein weiteres häufiges Beispiel ist auch, dass ein von a erstellter Personenobjekt Kinderklasse kann nicht ein Objekt von werden Elternklasse Weil eine untergeordnete Klasse und eine Elternklasse eine Personklasse erben, aber klassenbasierte Sprachen ermöglichen es nicht, die Art der Klasse des Objekts zur Laufzeit zu ändern. Für klassenbasierte Sprachen ist diese Einschränkung unerlässlich, um ihren Benutzern eine einheitliche Übersicht über die Klasse zu erhalten. Die Benutzer sollten sich nicht darum kümmern müssen, ob eine der Implementierungen einer Methode Änderungen verursacht, die das brechen Invarianten der Klasse. Solche Änderungen können vorgenommen werden, indem das Objekt zerstört und einen anderen an seiner Stelle erstellt wird. Der Polymorphismus kann verwendet werden, um die relevanten Schnittstellen selbst zu erhalten, auch wenn solche Änderungen vorgenommen werden Identität. Normalerweise wird der Wert von Objektreferenzen, die sich auf das Objekt beziehen, geändert, wodurch die Auswirkungen auf den Client -Code verursacht werden.
Beispielsprachen
Obwohl Simula stellte die Klassenabstraktion ein, das kanonische Beispiel einer klassenbasierten Sprache ist Smalltalk. Andere umfassen Php, C ++, Java, C#, und Ziel c.
Siehe auch
Verweise
- ^ Kiselyov, Oleg. "Subtyping, Unterklasse und Probleme mit OOP". Abgerufen 7. Oktober 2012.
- ^ Dukasse, Stéphane. "Ein Set kann kein Subtyp einer Tasche sein". Abgerufen 7. Oktober 2012.