Klasse (Computerprogrammierung)

In der objektorientierten Programmierung ist eine Klasse eine Konstruktion, die verwendet wird, um Beispiele von sich - gekennzeichnet als Klassenbeispiele, Klassengegenstände, Beispiel-Gegenstände zu schaffen, oder einfach protestiert. Eine Klasse definiert konstituierende Mitglieder, die seinen Beispielen ermöglichen, Staat und Verhalten zu haben. Datenfeldmitglieder (Mitglied-Variablen oder Beispiel-Variablen) ermöglichen einem Klassenbeispiel, Staat aufrechtzuerhalten. Andere Arten von Mitgliedern, besonders Methoden, ermöglichen das Verhalten einer Klasse Beispiele. Klassen definieren den Typ ihrer Beispiele.

Eine Klasse vertritt gewöhnlich ein Substantiv, wie eine Person, Platz oder Ding oder etwas nominalized. Zum Beispiel würde eine "Banane"-Klasse die Eigenschaften und Funktionalität von Bananen im Allgemeinen vertreten. Eine einzelne, besondere Banane würde ein Beispiel der "Banane"-Klasse, ein Gegenstand des Typs "Banana" sein.

Design und Durchführung

Klassen werden aus Struktur- und Verhaltensbestandteilen zusammengesetzt. Programmiersprachen, die Klassen als eine Programmierkonstruktionsangebot-Unterstützung für verschiedene klassenzusammenhängende Eigenschaften und die Syntax einschließen, die erforderlich ist, diese Eigenschaften zu verwenden, ändern sich außerordentlich von einer Programmiersprache bis einen anderen.

Struktur

Eine Klasse enthält Datenfeldbeschreibungen (oder Eigenschaften, Felder, Datenmitglieder oder Attribute). Das sind gewöhnlich Feldtypen und Namen, die mit Zustandsgrößen in der Programm-Durchlaufzeit vereinigt werden; diese Zustandsgrößen entweder gehören der Klasse oder den spezifischen Beispielen der Klasse. Auf den meisten Sprachen bestimmt die durch die Klasse definierte Struktur das Lay-Out des durch seine Beispiele verwendeten Gedächtnisses. Andere Durchführungen, sind zum Beispiel, Gegenstände in assoziativen Schlüsselwert-Behältern des Gebrauches der Pythonschlange möglich.

Einige Programmiersprachen unterstützen Spezifizierung von invariants als ein Teil der Definition der Klasse, und machen sie durch das Typ-System geltend. Encapsulation des Staates ist notwendig, um im Stande zu sein, den invariants der Klasse geltend zu machen.

Verhalten

Das Verhalten der Klasse oder seiner Beispiele wird mit Methoden definiert. Methoden sind Unterprogramme mit der Fähigkeit, auf Gegenständen oder Klassen zu funktionieren. Diese Operationen können den Staat eines Gegenstands verändern oder einfach Weisen zur Verfügung stellen, darauf zuzugreifen. Arten im Mai von Methoden bestehen, aber die Sprachunterstützung für sie ändert sich über Sprachen. Einige Typen von Methoden werden geschaffen und durch den Programmierer-Code genannt, während andere spezielle Methoden - wie Konstrukteure, destructors, und Umwandlungsmaschinenbediener - geschaffen und durch den Bearbeiter-erzeugten Code genannt werden. Eine Sprache kann auch dem Programmierer erlauben, diese speziellen Methoden zu definieren und zu nennen.

Das Konzept der Klassenschnittstelle

Alle Klassenwerkzeuge (oder begreift), eine Schnittstelle durch die Versorgung der Struktur und Methode-Durchführungen. Struktur besteht aus Daten und Staat, und Methode-Durchführungen bestehen aus dem Code, der angibt, wie die Methoden arbeiten. Es gibt eine Unterscheidung zwischen der Definition einer Schnittstelle und der Durchführung dieser Schnittstelle; jedoch wird diese Linie auf vielen Programmiersprachen verschmiert, weil Klassenbehauptungen sowohl definieren als auch eine Schnittstelle durchführen. Einige Sprachen stellen jedoch Eigenschaften zur Verfügung, die Schnittstelle und Durchführung trennen. Zum Beispiel kann eine abstrakte Klasse eine Schnittstelle definieren, ohne Durchführung zur Verfügung zu stellen.

