В чем смысл "функционально-ориентированного программирования" (FOP) в C++ и имеет ли это смысл в Java и C#?
К сожалению, я не могу вспомнить, где я это читал, но...
... в C++ вы можете получить класс из параметра шаблона. Я уверен, что это называется
Функционально-ориентированное программирование (FOP) и должно быть как-то полезно.
Это было что-то вроде:
template <class T>
class my_class : T {
// some very useful stuff goes here ;)
}
Мои вопросы по этому поводу:
В чем смысл такой картины?
Поскольку это невозможно в Java / C#, как этот шаблон достигается в этих языках?
Можно ли ожидать, что он будет реализован в Java / C# однажды?
(Ну, сначала Java должна была бы избавиться от стирания типов)
РЕДАКТИРОВАТЬ:
Я действительно не говорю о дженериках в Java / C#
(где вы не можете получить класс из универсального параметра типа)
3 ответа
Итак, место, где я вижу этот шаблон больше всего в C++, - это поведение mixins ( link), которое, я думаю, является реализацией FOP. В статье, на которую я ссылаюсь, приведен пример Аспектно-ориентированного программирования, чтобы попытаться создать подобный эффект в Java.
Я сомневаюсь, что вы увидите такие функции, как шаблоны (которые необходимы для смешанного подхода) на других языках, хотя они могли бы разработать лучшие шаблоны для АОП. Лично я думаю, что самый простой метод, который я видел для этого, это языки, такие как python и ruby, которые позволяют манипулировать интерфейсом, но это механизм времени выполнения для средств метапрограммирования времени компиляции C++, так что это похоже на сравнение яблок и апельсинов.
Я видел этот паттерн раньше, но никогда не знал, что это функционально-ориентированное программирование. Я посмотрел FOP здесь: http://wwwiti.cs.uni-magdeburg.de/iti_db/forschung/fop/featurec/ и это не похоже.
Я знаю, что шаблон, который очень напоминает ваше описание, называется политическим дизайном. Это подробно обсуждается в Modern C++ Design Андрея Александреску. В предыдущем постере упоминалось Аспектно-ориентированное программирование, которое, как мне кажется, на основе политик является небольшим подмножеством (в основном это одномерный AOP вместо N-мерного).
Я не думаю, что разработка на основе политик будет реализована в Java или C#, но AOP вроде был для Java с AspectJ http://www.eclipse.org/aspectj/. Похоже, что были некоторые попытки с C#, но я не заметил ничего заслуживающего упоминания.
AHEAD - это методология для функционально-ориентированного программирования, и есть Java-композитор. Существует также Eclipse IDE для выполнения приложений FOP. Вы даже можете выбрать AHEAD composer (java) или featureC++ для C++. Все они реализованы как компиляторы исходного кода
http://wwwiti.cs.uni-magdeburg.de/iti_db/research/featureide/
Смысл этого подхода заключается в том, что вы реализуете объекты как слои, каждый слой является ровно одним объектом. Таким образом, в этом слое вы храните код, уточняющий часть кода на более низких уровнях (слои / объекты упорядочены), а также кодируете, как объект взаимодействует с другими объектами. В слое могут быть уточнения для нескольких классов (именно то, что вы сделали бы, если бы вам пришлось добавить определенную функцию в вашу существующую программу), но с FOP вы действительно не потеряете предыдущую версию. Идея состоит в том, что если вы отключаете определенную функцию из данной сборки, это означает, что код, взаимодействующий с этой функцией, не внедряется, а остальные функции остаются неизменными.
Думайте об этом как о дополнительном измерении полиморфизма и о том, как вы организуете функционал