8 Stimmen

Warum sagt "Design Patterns", dass "zwei Objekte des gleichen Typs nur einen Teil ihrer Schnittstellen teilen müssen"?

Auf Seite 13 im GoF-Buch gibt es eine Aussage:

Zwei Objekte des gleichen Typs müssen nur Teile ihrer Schnittstellen teilen.

Ich bin mir nicht sicher, ob ich diesen Satz verstehe.

BEARBEITEN: Der vollständige Zitat könnte tatsächlich helfen, das zu verstehen

Ein Typ ist ein Name, der verwendet wird, um eine bestimmte Schnittstelle zu bezeichnen. Wir sprechen von einem Objekt als Typ "Fenster", wenn es alle Anfragen für die in der Schnittstelle mit dem Namen "Fenster" definierten Operationen akzeptiert. Ein Objekt kann viele Typen haben, und sehr unterschiedliche Objekte können einen Typ teilen. Ein Teil der Schnittstelle eines Objekts kann durch einen Typ charakterisiert werden, und andere Teile durch andere Typen. Zwei Objekte des gleichen Typs müssen nur Teile ihrer Schnittstellen teilen. Schnittstellen können andere Schnittstellen als Teilmenge enthalten.

8voto

Eric Farr Punkte 2673

In ihrer Sprache ist die Oberfläche eines Objekts der gesamte öffentliche Vertrag des Objekts (Denken Sie hier nicht an die Sprachimplementierung).

Die Menge aller von einem Objekt definierten Signaturen wird als Oberfläche des Objekts bezeichnet.

Ein Typ ist eher das, was Sie als deklarierte Schnittstelle bezeichnen würden....

Ein Typ ist ein Name, der verwendet wird, um eine bestimmte Schnittstelle zu bezeichnen.

Stell dir vor:

public class Foo : IBar, IBaz {}

public class Fuz : IBar, IBuz {}

Ein Foo und ein Fuz sind beide IBar "Typen", aber sie teilen nur diesen Aspekt ihrer jeweiligen Schnittstellen.

1voto

andrew cooke Punkte 43891

Ein etwas ausführlicheres Zitat lautet:

Ein Typ ist ein Name, der verwendet wird, um eine bestimmte Schnittstelle zu bezeichnen. Wir sprechen von einem Objekt als Typ "Fenster", wenn es alle Anfragen für die in der Schnittstelle mit dem Namen "Fenster" definierten Operationen akzeptiert. Ein Objekt kann viele Typen haben, und sehr unterschiedliche Objekte können einen Typ teilen. Ein Teil der Schnittstelle eines Objekts kann durch einen Typ charakterisiert werden, und andere Teile durch andere Typen. Zwei Objekte des gleichen Typs müssen nur Teile ihrer Schnittstellen teilen. Schnittstellen können andere Schnittstellen als Teilmengen enthalten.

Und ziemlich klar, denke ich, spricht dies über multiple Vererbung. Zum Beispiel könnten Sie TextWindow und MenuWindow haben, die beide Window unterklasse sowie andere Klassen. Beide Objekte können im Sinne dessen, was sie verwenden, als "Typ" Window betrachtet werden und sie werden die mit diesem Typ verbundenen Operationen implementieren - sie werden die Methoden von Window haben. Aber TextWindow kann auch TextEditor unterklasse, während MenuWindow dies nicht tut, daher sind ihre gesamte Menge an Methoden (was sie mit "Schnittstelle" meinen) nicht dieselben, obwohl sich der Window-Teil überschneidet.

http://www.uml.org.cn/c++/pdf/DesignPatterns.pdf

-1voto

BobTurbo Punkte 232

Ich weiß nicht, was es bedeutet, da ich das Buch nicht habe. Aber eine Schnittstelle ist die Methodensignaturen der Klasse, kombiniert mit den öffentlichen Variablen. Als Unterart eines bestimmten Typs ist sie auch ein Typ ihrer Elternklasse, sie kann Methoden haben, die ihre Eltern nicht haben, daher teilt sie nur einen Teil der Schnittstelle der Eltern. Ich habe keine Ahnung, ob das tatsächlich ist, worüber gesprochen wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X