Есть ли имя для метода Java, рассматриваемого отдельно от какого-либо конкретного класса? - PullRequest
3 голосов
/ 07 декабря 2010

Это терминологический вопрос, который трудно задать!

Позвольте мне привести пример.Предположим, я пишу алгоритм символьного дифференцирования.У меня есть абстрактный класс Exp, который является суперклассом группы типов выражений (суммы, интегралы, что угодно).Существует абстрактная производная метода, такая, что e.derivative () должен быть производной выражения e.Все конкретные подклассы Exp (представьте здесь целую иерархию) реализуют производный метод, который собирает знания о том, как различать выражения этого типа.Данный метод обычно вычисляет производную выражения путем объединения производных подвыражений.

Детали примера не важны.Важно то, что все эти рассеянные методы могут рассматриваться как части одного (рекурсивного) алгоритма.Это не относится ко всем методам, но справедливо для многих из них (и использование перегрузки для повторного использования одного и того же имени метода для принципиально разных операций считается плохой идеей).Вопрос в том, что означает термин «производная», рассматриваемый как единая функция?Это не метод;на другом языке это была бы функция, и различные предложения (что делать с суммами, что делать с интегралами) были бы в одном месте.Мне все равно, какой подход или язык лучше, или этот стиль можно использовать в Java.Я просто хочу знать, какой термин использовать для «производного», рассматриваемого как отдельная функция или процедура (идея не ограничивается функциональным программированием и не является рекурсией ключевой функцией).Когда я рассказываю кому-то о том, что я сделал сегодня, я хотел бы сказать: «Я пытался реализовать символьную дифференциацию __ , но каждый алгоритм, о котором я думал, не работал».Что пусто?

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

Ответы [ 4 ]

2 голосов
/ 07 декабря 2010

Это звучит как "нормальный" полиморфизм подтипа . Подклассы / реализации делают работу, но интерфейс определен в базовом типе. Этот метод «разброса» отличается от, скажем, Шаблон посетителя («так хорошо, как получает Java») или Pattern Matching (не в Java) или большого сложного контроллера switch / if-else. Я не уверен, что на самом деле назвал бы это как-то еще как совокупность.

Приложение: вы можете найти Являются ли классы случаев Scala неудачным экспериментом? хорошее чтение. В частности, комментарии, в которых говорится об организации «столбец» или «ряд» и «различие локальности» каждого подхода, имеют:

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

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

Напротив, я думаю, что "метод" является стандартным термином для этого в контексте Java.

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

Я не уверен, что это то, что вы ищете, но я думаю, что могу ответить на это с точки зрения терминологии шаблона проектирования. Ваш пример звучит смутно, как шаблон стратегии GoF . Вот пример шаблона стратегии, реализованного в Java .

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

A полиморфная функция может применяться к значениям разных типов.Функция может быть реализована несколькими методами Java.

...