记录督促学习记录20

二十一章

本章叫做面向方面的软件工程(面向方面?),这一章主要是介绍面向方面的软件开发,面向方面的软件开发将关注点分散到独立系统模块。

需要知道1为什么关注点的分离对软件开发是个很好的指导原则。
2介绍方面和面向方面软件开发背后的基本思想
3理解面向方面的方法怎样在需求工程、软件设计和编程中应用
4了解面向方面的系统测试中的困难。

在绝大多数大系统中,需求和程序组件之间的关系是复杂的,单个需求可能是通过很多组件实现的,每个组件可能包含几个需求的要素,意味着,在实践中,实现对需求的变更可能需要了解和改变若干组件。

面向方面的软件工程AOSE,是一种旨在解决这个问题并使程序易于维护和复用的软件开发方法,AOSE基于一种称为方面的抽象,方面实现那些可能在程序中若干个不同地方用到的系统功能。

方面的一个最主要的特性是它们包含一个定义,规定应该在程序的什么地方包括它们,同时也包含实现横切关注点的代码。
本质上讲,方面通过编制到核心程序中来创建一个新的增强的系统。

面向方面方法的最主要的好处是它支持关注点的分离,相比于将不同的关注点堆积在同一个逻辑抽象中,将关注点分离到独立的要素中是一种好的软件设计实践。

比如有一个需求,需要正在数据库中任何个人详细资料发生改变之前对用户进行身份认证,我们可以通过一个声明在方面中描述这项需求:应该在每个队个人详细资料更新的方法调用之前将 认证代码包含进去,这样我们就可以扩展认证需求到所有的数据更新,这可以通过修改方面很容易地实现,我们无需在整个系统中搜索来寻找所有发生这些方法调用的地方,因此我们可以减少犯错误的机会和意外地把安全脆弱性带入程序的可能。

面向方面的研究和开发主要集中于面向方面的编程,面向方面的编程语言,它们是对面向对象编程语言的扩展使之包含了方面的特征,一些公司已经开始在它们的软件生产过程中使用面向方面的编程,但是,横切关注点在软件开发的其他阶段同样是存在问题的,研究人员正在研究怎样在系统需求工程和系统设计中利用面向反面技术,如何测试和检验面向方面的程序。

这里的AOSE是因为它的核心内容是分离关注点,是思考和构建软件系统的重要方法。

关注一些AOSE的概念,并讨论在软件开发过程的不同阶段使用面向方面的方法的优势和劣势,不会具体讨论特定的方法和面向方面的编程语言。

关注点分离是软件设计和实现中的一个重要原则,意味 着你应该这样组织你的软件,使得程序中的每个元素(类、方法、过程等)做且制作一件事。这样就能够集中注意力在一个元素上而无需考虑程序中的其他元素,可以通过了解其关注点来了解程序的每个部分,而无需了解其他元素。

分离关注点的重要性在计算机科学历史的很早就被认识到。随着程序构造机制,例如程序和对象类,也设计用来实现分离关注点提供更好的机制,但是,所有这些机制处理某些类型关注点上都存在问题,这种关注点横贯其他关注点,我们称之为横切关注点,这种横切关注点不能使用例如对象或者函数等构造机制被局部化,于是人们发明了方面的概念来帮助管理这类关注点。

绝大多数定义关注点的尝试是存在问题的,因为它们试图将关注点与程序相关联。

如果把关注点看做是组织需求的一种方式,我们可以看出为什么将关注点分离实现在不同的元素中的方法是个很好的实践,如果需求改变了,程序的必须改变的部分是明显的。

有几个信息持有者关注点:

1功能性关注点,它是将包含在系统中的与特殊功能相关的关注点。
2服务质量关注点,它是与系统的非功能性行为相关的关注点。
3政策关注点,这是与管理系统使用的总的政策相关的关注点
4系统关注点
5机构关注点。
系统的核心关注点事那些关系到它的主要目标的功能性关注点。

书中下面是关于不同信息持有者对于关注点不同地方的相应举例说明。

分散现象发生在对以单纯关注点的实现分散在多个程序组件中的时候,。在需求实现与第二类功能性关注点或政策性关注点有关联的时候容易发生此类现象。

当初始系统需求发生改变时分散和混乱的问题就出现。

下面一节是介绍:方面、连接点和切入点。

对于发生安全问题的时候,会出现两种新方法进行补救。但是这两种方法都不是解决问题的非常好的方法。
1第一种方法导致了一个混乱的实现,逻辑上讲,更新数据库,认证实现更新的人以及做更新的详细信息的日志是独立的、不相关的关注点。
2,第二种方法导致了一个分散的实现,如果在更新方法调用之前明确包含认证的调用,并在更新方法调用后显式地包含日志方法调用,那么代码就会包含在系统的许多不同的地方。

认证和日志横贯系统的核心关注点,并可能不得不包含在多个不同的地方。在面向方面的系统中,我们可以把这些横切关注点表达为独立的方面。
方面完全不同于其他的程序抽象,因为方面本身包含一个描述,说明它应该在哪里执行,其他的抽象,在抽象的定义和它使用之间有一个清晰的分离,我们不能通过检查一个方法来得知它会在哪里被调用。

下面又是一个举例、

定义和使用切入点,即制定代码应该在哪里执行,是方面的一个显著特征,但是要理解切入点的含义,还需要理解连接点思想,连接点是在程序执行期间发生的一个时间,所以它可以是一个方法调用,可以是变量初始化,或者是更新一个域。

连接点模型的一部分时间包括:
1调用事件,调用一个方法或一个构造函数
2执行事件,执行一个方法或一个构造函数,
3初始化时间,类或对象的初始化。
4数据事件,对域的访问或更新、
5异常事件,异常的处理。

将“建议”包含在切入点中所定义的连接点上是方面编织器的责任,方面编织器是编译器的扩展,它处理构成系统的方面、对象类和方法的定义。

有三种方法来编制方面
1源代码预处理
2连接事编制
3执行事动态编制

方面编制中最光法使用的方法是连接时编制,因为它孕育方面高效实现而无大的运行时开销,动态编制是最灵活的方法,但会在程序执行事导致严重的性能损失。源代码预处理目前已经很少使用。

采用方面的软件工程、

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值