Sprachen, die Klassenerbe auch unterstützen, erlauben Klassen, Schnittstellen von den Klassen zu erben, aus denen sie abgeleitet werden. Auf Sprachen, die Zugang specifiers unterstützen, wie man betrachtet, ist die Schnittstelle einer Klasse der Satz von öffentlichen Mitgliedern der Klasse, sowohl einschließlich Methoden als auch einschließlich Attribute (über den impliziten Hauer und die Setter-Methoden); irgendwelche privaten Mitglieder oder innere Datenstrukturen sind nicht beabsichtigt, um durch den Außencode angewiesen zu werden, und sind so nicht ein Teil der Schnittstelle.

Objektorientierte Programmiermethodik diktiert, dass die Operationen jeder Schnittstelle einer Klasse von einander unabhängig sein sollen. Es läuft auf ein layered Design hinaus, wo Kunden einer Schnittstelle die in der Schnittstelle erklärten Methoden verwenden. Eine Schnittstelle legt keine Voraussetzungen für Kunden, um die Operationen einer Schnittstelle in jeder besonderen Ordnung anzurufen. Diese Annäherung hat den Vorteil, dass Kundencode annehmen kann, dass die Operationen einer Schnittstelle für den Gebrauch verfügbar sind, wann auch immer der Kunde Zugang zum Gegenstand hat.

Beispiel

Die Knöpfe auf der Vorderseite Ihres Fernsehers sind die Schnittstelle zwischen Ihnen und der elektrischen Verdrahtung auf der anderen Seite seiner Plastikumkleidung. Sie drücken den "Macht"-Knopf zum Knebelknopf das Fernsehen auf und von. In diesem Beispiel ist Ihr besonderes Fernsehen das Beispiel, jede Methode wird durch einen Knopf vertreten, und alle Knöpfe umfassen zusammen die Schnittstelle. (Andere Fernseher, die dasselbe Modell sind, wie würde Ihriger dieselbe Schnittstelle haben.) In seiner dem grössten Teil der Standardform ist eine Schnittstelle eine Spezifizierung einer Gruppe von zusammenhängenden Methoden ohne jede verbundene Durchführung der Methoden.

Ein Fernseher hat auch eine Myriade von Attributen wie Größe, und ob es Farbe unterstützt, die zusammen seine Struktur umfassen. Eine Klasse vertritt die ausführliche Beschreibung eines Fernsehens, einschließlich seiner Attribute (Struktur) und Knöpfe (Schnittstelle).

Das Bekommen der Gesamtzahl von verfertigten Fernsehen konnte eine statische Methode der Fernsehklasse sein. Diese Methode wird klar mit der Klasse vereinigt, noch ist außerhalb des Gebiets jedes individuellen Beispiels der Klasse. Ein anderes Beispiel würde eine statische Methode sein, die ein besonderes Beispiel aus dem Satz aller Fernsehgegenstände findet.

Mitglied-Zugänglichkeit

Viele Sprachen unterstützen das Konzept der Informationsverheimlichung und encapsulation, normalerweise mit dem Zugang specifiers für Klassenmitglieder. Zugang specifiers kontrolliert Zugang zu Klassenmitgliedern. Etwas Zugang specifiers kann auch kontrollieren, wie Klassen solche Einschränkungen erben. Ihr primärer Zweck ist, die Schnittstelle einer Klasse von seiner Durchführung zu trennen.

Der folgende ist ein Standardset des Zugangs specifiers:

  • privat (oder klassenprivat) beschränkt den Zugang zur Klasse selbst. Nur Methoden, die ein Teil derselben Klasse sind, können auf private Mitglieder zugreifen.
  • geschützt (oder klassengeschützt) erlaubt der Klasse selbst und allen seinen Unterklassen, auf das Mitglied zuzugreifen.
  • Publikum meint, dass jeder Code auf das Mitglied durch seinen Namen zugreifen kann.

Obwohl viele objektorientierte Sprachen den obengenannten Zugang specifiers unterstützen, kann sich ihre Semantik unterscheiden.

Objektorientiertes Design verwendet den Zugang specifiers in Verbindung mit dem sorgfältigen Design von öffentlichen Methode-Durchführungen, um Klasse invariants - Einschränkungen auf den Staat des objecs geltend zu machen. Ein allgemeiner Gebrauch des Zugangs specifiers soll die inneren Daten einer Klasse von seiner Schnittstelle trennen: Die innere Struktur wird privat gemacht, während öffentliche Zugriffsberechtigter-Methoden verwendet werden können, um solche privaten Daten zu untersuchen oder zu verändern.

