2009-06-04 21 views
4

不幸的是,我不记得我在哪里阅读它,但...
...在C++中,您可以从模板参数派生类。我很确定它被称为
面向特征编程(FOP)并意味着某种程度上有用。在C++中“面向特征的编程”(FOP)有什么意义,并且它在Java和C#中有意义吗?

它是这样的:

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

我这个问题:

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

  2. 因为这个而不是可能在Java/C#中,在这些语言中如何实现这种模式 ?

  3. 它可以预期在Java/C#实施一天吗?
    (嗯,第一个Java将需要摆脱类型擦除)

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

回答

3

所以,我在C++中看到最多的模式的地方就是mixins( link),我猜是FOP的一个实现。我已经链接的文章是一个面向方面编程的例子,试图在java中产生类似的效果。

我怀疑你会在其他语言中看到像模板(这对mixin方法是必不可少的)的功能,尽管它们可以为AOP开发更好的模式。就我个人而言,我认为我见过的最简单的方法是Python和Ruby等语言,它们允许对接口进行操作,但它是C++编译时元编程设施的运行时机制,所以它就像比较苹果和橘子一样。

1

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

我知道的模式非常类似于您的描述,称为基于策略的设计。它由Andrei Alexandrescu在Modern C++ Design中进行了深入讨论。前面的海报提到了Aspect Oriented Programming,我认为Policy Based Design是一个小子集(基本上是1维AOP而不是N维)。

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

0

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

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

这种方法的含义是,你实现的功能如层,每层正好是一个功能。因此,在此图层中,您可以将代码保留在较低层的某些代码(图层/要素已排序)中,并且还可以编码该功能与其他要素之间的交互方式。在一个图层中,可能会对多个类进行改进(如果必须将某个特性添加到现有程序中,您可能会做些什么),但使用FOP则不会真的失去以前的版本。我们的想法是,如果您禁用给定构建中的某个特性,那意味着与该特性交互的代码不会被注入,但其余特性保持不变。

认为它是多态性的另一个维度,以及如何组织功能