`
canonical
  • 浏览: 367225 次
  • 性别: 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  
我好像更迷茫了。、、、

相关推荐

    面向切面编程

    面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高模块化程度,通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,使得代码更加清晰、易于维护。面向切面编程的核心...

    面向切面 aop

    面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将系统中的关注点分离,使得代码更加模块化,易于维护和扩展。在传统的面向对象编程(OOP)中,业务逻辑往往与日志、事务管理、权限控制等横...

    详解面向切面编程

    面向切面编程(Aspect Oriented Programming,AOP)是一种编程范式,旨在将关注点分离,使得系统中的各个部分能够更专注于自己的核心职责,而将横切关注点(如日志、事务管理、安全检查等)抽取出来独立处理。...

    面向切面例子

    面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将系统中的关注点分离,使得代码更加模块化,便于维护和扩展。在Java世界中,Spring框架提供了强大的AOP支持。本示例将详细介绍如何使用AOP...

    aop 面向切面编程 demo

    面向切面编程(AOP)是一种编程范式,它旨在将关注点分离,使得系统中的核心业务逻辑与系统服务(如日志、事务管理、权限控制等)可以解耦。在Android开发中,AOP的应用可以帮助我们更好地组织代码,提高可维护性和...

    面向切面编程的介绍有优点

    面向切面编程(Aspect-Oriented Programming,简称 AOP)是一种编程范式,它通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,并将其封装为独立的组件,来降低软件系统的耦合度。AOP 的核心思想是...

    面向切面编程aop简介

    Spring AOP 是一种面向切面的编程实现,它是Spring框架的核心功能之一,用来解决传统面向对象编程(OOP)中难以管理的横切关注点问题。在Spring中,AOP主要通过代理机制实现,允许开发者将关注点分离,将通用的辅助...

    java学习 面向对象

    根据给定文件的信息,我们可以提炼出以下几个关键知识点: ### 1. 面向对象编程(OOP)概览 ...对于软件开发者来说,深入理解面向对象编程和面向切面编程的原理及其应用,对于构建高质量、易维护的软件系统至关重要。

    面向切面编程事例

    面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,旨在解决软件开发中的横切关注点,如日志记录、事务管理、权限检查等,将这些分散的代码集中管理,提高代码的可读性和可维护性。AOP在传统OOP的...

    面向切面设计AOP

    面向切面设计(Aspect-Oriented Programming,AOP)是一种编程范式,旨在解决软件开发中的横切关注点,即那些影响多个类或模块的功能,如日志、事务管理、安全控制等。AOP的核心思想是将这些分散的、与核心业务逻辑...

    Java面向对象应用程序开发

    综上所述,Java面向对象应用程序开发涵盖了从语言基础、面向对象编程原理到实际应用开发的全过程。掌握这些知识,将使开发者能够创建高效、可靠且易于维护的Java应用程序。通过深入学习和实践,开发者可以不断提升...

    Spring AOP面向切面三种实现

    在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...

    Spring面向切面编程示例代码

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种模块化和声明式的方式来处理系统中的横切关注点,如日志、事务管理、安全检查等。本示例代码主要展示了如何在Spring框架...

    Spring面向切面编程AOP

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...

    AOP面向切面编程总结

    AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的面向对象程序设计中,通常会将应用划分为不同的...

    面向对象技术思想

    此外,面向对象思想还与其他编程范式,如函数式编程和面向切面编程相结合,形成混合编程风格,以应对更多样化的开发需求。 总结来说,面向对象技术思想是软件开发中的重要理论基础,它通过封装、继承、多态等机制,...

    Spring-aop面向切面编程实例

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种优雅的方式来处理系统的横切关注点,如日志、事务管理、性能监控和权限控制等。在Spring中,AOP主要通过代理模式实现,...

    《面向对象编程与设计(Java)》课后作业及参考解答.pdf

    Struts2用于处理Web应用的表现层,Spring提供了全面的架构支持,包括依赖注入、AOP(面向切面编程)和数据访问,而Hibernate则是一个持久层框架,简化了数据库操作。 Java中的多态性是其重要特性之一。静态多态性在...

    JAVA面向对象编程(孙卫琴)08.pdf

    面向对象编程是一种开发思想,除此之外,还包括面向切面编程(AOP)、函数式编程(FP)等其他思想。 6. 从示例中体会面向对象开发思想:孙卫琴老师的书中可能会包含大量的实例和练习,以帮助读者通过实际操作来理解...

    AOP面向切面详解

    面向切面编程(AOP)是Spring框架中的一个重要特性,它允许程序员定义“切面”,这些切面可以插入到应用程序的多个点,以实现关注点的分离。在传统的面向对象编程中,我们通常将业务逻辑与日志记录、事务管理等横切...

Global site tag (gtag.js) - Google Analytics