Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does "Design Patterns" say 'two objects of the same type only need to share part of their interfaces'?

On page 13 in the GoF book there is a statement:

Two objects of the same type need only share parts of their interfaces.

I am not sure I understand this sentence.

EDIT: full quote might indeed help to understand that

A type is a name used to denote a particular interface. We speak of an object as having the type "Window" if it accepts all requests for the operations defined in the interface named "Window." An object may have many types, and widely different objects can share a type. Part of an object's interface may be characterized by one type, and other parts by other types. Two objects of the same type need only share parts of their interfaces. Interfaces can contain other interfaces as subsets.

like image 294
Valentin Kuzub Avatar asked Sep 01 '11 12:09

Valentin Kuzub


2 Answers

In their language, an objects interface is the the entire public contract of the object (Don't think language implementation here).

The set of all signatures defined by an object is called the interface to the object.

A type is more like what you would think of as a declared interface....

A type is a name used to denote a particular interface.

Imagine:

public class Foo : IBar, IBaz {}

public class Fuz : IBar, IBuz {}

A Foo and a Fuz are both IBar "types" but they only share that aspect of their respective interfaces.

like image 92
Eric Farr Avatar answered Oct 21 '22 13:10

Eric Farr


a more full quote is:

A type is a name used to denote a particular interface. We speak of an object as having the type "Window" if it accepts all requests for the operations defined in the interface named "Window." An object may have many types, and widely different objects can share a type. Part of an object's interface may be characterized by one type, and other parts by other types. Two objects of the same type need only share parts of their interfaces. Interfaces can contain other interfaces as subsets.

and pretty clearly, i think, this is talking about multiple inheritance. for example you might have TextWindow and MenuWindow that both subclass Window along with other classes. both objects can be considered, in the sense they are using, to have "type" Window, and they will both implement the operations associated with that type - they will both have Window's methods. but TextWindow may also subclass TextEditor while MenuWindow does not, so their total set of methods (what they mean by "interface") are not the same, even though the Window part overlaps.

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

like image 24
andrew cooke Avatar answered Oct 21 '22 13:10

andrew cooke