Frage

Ist Vertrag Schnittstelle als Objekt-Klasse ist?

Was ist die Notwendigkeit, identische Dinge wie diese zu unterscheiden, von dem Code zum Ausführen von Code? Ich bekomme irgendwie die Idee hinter einer Klasse eine Klasse zu benennen und die instanziiert Ausführung Klasse eines Objekt, aber alles in allem ist, dass der einzige Grund für diese halb-redundanten Begriffe?

War es hilfreich?

Lösung

Nicht wirklich. Es gibt vier Begriffe hier, also werde ich jeden von ihnen gehen über:

Schnittstelle

Eine Schnittstelle ist eine abstrakte Klasse (in Sprachen wie Java, wo es keine Mehrfachvererbung ist, manchmal gibt es andere Einschränkungen, wie einen separaten Datentyp), die als gemeinsame Basis verwendet werden sollten, eine Reihe von ähnlich zuzugreifen -behaving Objekte. Konzeptionell gibt es keine Anforderung für Abstraktheit, aber in der Regel wird eine Schnittstelle mindestens eine abstrakte Methode hat. Eine Schnittstelle ist eine Methode für Ihr Programm mit einer Reihe von ähnlichen Klassen, die jeweils mit unterschiedlicher Semantik aber der gleichen allgemeinen Zweck zu kommunizieren.

Vertrag

Ein Vertrag ist die implizite Vereinbarung zwischen Benutzern und Implementierer einer Klasse oder Schnittstelle zu machen. Zum Beispiel Vor- und Nachbedingungen (Invarianten sind in der Regel ein Vertrag innerhalb der Klasse Umsetzung - in der Regel, Dinge wie die Beziehung zwischen internen Mitgliedern müssen nicht ausgesetzt werden). Die Spezifikation für einen Rückgabewert oder ein Argument kann auch Bestandteil des Vertrages sein. Es stellt im Grunde, wie die Funktion / Klasse / Schnittstelle verwenden, und ist im Allgemeinen nicht vollständig darstellbaren in jeder Sprache (in einigen Sprachen, wie Eiffel, können Sie explizite Verträge, setzen aber auch können diese nicht immer in vollem Umfang die Anforderungen konkretisieren ). Wenn Sie eine Schnittstelle implementieren oder von einer Klasse ableiten, haben Sie immer die Schnittstellenanforderungen gerecht zu werden, oder, wenn eine nicht-abstrakte Klasse überschreiben, ähnlich genug, um verhalten, dass ein externer Betrachter nicht den Unterschied nicht bemerkt (dies ist die Liskov Substitutionsprinzip; a. abgeleitetes Objekt sollte den Austausch die Basis ohne Unterschied im Verhalten von außen Perspektive Lage sein)

Klasse

Eine Klasse braucht nicht viel gehen über, da man sie deutlich vor verwendet haben. Eine Klasse ist der Datentyp, und in einigen Sprachen ist eine Obermenge von Schnittstellen (die keine formale Definition haben, wie in C ++), und in anderen unabhängig ist (wie in Java).

Objekt

Ein Objekt ist eine Instanz einer Klasse-Typ (oder eines Nicht-Klasse-Typ, in der Regel). Die genaue Definition eines Objekts zu einer Sprache sehr spezifisch ist, aber die allgemeine Definition ist die eigentliche Sache durch mehrere Referenzen / Zeiger auf die gleiche Sache genannt - zum Beispiel in einigen Sprachen wie Java, vergleicht ==, ob zwei Variablen sind die gleiches Objekt, nicht unbedingt, ob sie semantisch gleich ist. Objekte sind unabhängig von Klassen oder Schnittstellen - sie eine einzelne Instanz darstellen. Ein andere Art des Denkens davon ist, dass Klasse oder Schnittstelle ist die Form und das Objekt ist das physische Objekt, das aus der Form kommt (eine eher schlechte Analogie, aber es ist das Beste, was ich mit jetzt kommen kann).

Andere Tipps

Nein, nicht wirklich. Eine Klasse ist eine Vorlage, die Sie definieren. Jedes Objekt, das instanziiert dieser Klasse die Vorlage folgt. Sie sind nicht wirklich überflüssig Bedingungen, weil die beiden Dinge nicht identisch sind. Sie können als benutzerdefinierten Datentyp eine Klasse denken. Klassen und Objekte sind verschieden voneinander in genau der gleichen Art und Weise, dass die primitiven Datentyp int von der wörtlichen Wert 3 verschieden ist.

