flyisland
来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=152245 存档链接: https://web.archive.org/web/20041027221354id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=152245
flyisland 空中的一小块陆地 <<<讨厌的蚊子 | 首页 | 懒懒的五一长假>>> 2004-04-24 23:13 在学习AOP的过程中,面临这样一个问题:AOP究竟带来了什么?在思考的过程中,自己隐隐约约有了一些想法,而在看到Booch的 这一段话 后,我得出自己的结论:技术的发展都可以看成是“建模语言”的发展,建模语言的进步就是提高我们对复杂系统的建模能力。 Booch:我对OO编程的目标从来就不是复用。相反,对我来说,对象提供了一种处理复杂性的方式。这个问题可以追溯到亚里士多德:您把这个世界视为过程还是对象?在OO兴起运动之前,编程以过程为中心--例如结构化设计方法。然而,系统已经到达了超越其处理能力的复杂性极点。 有了对象,我们能够通过提升抽象级别来构建更大的、更复杂的系统 --我认为,这才是面向对象编程运动的真正胜利。 当我们基于一种语言来设计系统,可以看作是用这种语言对系统进行建模,总会遇到很多仅仅在语言级别无法解决的问题,于是开发者就会建立自己的方法库(Library)或者框架(Framework)。这方面MFC就是一个很典型的例子,当时C++语言没有提供诸如RTTI、Persistence等特性,但是开发者可以通过MFC得到这些特性(候捷《深入浅出MFC》第三章“MFC六大关键技术之仿真”详细说明了其实现方法)。 但是基于框架对存在一些较大的不足,开发者可能会担心框架锁定,而且需要遵循一些额外的规则(例如MFC中的宏);更重要的是在交流方面有很大的困难。当一个MFC开发者向另一个OWL开发者提到“Persistence”也许会很困难,因为OWL可能用的是另外一种叫法(举例子而已,我对OWL很不熟悉)。因为 标准 的“建模语言”不存在这个概念,所以尽管我们能够实现相关的技术,但是在进行描述的时候仍可能存在很大的问题。 《设计模式》在最后一章“结论”中提到设计模式带给我们的第一个影响就是“一套通用的设计词汇”,我的看法这就是丰富了我们的“建模语言”。有了设计模式后,不仅仅总结了一些好的经验,更重要的是增强了我们描述复杂系统的能力。例如在现在的Web开发中,当你提到“这部分我们采用MVC模式来实现”的时候,是如此轻易地表达了一个复杂的实现;假如不存在“MVC模式”的说法,那么相同的内容的表达将困难很多。 一个更好的例子就是Java语言,它在语言级别提供了很多特性,包括RTTI(instance of), Persistence(java.io.Serializable), Dynamic Creation(java.lang.Class.forName()/newInstance())等等。这些特性在其他语言中也能做到(通过框架实现),也许并不能说Java比其他语言强多少,Java能够开发的系统别的语言也能够实现。但是在语言级别提供的特性,也就等于是扩充了我们的“建模语言”,在Java的世界中,描述一个复杂系统会更加容易。 这种“建模语言”的发展,也许在初期不易体会到其进步,但是潜移默化下我们“自然而然”地提高了描述/设计复杂系统的能力。 回到AOP上面来,也许在了解AOP之后我们会觉得它的原理很简单,因为解决横切问题的方法以前也是存在的。但是当AOP进入我们的“建模语言”之后,也就是存在非常通用、成熟的框架实现或者干脆加入Java语言,许多曾经困扰我们的问题(例如AOP的御用例子――日志和授权),就会在你说到“这部分采用AOP来实现”而烟消云散。 所以当出现一个新名词时,不必过于紧张,也许它所表达的内容根本就是你已经实现过的;但也不要鄙视它,说“其实是起了个新名字来唬人”,也许一个统一的名字背后就是一次革新。 flyisland @ 2004-04-24 23:13 返回页首 | 评论 | 引用(0) | 编辑 评论 发表评论 最新文章 发现自己患上了“资料整理”强迫症 大家有什么问题? 国庆游流水记――三奥行 Google Desktop Search 中秋快乐! 工作流更改 工作流再思考 复用 Attack On The Queen 《工作流现状》笔记 (署名-非派生作品-非商业用途) Copyright 2004 Island Chen Some rights reserved.