Zugang specifiers kontrolliert Sichtbarkeit, in dieser nicht notwendigerweise sogar private Mitglieder können dem Kunden Außencode sichtbar sein. Auf einigen Sprachen kann auf ein unzugängliches, aber sichtbares Mitglied an der Durchlaufzeit verwiesen werden (zum Beispiel, durch einen Zeigestock, der von einer Mitglied-Funktion zurückgegeben ist), aber Versuche zu verwenden wird sie durch das Verweisen auf den Namen des Mitgliedes aus dem Kundencode durch den Typ-Kontrolleur verhindert.

Die verschiedenen objektorientierten Programmiersprachen machen Mitglied-Zugänglichkeit und Sichtbarkeit zu verschiedenen Graden, und abhängig vom Typ-System der Sprache und Kompilationspolicen geltend, die entweder in der Übersetzungszeit oder in Durchlaufzeit beachtet sind. Zum Beispiel erlaubt die javanische Sprache Kundencode nicht, der auf die privaten Daten einer Klasse zugreift, um zu kompilieren, wohingegen auf Sprachen wie Kunde von Objective-C oder Perl Code nicht eingeschränkt wird. Im C ++ Sprache sind private Methoden sichtbar, aber in der Schnittstelle nicht zugänglich; jedoch werden sie unsichtbar allgemein gemacht, indem sie völlig abstrakte Klassen ausführlich erklären, die die Schnittstellen der Klasse vertreten.

Einige Sprachen zeigen andere Zugänglichkeitsschemas:

  • Beispiel gegen die Klassenzugänglichkeit: Rubin unterstützt mit dem Beispiel privaten und Beispiel-geschützten Zugang specifiers anstatt des klassenprivaten und klassengeschützten beziehungsweise. Sie unterscheiden sich darin sie beschränken Zugang, der auf dem Beispiel selbst, aber nicht der Klasse des Beispiels gestützt ist.
  • Freund: C ++ unterstützt einen Mechanismus, wo eine Funktion ausführlich offen erklärt als ein Freund Funktion der Klasse auf die Mitglieder benannt als privat oder geschützt zugreifen kann.
  • Pfad-basiert: Javanische Unterstützungen, die Zugang zu einem Mitglied innerhalb eines javanischen Pakets beschränken, das grob der Pfad einer Datei ist.

Zwischenklassenbeziehungen

Zusätzlich zum Design von eigenständigen Klassen können Programmiersprachen mehr Leistungsklasse-Design unterstützen, das auf Beziehungen zwischen Klassen gestützt ist. Die allgemein zur Verfügung gestellten Zwischenklassenbeziehungsdesignfähigkeiten sind compositional und hierarchisch.

Compositional

Klassen können aus anderen Klassen zusammengesetzt werden, dadurch eine compositional Beziehung zwischen der Umgeben-Klasse und seinen eingebetteten Klassen herstellend. Die Beziehung von Compositional zwischen Klassen ist auch als ein Haben - eine Beziehung allgemein bekannt. Zum Beispiel konnte eine Klasse "Auto" daraus zusammengesetzt werden und eine Klasse "Motor" enthalten. Deshalb hat ein Auto einen Motor. Ein Aspekt der Zusammensetzung ist Eindämmung, die die Einschließung von Teilbeispielen durch das Beispiel ist, das sie hat. Wenn ein Umgeben-Gegenstand Teilbeispiele durch den Wert enthält, haben die Bestandteile und ihr Umgeben-Gegenstand einen ähnlichen [Wenden lifetime|lifetime]] ein. Wenn die Bestandteile durch die Verweisung enthalten werden, können sie keine ähnliche Lebenszeit haben.

Hierarchisch

Klassen können aus einer oder mehr vorhandenen Klassen abgeleitet werden, dadurch eine hierarchische Beziehung zwischen dem abgeleiteten Klassen (Grundklassen, Elternteilklassen oder Superklassen) und der abgeleiteten Klasse (Kinderklasse oder Unterklasse) herstellend. Die Beziehung der abgeleiteten Klasse zum abgeleiteten Klassen ist allgemein bekannt als - eine Beziehung zu sein. Zum Beispiel konnte eine Klasse 'Knopf' aus einer Klasse aus 'Kontrolle' abgeleitet werden. Deshalb ist ein Knopf eine Kontrolle. Struktur- und Verhaltensmitglieder der Elternteilklassen werden durch die Kinderklasse geerbt. Abgeleitete Klassen können zusätzliche Strukturmitglieder (Datenfelder) und/oder Verhaltensmitglieder (Methoden) zusätzlich zu denjenigen definieren, die sie erben und deshalb Spezialisierungen ihrer Superklassen sind. Außerdem können abgeleitete Klassen geerbte Methoden überreiten, wenn die Sprache erlaubt.

