我知道有很多描述这三种范式的论文,但我正在寻找一个示意性的解释。
这里对面向方面的编程有一些非常好的描述,所以我问这个问题,希望能得到Stack Overflow的人们习惯的高质量回答。
我知道有很多描述这三种范式的论文,但我正在寻找一个示意性的解释。
这里对面向方面的编程有一些非常好的描述,所以我问这个问题,希望能得到Stack Overflow的人们习惯的高质量回答。
Answers:
可以为此写一本书来回答这个问题。但是,这是一个基本比较
1.面向主题的程序设计
面向主题的编程与面向对象的编程根本不同,如下所述。在OO中,对象是根据内部定义的(即基于独立描述对象的模型)。并基于此派生其属性(属性)和方法(行为)。该应用程序仅使用这些属性和行为。与此相反,在面向主题的编程中,没有任何对象以这样的隔离存在(并建模)。在此过程中,对象的行为是由对象的其他各种“主题”提供的,这些对象超出了原始对象作者的范围和控制范围。可以将其视为扩展各种“可独立定义的行为”的方式与本文中所讨论的相比,我认为这将超出定义继承模板的范围。
术语(和概念)的无可争议的起源来自论文“ 面向主题的程序设计:对纯对象的批判,威廉·哈里森和哈罗德·奥舍尔”。这是另一篇好论文。虽然我个人认为这是一个理论框架。我不知道是否有任何语言/实现
2.面向方面的编程
面向方面的编程源于“一次分离 ” 的概念。基本上,它针对跨领域的问题扩展了程序或面向对象的编程。过度简化可以说软件具有功能需求,而非功能需求。这些交叉需求包括示例,如日志记录,异常处理,线程同步,内存管理,优化等。这些交叉的ASPECTS应该与任何其他功能部件分开且独立地表达和实现。IBM
在这方面的综合工作; 基本上每个这样的关注或方面可以彼此独立,从而形成多维“关注空间”。,(阅读此内容)。
有些面向方面的良好实际实现的是AspectJ的和AspectC ++和许多更多。看到这个。
3.面向角色的编程
随着我们朝着代理的方向发展,很多时候必须定义“角色”和目标,在这些角色和目标中,代理最终执行的确切活动取决于其所处的环境。这类似于人类的概念理解。
主要目标是通过定义称为合作过程的显式构造,使任务的目标与其合作能力脱钩。角色被建模为一组功能和预期行为。但是,这些方法还允许对执行环境以及代理/对象如何感知环境进行建模。看到这个。