Шаблоны проектирования: что такое тип - PullRequest
3 голосов
/ 28 декабря 2010

Очень простой вопрос, но после прочтения книги «Шаблоны проектирования: элементы программного обеспечения многократного использования» я немного запутался.

Книга гласит,

"Тип объекта относится только к его интерфейс - набор запросов к которому это может ответить. Объект может иметь много типов и объектов разных классы могут быть одного типа. "

Может кто-нибудь лучше объяснить, что такое Тип? Я также не понимаю, как один объект может иметь несколько типов ... если в книге не говорится о полиморфизме ....

Ответы [ 3 ]

1 голос
/ 28 декабря 2010

Может быть пример поможет уточнить. Предполагаю, что класс - это особый тип типа.

  class Dog : Animal {...};
  class Fish : Animal {...};
  Dog lassie = new Dog();  
        // An object can have many types: 
        // lassie is a dog and an Animal

  Fish nemo = new Fish();  
    // objects of different classes can have the same type: 
    // lassie and nemo are animals
1 голос
/ 28 декабря 2010

Типы в этом смысле не обязательно объекты фактический тип.

Речь идет о типах в том смысле, какие услуги предоставляет объект. Это может быть несколько типов с множественным наследованием или фактический тип с несколькими интерфейсами.

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

Это пример объекта, имеющего несколько типов.

Примером нескольких объектов с одинаковым «типом» (в смысле вашей цитаты) являются ваши классические классы геометрических фигур, такие как square, rectangle, circle и так далее. Все эти отдельные объекты могут иметь один и тот же «тип», поскольку их интерфейс состоит из setPosition(), setSize() и drawShape().

0 голосов
/ 28 декабря 2010

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

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

В этом случае у вас будет много типов IEntity, IMammal и ISwimmer и заданный объект, например, пингвин имеет тип IEntity и тип ISwimmer.Помните об аналогии с типом-контрактом, и поэтому тип указывает на запросы, на которые может ответить данный объект, точно так же, как в контракте указано, что вы можете сделать, а что - не можете сделать для конкретной контрактной задачи.

Надеюсь, мой ответ поможет

...