Почему «Шаблоны проектирования» говорят, что «два объекта одного типа должны иметь общую часть своих интерфейсов»? - PullRequest
8 голосов
/ 01 сентября 2011

На странице 13 в книге GoF есть утверждение:

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

Я не уверен, что понимаю это предложение.

РЕДАКТИРОВАТЬ : полная цитата может действительно помочь понять, что

Тип - это имя, используемое для обозначения определенного интерфейса. Мы говорим о объект, имеющий тип «Окно», если он принимает все запросы для операции, определенные в интерфейсе с именем «Окно». Объект может иметь Многие типы и различные объекты могут иметь общий тип. Часть Интерфейс объекта может быть охарактеризован одним типом и другими частями другими типами. Два объекта одного типа должны иметь только общие части их интерфейсы . Интерфейсы могут содержать другие интерфейсы как подмножества.

Ответы [ 3 ]

8 голосов
/ 01 сентября 2011

На их языке объект интерфейс является полным публичным контрактом объекта (не думайте, что здесь реализована языковая реализация).

Набор всех определенных сигнатуробъект называется интерфейсом объекта.

A тип больше похож на то, что вы бы назвали объявленным интерфейсом ....

A type - это имя, используемое для обозначения определенного интерфейса.

Представьте себе:

public class Foo : IBar, IBaz {}

public class Fuz : IBar, IBuz {}

Foo иFuz оба являются "типами" IBar, но они разделяют только этот аспект своих соответствующих интерфейсов.

1 голос
/ 01 сентября 2011

более полная цитата:

Тип - это имя, используемое для обозначения определенного интерфейса.Мы говорим об объекте как имеющем тип «Окно», если он принимает все запросы для операций, определенных в интерфейсе с именем «Окно».Объект может иметь много типов, и у разных объектов может быть общий тип.Часть интерфейса объекта может быть охарактеризована одним типом, а другие части - другими типами.Два объекта одного типа должны иметь только общие части своих интерфейсов.Интерфейсы могут содержать другие интерфейсы как подмножества.

и, как мне кажется, довольно ясно, что речь идет о множественном наследовании.например, у вас могут быть TextWindow и MenuWindow, которые оба подкласса Window вместе с другими классами.можно считать, что оба объекта в том смысле, в каком они используют, имеют «тип» Window, и они оба будут реализовывать операции, связанные с этим типом - у них обоих будут методы Window.но TextWindow может также подкласс TextEditor, в то время как MenuWindow нет, поэтому их общий набор методов (что они подразумевают под «интерфейсом») не одинаковы, даже если часть Windowперекрытия.

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

0 голосов
/ 01 сентября 2011

Я не знаю, что это значит, потому что у меня нет книги. Но интерфейс - это сигнатура метода класса в сочетании с открытыми переменными. Поскольку подтип определенного типа также является типом его родительского класса, он может иметь методы, которых у него нет, поэтому он разделяет только часть интерфейса родительского класса. Я понятия не имею, действительно ли это то, о чем говорилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...