AOP----面向切面编程 Python

AOP----OOP的延续

AOP----Aspect Oriented Programming,面向切面编程,这是继OPP之后一个新的编程思想,AOP是OOP的一种延续。
面向过程编程到面向对象编程经历了漫长的过程,当面向对象编程的思想逐渐主宰着软件世界的时候,当每个软件设计师都被要求掌握如何将需求功能封装成一个个类,并且在类中定义它们自己的数据成员,行为方法以及类中数据成员与方法的复杂关系与类与类之间的继承等关系的时候,AOP,面向切面编程,作为OOP的一种延续,给我们提供了一种新的想法,新的思想和新的模式。
面向对象编程可以说是一种纵向划分的编程想法,将需求功能划分成不同的,并且相互独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系,而面向切面编程就是将通用的功能从不相关的类中提取分离出来,当需要使用这个功能的时候,再将其赋予类,使多个类共享一个行为方法,在需要修改这个功能的时候,只需要修改这个功能,而不必将使用了这一行为的所用类都进行修改。简单来说,面向对象编程是纵向划分,就像一个业务公司,一个公司分成的很多个部门,每个部门都完成着自己的任务,这个业务公司就是一个需求功能,而每一个部门就相当于一个个封装好的类,各个部门相互独立,有各自的任务,行为。为完成一个需求,公司将调度一个个相关部门,就像编程中使用一个个封装好的类一样,最后都将完成一个目标。而AOP为了更加简化代码,防止代码侵入,降低代码耦合,将多个类都可能使用的具有相同功能的公共行为提取出来,多个类可以共同使用这个公共行为,就像一个公司每个部门都可能需要打印文件,打印文件就需要打印机,如果每个部门都购买打印机,无疑会造成严重的浪费,AOP的思想恰恰解决了这一问题,将购买的打印机设为公共的,每一个部门需要的时候,随时都可以使用。
OOP主要用于为同一对象层次的公用行为建模。它的缺点是将公共行为应用于多个无关的对象模型之间。而AOP刚好弥补了这一缺点。AOP思想的主要功能是日志记录,性能统计,安全控制,事务处理,异常处理等,目的是将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

Python中AOP的体现

Python 中有一个特殊的机制,Decorate----装饰器,而装饰器就充分体现了AOP的思想:

import time
#性能测试的模拟
def decorate(f):
    def wrapper(*args, **kw):
        startTime = time.time()
        time.sleep(0.2)    #任务睡眠0.2秒,使运行时间可以体现出来
        f(*args, **kw )    #返回调用装饰器的whilePrint
        stopTime = time.time()
        result = stopTime - startTime
        print(result)
    return wrapper

@decorate     #声明whilePrint()将调用装饰器
def whilePrint():
    for i in range(100000):
        pass
    else:
        print('I am whilePrint!')
    pass

@decorate
def add(a,b):
    print(a+b)
    pass

whilePrint()
add(1,2)

装饰器就像一件衣服,函数穿上这件衣服后,将在装饰器下运行,好处在于装饰器可以重复调用,当要测试另一个函数add()的运行时间时,可以让这个函数用同样的方法调用这个装饰器,达到相同的功能,大大增强了代码的复用性。Python 中的可变长参数也增强了装饰器的通用性,使AOP的思想更加充分的体现!
若没有AOP的思想,不使用装饰器,要计算whilePrint(),add()两个函数的运行时间,代码将可能变得冗余:

def whilePrint():
    startTime = time.time()
    time.sleep(0.2)    #任务睡眠0.2秒,使运行时间可以体现出来
    for i in range(100000):
        pass
    else:
        print('I am whilePrint!')
	stopTime = time.time()
    result = stopTime - startTime
    print(result)
    pass

def add(a,b):
    startTime = time.time()
    time.sleep(0.2)
    print(a+b)
    stopTime = time.time()
    result = stopTime - startTime
    print(result)
    pass

whilePrint()
add(1,2)

代码的耦合度变高,为实现相同的功能,两个函数都使用了完全相同的代码,当要修改这个功能时,我们将以此修改两个函数,若使用装饰器,我们就仅仅只需要修改装饰器就好,这就是AOP思想的优势!

你可能感兴趣的:(编程思想,算法,AOP思想,Python,面向切面编程)