Nicht alle Sprachen unterstützen Mehrfachvererbung. Wenn Mehrfachvererbung erlaubt wird, ist die Hierarchie ein geleiteter acyclic Graph (oder DAG für den kurzen), sonst ist es ein Baum. Die Hierarchie hat Klassen als Knoten und Erbe-Beziehungen als Verbindungen. Klassen in demselben Niveau werden mit größerer Wahrscheinlichkeit vereinigt als Klassen in verschiedenen Niveaus. Die Niveaus dieser Hierarchie werden Schichten oder Niveaus der Abstraktion genannt.

Definitionen der Unterklasse

Begrifflich sollte eine Superklasse als ein allgemeiner Teil seiner Unterklassen betrachtet werden. Dieses Factoring der Allgemeinheit ist ein Mechanismus, um Wiedergebrauch zur Verfügung zu stellen. So wird das Verlängern einer Superklasse durch das Ändern der vorhandenen Klasse auch wahrscheinlich seine Anwendbarkeit in verschiedenen Situationen einengen. Im objektorientierten Design sollte das sorgfältige Gleichgewicht zwischen Anwendbarkeit und Funktionalität von Superklassen betrachtet werden. Das Subklassifizieren ist davon verschieden, in dieser subtippende Geschäfte mit allgemeinem Verhalten subzutippen, wohingegen das Subklassifizieren mit allgemeiner Struktur beschäftigt ist.

Es gibt zwei verschiedene Gesichtspunkte betreffs, ob Unterklassen derselben Klasse erforderlich sind, zusammenhanglos zu sein. Manchmal, wie man betrachtet, sind Unterklassen einer besonderen Klasse völlig zusammenhanglos. D. h. jedes Beispiel einer Klasse hat genau eine am meisten abgeleitete Klasse, die eine Unterklasse jeder Klasse ist, die das Beispiel hat. Diese Ansicht erlaubt dynamische Änderung der Klasse des Gegenstands nicht, weil, wie man annimmt, Gegenstände mit einer festen am meisten abgeleiteten Klasse geschaffen werden. Die Basis, um Änderungen zur Klasse des Gegenstands nicht zu erlauben, ist, dass die Klasse ein Übersetzungszeit-Typ ist, der sich an der Durchlaufzeit nicht gewöhnlich ändert, und polymorphism für jede dynamische Änderung zum Verhalten des Gegenstands verwertet wird, so ist diese Fähigkeit nicht notwendig. Design, das Änderungen zum Typ des Gegenstands nicht durchzuführen braucht, wird robuster und aus dem Gesichtswinkel von den Benutzern der Klasse gebrauchsfreundlich sein.

Aus einem anderen Gesichtspunkt sind Unterklassen nicht erforderlich, zusammenhanglos zu sein. Dann gibt es kein Konzept einer am meisten abgeleiteten Klasse, und, wie man betrachtet, sind alle Typen in der Erbe-Hierarchie, die Typen des Beispiels sind, ebenso Typen des Beispiels. Diese Ansicht basiert auf einer dynamischen Klassifikation von Gegenständen, solch, dass ein Gegenstand seine Klasse an der Durchlaufzeit ändern kann. Dann, wie man betrachtet, ist die Klasse des Gegenstands seine aktuelle Struktur, aber Änderungen dazu wird erlaubt. Die Basis, um Änderungen zur Klasse des Gegenstands zu erlauben, ist eine wahrgenommene verursachte Unannehmlichkeit durch das Ersetzen eines Beispiels durch ein anderes Beispiel eines verschiedenen Typs, da das verlangen würde, dass Änderung aller Verweisungen auf das ursprüngliche Beispiel geändert wird, um sich auf das neue Beispiel zu beziehen. Wenn man die Klasse des Gegenstands ändert, brauchen Verweisungen auf die vorhandenen Beispiele nicht durch Verweisungen auf neue Beispiele ersetzt zu werden, wenn sich die Klasse des Gegenstands ändert. Jedoch ist diese Fähigkeit auf allen Programmiersprachen nicht sogleich verfügbar. Diese Analyse hängt vom Vorschlag ab, dass dynamische Änderungen, um Struktur einzuwenden, üblich sind. Das kann oder kann in der Praxis nicht der Fall sein.

Orthogonality des Klassenkonzepts und Erbes

