- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
华南理工大学UML—16.AOP[精品]
软件需求分析与建模- AOP 面向对象的缺点 面向对象编程也并非完美无缺。譬如,采用面向对象的编程方式能够很好地解决软件系统中角色划分的问题,将软件开发中的许多关注点都模块化,并能够把这些关注点的具体实现细节封装在类中。 但是,在系统中还存在另一类关注点,它们并不是某一个模块或者类所特有的,它们可能横跨多个模块或类,例如日志功能就可以被系统中的许多模块引用。面向对象编程在处理此类关注点时所采用的办法就不够理想,从而造成了代码的混乱和分散 例子 通过一个简单的例子说明采用面向对象编程实现横切关注点带来的问题,这里给出一个封装了业务逻辑的类的实现框架: Public Class SomeBusinessClass extends otherBusneissClass{ //核心数据成员 //其它数据成员:日志流,保证数据完整性的标志位等 //重载基类的方法 Public void peformSomeOperation (OperationInformation info){ //安全性验证 //检查传入数据是否满足协议 //锁定对象以保证当其他线程访问时的数据完整性 //检查缓存中是否为最新信息 //记录操作开始执行时间 //执行核心操作 //记录操作完成时间 //给对象解锁 }//一些类似操作 Public void Save (PersistanceStorage ps){} } 在上面的代码中,存在三个问题: 第一,其它数据成员不是这个类的核心关注点; 第二,performSomeOperation()方法的实现做了许多核心操作之外的事,它要处理日志、验证、线程安全、协议验证和缓存管理等一些外围操作,而且这些外围操作同样也会应用于其他类; 第三,不清楚Save的持久化操作是否构成这个类的核心操作。 上述三个问题,归根到底是由于面向对象编程未能将系统中被多个模块所共同享用的需求很好的模块化而引起的。 AOP 为了解决横切关注点的模块化实现,一种新的编程规范-面向方面编程(Aspect Oriented Programming, AOP)应运而生。 面向方面编程(AOP)是由施乐公司帕洛阿尔托研究中心(XeroX PARC)的首席科学家、大不列颠哥伦比亚大学教授Gregor Kiczales等人在1997年的欧洲面向对象编程大会(EcooP97)上提出的一种编程范式,它从编程方法学的角度对横切关注点问题进行了有效的解决,是一种新兴的编程技术。 举例:假设有在一个应用系统中,有一个共享的数据必须被并发同时访问,首先,将这个数据封装在数据对象中,称为Data Class,同时,将有多个访问类,专门用于在同一时刻访问这同一个数据对象。 为了完成上述并发访问同一资源的功能,需要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就立即解锁unLocked,再供其它访问类访问。 abstract class Worker{ abstract void locked(); abstract void accessDataObject(); abstract void unlocked(); } 缺点: accessDataObject()方法需要有“锁”状态之类的相关代码。 Java只提供了单继承,因此具体访问类只能继承这个父类,如果具体访问类还要继承其它父类,比如另外一个如Worker的父类,将无法方便实现。 重用被打折扣,具体访问类因为也包含“锁”状态之类的相关代码,只能被重用在相关有“锁”的场合,重用范围很窄。 仔细研究这个应用的“锁”,它其实有下列特性: “锁”功能不是具体访问类的首要或主要功能,访问类主要功能是访问数据对象,例如读取数据或更改动作。 “锁”行为其实是和具体访问类的主要功能可以独立、区分开来的。 “锁”功能其实是这个系统的一个纵向切面,涉及许多类、许多类的方法。如下图: AOP是什么? 将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。 AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。 AOP是什么? AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。 AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 由于传统的解决系统横切关注点的方案未能从根本上模块化横切关注点,导致横切需求所实现的代码分散在系统的核心模块代码中,造成了系统代码的混乱和分散,使系统的维护和扩展变得困难
文档评论(0)