Eine Schnittstelle definiert eine Reihe von Methoden, die alle implementierenden Klassen unterstützen. Die Schnittstelle selbst ist der Vertrag, den Sie für die Durchführungs Klassen definieren. Es heißt nur, dass jede Klasse, die die Schnittstelle implementiert, muss diese Schnittstelle des Satzes von öffentlichen Methoden haben.

Nun, ich denke ..., wenn eine Schnittstelle einen Vertrag gibt, als eine Klasse eine (oder mehrere)-Instanz (en) eines bestimmten Objekts.

Die Terminologie ist weniger wichtig als die Anwendung though.

Eigentlich ist eine Schnittstelle, ein Vertrag, wenn ein Objekt eine Instanz einer Klasse ist -. Sie sind verschiedene Dinge, die gemeinsam nicht zu viel haben

Die Schnittstelle stellt nur eine Fassade für Objekte oder eine Garantie für den Anrufer, dass das Objekt einer Operation tun, auch ohne Umsetzung ist es zu wissen.

Zum Beispiel können Sie zwei Klassen die gleiche Schnittstelle / Vertrag Umsetzung, aber tun totaly verschiedene Dinge (auch wenn die Bedeutung sie tun das gleiche sein kann).

Nehmen Sie die IDisposable-Schnittstelle zum Beispiel: Jedes Objekt, um die Ressourcen freigeben kann, die es verwendet, aber es kann es auf viele verschiedene Arten zu tun, kann es wählen, nichts zu veröffentlichen. Es ist die Wahl des Objekts.

Zumindest wäre dies die POV in .NET sein

, um die vorherigen Antworten zu vervollständigen, ein Wort über Schnittstellen:

Wenn die Klasse mehr als eine Vorlage für ein Objekt ist (wegen seiner globalen Eigenschaften unabhängig von irgendwelchen Instanzen) kann die Schnittstelle auch als beschrieben werden Sicht

Eine Klasse Implementierung mehrere Schnittstelle:

  • vervollständigen den Auftrag, es respektieren muss
  • erlauben dem Benutzer alle Instanzen dieser Klasse von der Sicht zu sehen des einen durch die implementierte Schnittstelle dargestellt.

„Point of View“ bedeutet, dass Sie ein Objekt verwenden, können durch diese Schnittstelle ausschließlich auf dem Vertrag define durch die Fokussierung.

Es ist in diesem Aspekt eine Schnittstelle ist eine „abstrakte Klasse“, wie in einer „Abstraktion“ (etwas, das nach einige der Merkmale einer Klasse nimmt, aber einige andere auslassen). In Java-Welt läßt eine Schnittstelle eigentlich viel aus, da sie nur angewandt werden können Vertrag zum Beispiel zu definieren, nicht für statische Methoden oder Funktionen.

„Klasse“ und „Objekt“ sind zwei verschiedene Dinge; sie sind verwandt, aber was sie vertreten ist anders, ganz stark.

Der beste Weg, dies zu beschreiben, ist auf Statisch zu suchen. Eine Klasse kann statische Elemente aufweist, die aus einer beliebigen Instanz dieser Klasse vollständig getrennt sind. Objekte dieser Klasse können oder nicht, diese statischen Elemente verwenden; aber die Instanz des Objekts dieser Klasse ist völlig unabhängig von irgendwelchen statischen Verwendungen dieser Klasse (oder sollte sein, zumindest).

Oder denken Sie an die Singletonmuster. eine Instanz der Klasse Objekts in einer statischen Klasse Accessor Speicherung ist eine gängige Praxis, und zeigt den Unterschied. Sie beziehen sich auf die Klasse statischen Accessor Objektinstanz eine Singleton-Klasse zu erhalten; wenn die Klasse statisches Element keine haben Objektinstanz , um sich auf die Klasse erstellt die Beispiel: der Objekt .

Um es anders auszudrücken; ein Objekt ist eine Instanz einer Klasse; aber eine Klasse sein als nur eine Vorlage, aus den Objekten instanziiert. Statische Elemente von Klassen haben eine Darstellung im Speicher, die völlig unabhängig von Objektinstanzen dieser Klassen sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top