Obwohl, wie man allgemein annimmt, klassenbasierte Sprachen Erbe unterstützen, ist Erbe nicht ein innerer Aspekt des Konzepts von Klassen. Es gibt Sprachen, die Klassen unterstützen, noch unterstützen Erbe nicht. Beispiele sind frühere Versionen von Grundlegenden Visuellen. Diese Sprachen, manchmal genannt "Gegenstand-basierte Sprachen", stellen die Strukturvorteile statisch Typ-karierter Schnittstellen für Gegenstände nicht zur Verfügung. Das ist, weil auf Gegenstand-basierten Sprachen es möglich ist, Datenstrukturen zu verwenden und zu erweitern und Methoden ihnen an der Durchlaufzeit beizufügen. Das schließt den Bearbeiter oder Dolmetscher aus, der im Stande ist, die im Quellcode angegebene Typ-Information zu überprüfen, weil der Typ dynamisch gebaut und statisch nicht definiert wird. Die meisten dieser Sprachen erlauben zum Beispiel Verhalten und komplizierten betrieblichen polymorphism (sieh dynamische Absendung und polymorphism).

Innerhalb der objektorientierten Analyse

In der objektorientierten Analyse und in UML ist eine Vereinigung zwischen zwei Klassen ein Typ einer Verbindung zwischen den entsprechenden Gegenständen. Eine Zweiwegevereinigung zwischen Klassen A und B beschreibt eine Beziehung zwischen jedem Gegenstand der Klasse A und einigen Gegenständen der Klasse B, und umgekehrt. Vereinigungen werden häufig mit einem Verb, solchem genannt, das "-unterschreibt".

Ein Vereinigungsrolle-Typ beschreibt den Rolle-Typ eines Beispiels einer Klasse, wenn das Beispiel an einer Vereinigung teilnimmt. Ein Vereinigungsrolle-Typ ist mit jedem Ende der Vereinigung verbunden. Eine Rolle beschreibt ein Beispiel einer Klasse aus dem Gesichtswinkel von einer Situation, in der das Beispiel an der Vereinigung teilnimmt. Rolle-Typen sind Sammlungen der Rolle (Beispiel) s gruppiert durch ihre ähnlichen Eigenschaften. Zum Beispiel beschreibt ein "Unterzeichneter"-Rolle-Typ das Eigentum, das für Beispiele der Klasse "Person" üblich ist, wenn sie an teilnehmen, "unterschreibt - die" Beziehung mit der Klasse "Zeitschrift". Außerdem hat eine "Zeitschrift" die "unterzeichnete Zeitschrift" Rolle-Typ, wenn die Unterzeichneten - es unterschreiben.

Vereinigungsrolle-Vielfältigkeit beschreibt, wie viele Beispiele jedem Beispiel der anderen Klasse der Vereinigung entsprechen. Allgemeine Vielfältigkeit ist "0.. 1", "1.. 1", "1.. *" und "0.. * ", wo" *" jede Zahl von Beispielen angibt.

Taxonomie von Klassen

Es gibt viele Kategorien von Klassen; jedoch teilen diese Kategorien Klassen in verschiedene Teilungen nicht notwendigerweise.

Auszug

Auf einer Sprache, die Erbe unterstützt, ist eine abstrakte Klasse oder abstrakte Grundklasse (ABC), eine Klasse, die nicht realisiert werden kann, weil es entweder als Auszug etikettiert wird oder es einfach abstrakte Methoden (oder virtuelle Methoden) angibt. Abstrakte Klassen geben virtuelle Methoden über Unterschriften an, die von direkten oder indirekten Nachkommen der abstrakten Klasse durchgeführt werden sollen. Bevor eine Klasse auf eine abstrakte Klasse zurückzuführen gewesen ist, kann realisiert werden, alle abstrakten Methoden seiner Elternteilklassen müssen durch eine Klasse in der Abstammungskette durchgeführt werden.

Orientierte Programmiersprachen des grössten Teiles des Gegenstands erlauben dem Programmierer anzugeben, welche Klassen abstrakt betrachtet werden und diesen nicht erlauben werden, realisiert zu werden. Zum Beispiel, in Java und PHP, wird der Schlüsselwort-Auszug verwendet. In C ++ ist eine abstrakte Klasse eine Klasse, die mindestens eine abstrakte Methode durch die passende Syntax auf dieser Sprache (eine reine virtuelle Funktion in C ++ Sprachgebrauch) geben lässt.

