В чем смысл «функционально-ориентированного программирования» (FOP) в C ++ и имеет ли это смысл в Java и C #? - PullRequest
4 голосов
/ 04 июня 2009

К сожалению, я не могу вспомнить, где я это читал, но ...
... в C ++ вы можете получить класс из параметра шаблона. Я уверен, что это называется
Функционально-ориентированное программирование (FOP) и должно быть как-то полезно.

Это было что-то вроде:

template <class T>
class my_class : T {
  // some very useful stuff goes here ;) 
}

Мои вопросы по этому поводу:

  1. В чем смысл такой картины?

  2. Так как это не возможно в Java / C #, как этот шаблон достигается на этих языках?

  3. Можно ли ожидать, что он будет реализован в Java / C # однажды?
    (Ну, сначала Java должна была бы избавиться от стирания типа)

EDIT
Я действительно не говорю о дженериках в Java / C #
(где вы не можете получить класс из параметра универсального типа)

Ответы [ 3 ]

3 голосов
/ 04 июня 2009

Итак, я вижу, что больше всего шаблонов в c ++ представляет собой поведение mixins ( link ), которое, я думаю, является реализацией FOP. В статье, на которую я ссылаюсь, приведен пример Аспектно-ориентированного программирования, чтобы попытаться создать подобный эффект в Java.

Я сомневаюсь, что вы увидите такие функции, как шаблоны (которые необходимы для смешанного подхода) на других языках, хотя они могли бы разработать более совершенные шаблоны для АОП. Лично я думаю, что самый простой метод, который я видел для этого, это языки, такие как python и ruby, которые позволяют манипулировать интерфейсом, но это механизм времени выполнения для средств метапрограммирования времени компиляции c ++, так что это похоже на сравнение яблок и апельсинов.

1 голос
/ 05 июня 2009

Я видел этот паттерн раньше, но никогда не знал, что это функционально-ориентированное программирование. Я посмотрел FOP здесь: http://wwwiti.cs.uni -magdeburg.de / iti_db / forschung / fop / featurec / , и он не выглядит похожим.

Шаблон, который я знаю и который очень напоминает ваше описание, называется политическим дизайном. Это подробно обсуждается в Modern C ++ Design Андрея Александреску. В предыдущем постере упоминалось Аспектно-ориентированное программирование, которое, как мне кажется, на основе политик является небольшим подмножеством (в основном это одномерный AOP вместо N-мерного).

Я не представляю, что Policy Based Design будет реализован на Java или C #, но AOP вроде был для Java с AspectJ http://www.eclipse.org/aspectj/. Похоже, были попытки с C #, но я этого не делал обратите внимание на все, что стоит упомянуть.

0 голосов
/ 17 июня 2010

AHEAD - это методология для функционально-ориентированного программирования, и есть java composer. Существует также Eclipse IDE для выполнения приложений FOP. Вы даже можете выбрать AHEAD composer (java) или featurec ++ для c ++. Все они реализованы как компиляторы исходного кода

http://wwwiti.cs.uni -magdeburg.de / iti_db / исследования / featureide /

смысл этого подхода заключается в том, что вы реализуете элементы как слои, каждый слой - это ровно один элемент. Таким образом, в этом слое вы сохраняете код, который уточняет часть кода на более низких уровнях (слои / элементы упорядочены), а также вы кодируете, как элемент взаимодействует с другими функциями. В слое могут быть уточнения для нескольких классов (именно то, что вы бы сделали, если бы вам пришлось добавить определенную функцию в вашу существующую программу), но с FOP вы действительно не потеряете предыдущую версию. Идея состоит в том, что если вы отключаете определенную функцию из данной сборки, это означает, что код, взаимодействующий с этой функцией, не внедряется, а остальные функции остаются неизменными.

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

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