面向方面的编程,面向主题的编程和面向角色的编程之间有什么区别?


14

我知道有很多描述这三种范式的论文,但我正在寻找一个示意性的解释。

这里对面向方面的编程有一些非常好的描述,所以我问这个问题,希望能得到Stack Overflow的人们习惯的高质量回答。


这可能更多是关于程序员的问题,但它实际上也是开放性的。参见stackoverflow.com/faq#dontask- “您的问题应合理界定范围。如果您能想象一整本书都能回答您的问题,那么您提出的要求就太多了。”
Merlyn Morgan-Graham

:我会通过读取原来的托马斯·库恩开始amazon.com/Structure-Scientific-Revolutions-Thomas-Kuhn/dp/...

我也可以想象对我的问题的简短回答。例如,这就是我描述面向方面的编程的方式:这是一种通过切入点在其他处理单元之前和之后以模块化方式添加称为方面的“处理单元”的方式。在我看来,它很像基于规则的编程,例如Inform7编程语言。notify7.com/learn/man/doc188.html

Answers:


9

可以为此写一本书来回答这个问题。但是,这是一个基本比较

1.面向主题的程序设计

面向主题的编程与面向对象的编程根本不同,如下所述。在OO中,对象是根据内部定义的(即基于独立描述对象的模型)。并基于此派生其属性(属性)和方法(行为)。该应用程序仅使用这些属性和行为。与此相反,在面向主题的编程中,没有任何对象以这样的隔离存在(并建模)。在此过程中,对象的行为是由对象的其他各种“主题”提供的,这些对象超出了原始对象作者的范围和控制范围。可以将其视为扩展各种“可独立定义的行为”的方式与本文中所讨论的相比,我认为这将超出定义继承模板的范围。

术语(和概念)的无可争议的起源来自论文“ 面向主题的程序设计:对纯对象的批判,威廉·哈里森和哈罗德·奥舍尔”。这是另一篇好论文。虽然我个人认为这是一个理论框架。我不知道是否有任何语言/实现

有关更多信息,请参见thisthisthis

2.面向方面的编程

面向方面的编程源于“一次分离 ” 的概念。基本上,它针对跨领域的问题扩展了程序或面向对象的编程。过度简化可以说软件具有功能需求而非功能需求。这些交叉需求包括示例,如日志记录,异常处理,线程同步,内存管理,优化等。这些交叉的ASPECTS应该与任何其他功能部件分开且独立地表达和实现。IBM
在这方面的综合工作; 基本上每个这样的关注方面可以彼此独立,从而形成多维“关注空间”。,(阅读此内容)。

有些面向方面的良好实际实现的是AspectJ的AspectC ++和许多更多。看到这个

3.面向角色的编程
随着我们朝着代理的方向发展,很多时候必须定义“角色”和目标,在这些角色和目标中,代理最终执行的确切活动取决于其所处的环境。这类似于人类的概念理解。

主要目标是通过定义称为合作过程的显式构造,使任务的目标与其合作能力脱钩。角色被建模为一组功能和预期行为。但是,这些方法还允许对执行环境以及代理/对象如何感知环境进行建模。看到这个

对于基于角色的建模和实现,研究中提出了各种框架。他们几个都是ROPEALAADIN更多

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.