Eine Klasse, die aus nur virtuellen Methoden besteht, wird eine Reine Abstrakte Grundklasse (oder Reines Abc) in C ++ genannt und ist auch bekannt als eine Schnittstelle durch Benutzer der Sprache. Andere Sprachen, namentlich Java und C#, unterstützen eine Variante von abstrakten Klassen genannt eine Schnittstelle über ein Schlüsselwort auf der Sprache. Auf diesen Sprachen wird Mehrfachvererbung nicht erlaubt, aber eine Klasse kann vielfache Schnittstellen durchführen. Solch eine Klasse kann nur abstrakte öffentlich zugängliche Methoden enthalten.

Beton

Eine allgemeine Definition der konkreten Klasse ist eine Klasse, die im Vergleich mit abstrakten Klassen realisiert werden kann, die nicht können.

Lokal und inner

Auf einigen Sprachen können Klassen in Spielraumen außer dem globalen Spielraum erklärt werden. Es gibt verschiedene Typen solcher Klassen.

Ein allgemeiner Typ ist eine innere Klasse, die eine innerhalb einer anderen Klasse definierte Klasse ist. Da es zwei Klassen einschließt, kann das auch als ein anderer Typ der Klassenvereinigung behandelt werden. Die Methoden einer inneren Klasse können auf statische Methoden der Umgeben-Klasse zugreifen. Eine innere Klasse wird normalerweise mit Beispielen der Umgeben-Klasse nicht vereinigt; eine innere Klasse wird zusammen mit seiner Umgeben-Klasse nicht realisiert. Abhängig von der Sprache kann es oder kann nicht möglich sein, sich auf die Klasse von der Außenseite der Umgeben-Klasse zu beziehen. Ein zusammenhängendes Konzept ist innere Typen, auch bekannt als innerer Datentyp oder hat Typ verschachtelt, der eine Generalisation des Konzepts innerer Klassen ist. C ++ ist ein Beispiel einer Sprache, die sowohl innere Klassen als auch innere Typen (über typedef Behauptungen) unterstützt.

Ein anderer Typ ist eine lokale Klasse, die eine Klasse ist, die innerhalb eines Verfahrens oder Funktion definiert ist. Das beschränkt Verweisungen auf den Klassennamen zu innerhalb des Spielraums, wo die Klasse erklärt wird. Abhängig von den semantischen Regeln der Sprache kann es zusätzliche Beschränkungen verglichener nichtlokaler der lokalen Klassen geben. Eine allgemeine Beschränkung ist, lokalen Klassenmethoden zurückzuweisen, auf lokale Variablen der Umgeben-Funktion zuzugreifen. Zum Beispiel, in C ++, kann sich eine lokale Klasse auf statische Variablen beziehen, die innerhalb seiner Umgeben-Funktion erklärt sind, aber kann auf die automatischen Variablen der Funktion nicht zugreifen.

Metaclasses

Metaclasses sind Klassen, deren Beispiele Klassen sind. Ein metaclass beschreibt eine allgemeine Struktur einer Sammlung von Klassen. Ein metaclass kann ein Designmuster durchführen oder eine Schnellschrift für besondere Arten von Klassen beschreiben. Metaclasses werden häufig verwendet, um Fachwerk zu beschreiben.

Auf einigen Sprachen wie Pythonschlange, Rubin oder Plausch, ist eine Klasse auch ein Gegenstand; so ist jede Klasse ein Beispiel des einzigartigen metaclass, der auf der Sprache gebaut wird. Zum Beispiel, im Ziel-C, jedem Gegenstand und der Klasse ist ein Beispiel von NSObject. Common Lisp Object System (CLOS) stellt metaobject Protokolle (MOPPS) zur Verfügung, um jene Klassen und metaclasses durchzuführen.

Non-subclassable

Non-subclassable Klassen erlauben Programmierern, Klassen und Hierarchien von Klassen zu entwerfen, die an einem Niveau in der Hierarchie weitere Abstammung verboten wird. (Eine eigenständige Klasse kann auch als non-subclassable benannt werden, die Bildung jeder Hierarchie verhindernd). Stellen Sie dem zu abstrakten Klassen gegenüber, die einbeziehen, fördern, und Abstammung verlangen, um überhaupt verwendet zu werden. Eine non-subclassable Klasse ist implizit konkret.

Eine non-subclassable Klasse wird durch das Erklären der Klasse als in C# oder als in Java und PHP geschaffen. Zum Beispiel wird Javas Klasse als endgültig benannt. Non-subclassable Klassen können einem Bearbeiter (auf kompilierten Sprachen) erlauben, Optimierungen durchzuführen, die für subclassable Klassen nicht verfügbar sind.

