4

可悲的是,我不记得我在哪里读过它,但是...
...在 C++ 中,您可以从模板参数派生一个类。我很确定它被称为
面向特征的编程(FOP),并且意味着某种用途。

它是这样的:

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

我对此的疑问:

  1. 这种模式的意义是什么?

  2. 既然这在 Java / C# 中是不可能的,那么这种模式是如何在这些语言中实现的

  3. 可以期待有一天用Java/C#实现吗?
    (嗯,首先 Java 需要摆脱类型擦除)

编辑
我真的不是在谈论 Java / C#
中的泛型(你不能从泛型类型参数派生类)

4

3 回答 3

3

所以,我在 C++ 中看到这种模式最多的地方是 mixins ( link ) 的行为,我猜这是 FOP 的实现。我链接的文章进入了面向方面编程的示例,以尝试在 java 中产生类似的效果。

我怀疑您会在其他语言中看到诸如模板(对于 mixin 方法必不可少)之类的功能,尽管它们可以为 AOP 开发更好的模式。就个人而言,我认为我见过的最简单的方法是 python 和 ruby​​ 等语言,它们允许操作接口,但它是 c++ 编译时元编程工具的运行时机制,所以它就像比较苹果和橘子。

于 2009-06-04T13:36:50.263 回答
1

我以前见过这种模式,但从来不知道它是面向特征的编程。我在这里查找了 FOP:http ://wwwiti.cs.uni-magdeburg.de/iti_db/forschung/fop/featurec/它看起来并不相似。

我知道的与您描述的非常相似的模式称为基于策略的设计。Andrei Alexandrescu 在 Modern C++ Design 中详细讨论了它。上一张海报提到了面向方面的编程,我认为基于策略的设计是其中的一个小子集(基本上它是一维 AOP 而不是 N 维)。

我不认为基于策略的设计会在 Java 或 C# 中实现,但 AOP 已经用于带有 AspectJ http://www.eclipse.org/aspectj/的 Java 。看起来有一些 C# 的尝试,但我没有注意到任何值得一提的东西。

于 2009-06-05T03:17:51.460 回答
0

AHEAD 是一种进行面向特征编程的方法,并且有一个 java composer。还有一个用于执行 fop 应用程序的 Eclipse IDE。您甚至可以为 c++ 选择 AHEAD composer (java) 或 featurec++。所有这些都作为源到源编译器实现

http://wwwiti.cs.uni-magdeburg.de/iti_db/research/featureide/

这种方法的含义是您将特征实现为层,每一层都是一个特征。因此,在这一层中,您保留了对较低层中的一些代码进行细化的代码(层/特征是有序的),并且您还对特征如何与其他特征交互进行编码。在一个层中,可能会对多个类进行改进(如果您必须向现有程序添加某个功能,您会做什么),但使用 FOP,您并不会真正失去以前的版本。这个想法是,如果您从给定的构建中禁用某个功能,这意味着与该功能交互的代码不会被注入,但其余功能保持不变。

将其视为多态性以及如何组织功能的附加维度

于 2010-06-17T19:32:00.533 回答