`
canonical
  • 浏览: 358587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从面向对象到面向切面

阅读更多

1. C语言抽象出了软件所在的领域(domain): 由变量v1,v2,...和函数f1,f2,...组成的空间

 

2. 面向对象(OOP)指出,在这一领域上可以建立分组(group)结构:一组相关的变量和函数构成一个集合,我们称之为对象(Object)。同时在分组结构上可以定义一个运算(推理)关系:  D > B, 派生类D从基类B继承(inheritance),相应的派生对象符合基类对象所满足的所有约束。推理是有价值的,因为根据 D > B, B > A 可以自动推导出 D > A,所有针对A的断言在理论上对D都成立(这也就是我们常说的“派生对象 is a 基类对象”)。编译器也能有点智能了。
   一个有趣的地方是,D > B意味着在D和B之间存在着某种差异,但是我们却无法把它显式的表达出来!也就是说在代码层面上我们无法明确表达 D - B是什么。为了把更多的信息不断的导入到原有系统中,面向对象内置提供的方法是建立不断扩展的类型树,类型树每增长一层,就可以多容纳一些新的信息。这是一种金字塔式的结构,只不过是一种倒立的金字塔,最终基点会被不断增长的结构压力所压垮。

 

3. 组件技术(Component)本质上是在提倡面向接口(interface),然后通过接口之间的组合(Composition)而不是对象之间的继承(inheritance)来构造系统。基于组合的观念相当于是定义了运算关系:D = B + C。终于,我们勉强可以在概念层面上做加法了。
   组件允许我们随意的组合,按照由简单到复杂的方向构造系统,但是组件构成的成品之间仍然无法自由的建立关系。这意味着组件组装得到的成品只是某种孤立的,偶然的产物。
   F = A + B + C  ? G = A + D + C。

 

4. 在数学上,配备了加法运算的集合构成半群,如果要成为群(Group),则必须定义相应的逆运算:减法。 群结构使得大粒度的结构变换成为可能。
   F = A + B + C = A + D - D + B + C = (A + D + C) - D + B = G - D + B
   在不破坏原有代码的情况下,对原有系统功能进行增删,这就是面向切面(AOP)技术的全部价值。

1
4
分享到:
评论
3 楼 litongke 2011-12-27  
类比的方式总是能帮助我们快速的理解一个晦涩的理念。楼主的很厉害。受教了!
2 楼 snowflate_summer 2011-05-09  
这是从数学上来论证面向对象和面向切面吗?很深奥
1 楼 奥义之舞 2011-05-09  
我好像更迷茫了。、、、

相关推荐

    面向切面(AOP)与面向对象(OOP)

    火龙果软件工程技术中心 首先你要明确的一点,AOP和OOP是两种不同的认识事物的角度,并不是说有了AOP就不要用OOP.AOP所关注的是传统OOP不能优雅解决的问题.(程序员通常都是完美主义者,当解决某个问题不优雅的时候,那...

    Chapter 6_ 使用Spring进行面向切面编程(AOP)

    面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。

    面向切面编程PPT(Java语言)

    一、为什么要用面向切面编程 二、什么是面向切面编程 三、面向切面编程的使用 四、遇到的问题与解决方法

    面向切面设计AOP

    把我们某个方面的功能提取出来与一批对象进行隔离,这样与一批对象之间降低耦合性,对某个功能进行编程

    yui3的AOP(面向切面编程)和OOP(面向对象编程)

    从哲学角度将,世界观影响方法论,我们看事物的角度不同,有时会得出截然相悖的结论,从而会影响我们的做事方式和行为准则,现实生活如此,在丰富多彩的编程语言中更是如此,编程模式充满了对现实世界的各种模拟,...

    不要小瞧面向切面编程

    本文介绍Spring AOP,面向切面编程。在权限验证、保存日志、安全检查和事务控制等多个应用场景之下都会依赖该技术。以下是在自己学习过程中的一些总结,如有错误,还望指正。 面向切面的定义  面向切面编程(AOP)...

    Spring.NET控制反转(IoC)和面向切面(AOP)的容器框架

    Spring.NET 控制反转(Inversion of Control,英文...我个人认为控制反转的意思是依赖对象(控制权)发生转变,由最初的类本身来管理依赖对象转变为IoC框架来管理这些对象,使得依赖 脱离类本身的控制,从而实现松耦合。

    python学习之面向对象【入门初级篇】

    python支持多种编程范式:面向过程、面向对象、面向切面(装饰器部分)等。 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数...

    基于框架的Web开发-面向切面编程AOP入门.doc

    2.1 面向切面编程AOP入门 软件系统中的一些功能需要用到应用程序的多个地方,但是我们又不想在每个点都明确调用它们。日志、安全和事务管理的确都很重要,但它们是否为应该被应用对象主动调用呢?如果让应用对象只...

    基于AOP的面向对象程序的单元测试

    单元测试被视为横切关注点,在软件测试过程中很重要。而面向方面编程(AOP)的主要...该文提出了在对面向对象程序进行单元测试时遇到的问题,并用AOP方法加以解决,同时比较了传统方法和AOP方法进行单元测试的优缺点。

    AOP面向切面编程.docx

    1.jdk动态代理:使用jdk中的Proxy,Method,InvocaitonHanderl创建代理对象,jdk动态代理要求目标类必须实现接口 2.cglib动态代理:第三方的工具库,创建代理对象,原理是继承。 通过继承目标类,创建子类,子类就是...

    springAOP之代理模式.docx

    springAOP指的是在spring中的AOP,什么是AOP,相对于java中的面向对象(oop),在面向对象中一些...而AOP指的是面向切面编程,定义一个切面,用切面去切相应的方法,就可以织入相关的逻辑。面向切面编程使用代理模式

    Spring 学习笔记心得(九)AOP面向切面编程

    首先我们应该想想为什么要使用aop面向切面编程?面向切面的底层实现是什么?小编在这里举个例子吧 小编首先给出Spring全家桶,方便大家下载使用—->Spring全家桶 1.自定义代理对象代理类以及实现类 1.1 定义接口...

    Python的装饰器模式与面向切面编程详解

    装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码...

    Android切面编程入门讲解

    先说熟悉的面向对象编程 OOP,通常都是用各种对象/模块来负责具体的功能,互相之间尽量不耦合。 切面编程AOP(aspect-priented programming)是为了解决OOP中耦合无法解除的问题而产生的。 打个比方现在项目中有负责...

    aspectjs:aspectjs切面编程

    AOP(Aspect Oriented Programming)面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程(OOP),AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向对象的...

    js坦克大战改进版

    采用js面向对象、面向切面的方式实现的坦克大战游戏。通过jquery来操作dom。 文件描述: init.js --- 初始化的JS,初始化全局对象 Util.js --- 用到的一些公共方法的JS Panel.js --- 面板JS Steel.js --- 障碍物...

Global site tag (gtag.js) - Google Analytics