LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

Но это само собой, то чем является объект определяют его методы. Добавил стулу метод летать и он полетел.

Это утверждение верно в случае duck typing или в случае систем типов, в которых мы можем вывести тип из наличия методов с заданной сигнатурой, но – не в общем случае.

В случае объектных моделей, используемых в Java, в COM или в GObject, это приобретает форму:

Стул implements Летающее

Мебель *какая_то_мебель = ...;
Летающее *летающая_мебель = cast(какая_то_мебель, Летающее);
if (летающая_мебель)
   летающая_мебель->полетели();
else
   raise Exception("Объект не поддерживает интерфейс Летающее");

Исправление wandrien, :

Но это само собой, то чем является объект определяют его методы. Добавил стулу метод летать и он полетел.

Это утверждение верно в случае duck typing или в случае систем типов, в которых мы можем вывести тип из наличия методов с заданной сигнатурой, но – не в общем случае.

В случае объектных моделей, используемых в Java, в COM или в GObject, это приобретает форму:

Стул implements Летающее

Мебель * какая_то_мебель = ...;
Летающее *летающая_мебель = cast(какая_то_мебель, Летающее);
if (летающая_мебель)
   летающая_мебель->полетели();
else
   raise Exception("Объект не поддерживает интерфейс Летающее");

Исходная версия wandrien, :

Но это само собой, то чем является объект определяют его методы. Добавил стулу метод летать и он полетел.

Это утверждение верно в случае duck typing или в случае систем типов, в которых мы можем вывести тип из наличия методов с заданной сигнатурой, но – не в общем случае.

В случае объектных моделей, используемых в Java, в COM или в GObject, это приобретает форму:

Стул implements Летающее.

Мебель * какая_то_мебель = ...;
Летающее *летающая_мебель = cast(какая_то_мебель, Летающее);
if (летающая_мебель)
   летающая_мебель->полетели();
else
   raise Exception("Объект не поддерживает интерфейс Летающее")