Teilweise

Auf Sprachen, die die Eigenschaft unterstützen, ist eine teilweise Klasse eine Klasse, deren Definition in vielfache Stücke innerhalb einer einzelnen Quellcode-Datei oder über vielfache Dateien gespalten werden kann. Die Stücke werden während der Übersetzung verschmolzen, Bearbeiter-Produktion dasselbe bezüglich einer nichtteilweisen Klasse machend.

Die primäre Motivation für die Einführung von teilweisen Klassen soll die Durchführung von Codegeneratoren wie Sehentwerfer erleichtern. Es ist sonst eine Herausforderung oder Kompromiss, um Codegeneratoren zu entwickeln, die den erzeugten Code führen können, wenn es innerhalb des Entwickler-schriftlichen Codes durchgeschossen wird. Mit teilweisen Klassen kann ein Codegenerator eine getrennte Datei oder Kurs-grained teilweise Klasse innerhalb einer Datei bearbeiten, und wird so davon erleichtert, erzeugten Code über die umfassende Syntaxanalyse, die Erhöhung der Bearbeiter-Leistungsfähigkeit und das Beseitigen der potenziellen Gefahr des Verderbens des Entwickler-Codes kompliziert einzuwerfen. In einer einfachen Durchführung von teilweisen Klassen kann der Bearbeiter eine Phase der Vorkompilation durchführen, wo es alle Teile einer teilweisen Klasse "vereinigt". Dann kann Kompilation wie gewöhnlich weitergehen.

Andere Vorteile und Effekten der teilweisen Klasseneigenschaft schließen ein:

  • Ermöglicht Trennung einer Schnittstelle einer Klasse und Durchführungscodes auf eine einzigartige Weise.
  • Bequemlichkeitsnavigation durch große Klassen innerhalb eines Redakteurs.
  • Ermöglicht Trennung von Sorgen in einem Weg, der der Aspekt-orientierten Programmierung ähnlich ist, aber ohne irgendwelche Extrawerkzeuge zu verwenden.
  • Ermöglicht vielfachen Entwicklern, an einer einzelnen Klasse gleichzeitig ohne das Bedürfnis zu arbeiten, individuellen Code in eine Datei in einer späteren Zeit zu verschmelzen.

Teilweise Klassen haben im Plausch unter dem Namen von Klassenerweiterungen für die längere Zeitdauer bestanden. Mit der Ankunft des.NET Fachwerks 2 hat Microsoft teilweise Klassen eingeführt, die sowohl in C# 2.0 als auch in Grundlegender Seh-2005 unterstützt sind. WinRT unterstützt auch teilweise Klassen.

Beispiel in VB.NET

Dieses einfache Beispiel, das in Visuellem Grundlegendem.NET geschrieben ist, zeigt, wie Teile derselben Klasse in zwei verschiedenen Dateien definiert werden.

file1.vb:

Teilweise Klasse MyClass

Privater _name als Schnur

Endklasse

</Quelle>

file2.vb:

Teilweise Klasse MyClass

Öffentlicher Read-Only-Eigentumsname als Schnur

Bekommen Sie

Geben Sie _name zurück

Ende bekommt

Endeigentum

Endklasse</Quelle>

Wenn kompiliert, ist das Ergebnis dasselbe, als ob die zwei Dateien als ein, wie das geschrieben wurden:

Klasse MyClass

Privater _name als Schnur Öffentlicher Read-Only-Eigentumsname als Schnur Bekommen Sie Geben Sie _name zurück Ende bekommt EndeigentumEndklasse</Quelle>

Uninstantiable

Klassen von Uninstantiable erlauben Programmierern, zusammen Felder pro Klasse und Methoden zu gruppieren, die an der Durchlaufzeit ohne ein Beispiel der Klasse zugänglich sind. Tatsächlich wird instantiation für diese Art der Klasse verboten.

Zum Beispiel, in C#, hat eine Klasse "statisch" gekennzeichnet kann nicht realisiert werden, kann nur statische Mitglieder (Felder, Methoden, anderer) haben, kann Beispiel-Konstrukteure nicht haben und wird gesiegelt.

Namenlos

Eine namenlose Klasse oder anonyme Klasse sind eine Klasse, die zu einem Namen oder Bezeichner laut der Definition nicht gebunden wird. Das ist dem genannten gegen namenlose Funktionen analog).

Vorteile

