Является ли общее программирование примером полиморфизма? - PullRequest
6 голосов
/ 27 марта 2010

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

Я создал хеш-таблицу, которая выглядит следующим образом:

public class HashTable<E extends Hashable>{
    ...
}

где Hashable - это интерфейс, который я создал и который имеет функцию hash ().

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

Я думаю, что это так, потому что E может быть любого типа, который реализует Hashable. Другими словами, HashTable - это класс, который может работать (практически) с любым типом.

Но я не совсем уверен - это этот полиморфизм? Возможно, я могу получить некоторые разъяснения относительно того, что именно является полиморфизмом?

Заранее спасибо!


Редактировать: Получив ответ ниже (см .: первый ответ получил ), я прочитал статью в Википедии и наткнулся на это:

"В сообществе объектно-ориентированного программирования программирование с использованием параметрического полиморфизма часто называют универсальным программированием ." (выделение добавлено)

Ответы [ 4 ]

6 голосов
/ 28 марта 2010

Полиморфизм - это, в двух словах, принятие множества различных классов, которые разделяют общий базовый класс (или интерфейс), и обработка их всех как членов этой общей базы, не зная или не заботясь о том, каким конкретным классом-наследником они являются или как точно они реализовать общие функции. В объектно-ориентированном программировании полиморфизм дает вам достаточно высокоуровневое представление об этой части вашей проблемной области - вы говорите: «Этот код не заботится о конкретных деталях этих объектов - только то, что они реализуют некоторые общие функции X , Y, Z "или" просто они все из базового класса BaseClass. "

В вашем примере используется полиморфизм, поскольку вы определяете базовый класс Hashable и предоставляете функцию, которая заботится только о том аспекте объектов, которые он получает. Hashable объекты могут иметь много форм, но ваш код обрабатывает их все как один базовый тип.

6 голосов
/ 27 марта 2010

Да, это называется параметрический полиморфизм . Ваши аргументы в пользу того, чтобы классифицировать это как полиморфизм, точны.

3 голосов
/ 28 марта 2010

Помимо параметрического полиморфизма, вы, вероятно, будете вызывать метод hashCode объектов, хранящихся в хеш-таблице, что является примером полиморфизма, на который ссылается Джон. HashTable опирается на параметрический полиморфизм, а E полагается на (простой) полиморфизм.

0 голосов
/ 27 марта 2010

Хотя ответ Роба может быть правдивым в некотором техническом смысле, я не думаю, что об этом просят. Я думаю, что эта статья в Википедии с большей вероятностью будет вам нужна.

...