Это пример параметрического полиморфизма? - PullRequest
0 голосов
/ 23 мая 2010

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

<cfscript>
Parent = createobject("component","webapp.model.Parent").init();
Child = createobject("component","webapp.model.Child").init();
GrandChild = createobject("component","webapp.model.GrandChild").init();
Test = createobject("component","webapp.model.DealWithObject");
dump(Test.getNumberOfParents(Parent));
dump(Test.getNumberOfParents(Child));
dump(Test.getNumberOfParents(GrandChild));
</cfscript>

<cfcomponent>
<cfscript>
// should deal with an infinte number of abstract data types (because of common structure)
public numeric function getNumberOfParents(component arg){
  return -1 + arraylen(structfindkey(getmetadata(arguments.arg),"extends","all"));
}
</cfscript>
</cfcomponent>

Ответы [ 2 ]

1 голос
/ 23 мая 2010

Нет, просто нет.

Полиморфизм означает, что вам не нужно проверять, что это за тип, вы просто используете его.

Примером может быть (C #):

public Boolean AreEqual(Object o1, Object o2)
{
  return o1.Equals(o2);
}

Метод может принимать любой тип объекта, который наследует от объекта (в C # почти все), и объект реализует Equals, так что вы можете использовать его для проверки и не проверять тип какого-либо параметра. * Обычно вы принимаете какой-то интерфейс, чтобы убедиться, что объект поддерживает операцию, которую вы хотите выполнить.

1 голос
/ 23 мая 2010

Я не верю этому пункту, поскольку функция явно имеет дело с типом аргумента any. Дело в том, что функция pp работает независимо от типа объекта.

Если я введу новый тип в систему, эта функция прекратит работу, поскольку у нее нет специальной обработки.

РЕДАКТИРОВАТЬ: я думаю, что ваш обновленный пример полиморфизм подтипов, так как функция будет обрабатывать объект и любые его подтипы, в силу того, что getmetadata обрабатывает объект (и по принципу подстановки, это его подтипы.)

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