Computerprogramme gewöhnlich vorbildliche Aspekte von etwas echter oder abstrakter Welt (das Gebiet). Weil jede Klasse ein Konzept modelliert, stellen Klassen eine natürlichere Weise zur Verfügung, solche Modelle zu schaffen. Jede Klasse im Modell vertritt ein Substantiv im Gebiet, und die Methoden der Klasse vertreten Verben, die für dieses Substantiv gelten können (Verben können auch als Klassen modelliert werden, Befehl-Muster zu sehen). Zum Beispiel in einem typischen Geschäftssystem werden verschiedene Aspekte des Geschäfts, mit solchen Klassen als Kunde, Produkt, Arbeiter, Rechnung, Job modelliert, usw. kann Eine Rechnung Methoden haben mögen, Schaffen Druck oder Senden, ein Job kann Durchgeführt oder usw. Annulliert Werden. Sobald das System Aspekte des Geschäfts genau modellieren kann, kann es Benutzer des Systems mit der nützlichen Information über jene Aspekte versorgen. Klassen erlauben eine klare Ähnlichkeit, die zwischen dem Modell und dem Gebiet (kartografisch) darstellt), es machend, leichter, diese Modelle zu entwerfen, zu bauen, zu modifizieren und zu verstehen. Klassen stellen etwas Kontrolle über die häufig schwierige Kompliziertheit solcher Modelle zur Verfügung.

Klassen können Entwicklung durch das Reduzieren überflüssigen Programm-Codes, die Prüfung und Programmfehler-Befestigens beschleunigen. Wenn eine Klasse gründlich geprüft worden ist und bekannt ist, eine 'feste Arbeit' zu sein, ist es gewöhnlich wahr, dass das Verwenden oder das Verlängern der gut geprüften Klasse die Anzahl von Programmfehlern - verglichen mit dem Gebrauch des frisch entwickelten oder Ad-Hoc-Codes - in der Endproduktion vermindern werden. Außerdem bedeutet effizienter Klassenwiedergebrauch, dass viele Programmfehler in nur einem Platz bestochen werden müssen, wenn Probleme entdeckt werden.

Ein anderer Grund dafür, Klassen zu verwenden, ist, die Beziehungen von in Wechselbeziehung stehenden Daten zu vereinfachen. Anstatt Code zu schreiben, um ein Fensterzeichnungsunterprogramm der grafischen Benutzerschnittstelle (GUI) auf dem Endschirm wiederholt zu nennen (wie für die strukturierte Programmierung typisch sein würde) ist es intuitiver. Mit Klassen können GUI Sachen, die Fenstern ähnlich sind (wie Dialog-Kästen) einfach den grössten Teil ihrer Funktionalität und Datenstrukturen von der Fensterklasse erben. Der Programmierer muss dann nur Code zur Dialog-Klasse hinzufügen, die zu seiner Operation einzigartig ist. Tatsächlich sind GUIs eine sehr allgemeine und nützliche Anwendung von Klassen, und GUI-Programmierung ist allgemein mit einem guten Klassenfachwerk viel leichter.

Laufzeitdarstellung

Als ein Datentyp wird eine Klasse gewöhnlich als eine Übersetzungszeit-Konstruktion betrachtet. Eine Sprache kann auch Prototyp oder Fabrik metaobjects unterstützen, die Laufzeitinformation über Klassen vertreten, oder sogar metadata vertreten, der Zugang zu Nachdenken-Möglichkeiten und Fähigkeit zur Verfügung stellt, Datenstruktur-Formate an der Durchlaufzeit zu manipulieren. Viele Sprachen unterscheiden diese Art der Laufzeittyp-Information über Klassen von einer Klasse auf der Basis, dass die Information an der Durchlaufzeit nicht erforderlich ist. Einige dynamische Sprachen machen strenge Unterscheidungen zwischen Durchlaufzeit und Übersetzungszeit-Konstruktionen nicht, und können deshalb zwischen metaobjects und Klassen nicht unterscheiden.

Zum Beispiel, wenn Mensch ein metaobject das Vertreten der Klassenperson ist, dann können Beispiele der Klassenperson durch das Verwenden der Möglichkeiten des Menschlichen metaobject geschaffen werden.

Siehe auch

  • Hierarchie
  • Klassendiagramm (UML)
  • Klassenbasierte Programmierung
  • Prototyp-basierte Programmierung

Referenzen

Weiterführende Literatur

Außenverbindungen


Christliche Ansichten auf der Ehe / Canterbury (Begriffserklärung)
Impressum & Datenschutz