作者: Thomas Zhang
前言
清楚地记得,第一次看《The Matrix》这部电影是在小学六年级,在一个英语班上,同小伙伴们一起,围着一个20英寸的小电视,一知半解地看完了一部完全没有中文字幕的英文版本。虽然那时的自己,对这个繁复庞杂的世界架构必然一知半解,但纵然如此,惊喜与震撼已经随着剧终Neo手中听筒的落地,而深埋内心。我开始像Mopheus一样的问自己。What is real? How to define real? 我开始问自己,这个世界是否真的有可能是一个Matrix中的映像,周遭的生活,是否真的有可能是镜花水月,空中楼台。转眼十几年过去了。这十几年中,《The Matrix》三部曲一直珍藏在我的硬盘中,时不时翻出来重新品味,每次又都有不一样的体验。[more…]
十年后的今天,我已经从一个懵懂的少年,成为一个软件工程专业的学生。不得不说,直到接触了软件,接触了计算机体系结构,接触了面向对象的设计思想,对于这部电影,我才有了一个更深刻,更不一样的理解和体会。而经过这一整个学期对面向对象技术的实papapa践与深入了解,对这部经典的理解,似乎又深入了许多。
对于这三部曲,《The Matrix》是开创性的,如疾风骤雨办将一个残酷的真相——现实劈头盖脸的丢到你面前,只留下目瞪口呆的你独自回味着扑面而来的震撼和冲击;《The Matrix ——Reload》是颠覆性的,将你冥思苦想,以为理解了的世界一把推翻,告诉你,真相,其实远远没有那么简单;《The Matrix —— Revolution》是整个三部曲的高潮与结尾,却更是一个开端,那一夜雨战之后,一切都恢复了原装,但是一切,又都变得不同了起来。这篇文章当然不是描述对电影艺术表现抑或情节内容的感受与分析,但是我们仍然要找一个切入点,一个面向对象世界中,和那个电影中的波澜壮阔的世界能够微妙的联系在一起的点。我选择了,Revolution——革命。
Recolution
在那个雨夜大战之后,Neo和Smith这一对系统中的异常,终于被抹平,Matrix中的世界,似乎又恢复昔日的平静,一切都回到了原点。但,事实真的是这样么?Revolution,革命,究竟又指的是什么呢?
其实事实上,这时候的世界已经发生了本质的变化。还记得《Reload》里面的印度小姑娘Sati么?在从前,一个在系统中本应该被删除的,没有既定目标的冗余程序,现在竟然可以在Architecture眼皮底下自由地玩耍,并且可以完成一项似乎并没有“实用”功能性的代码改写——让夕阳变得美丽——来纪念逝去的人类朋友Neo。这意味着看似恢复原样的Matrix系统其实已经在不经意间完成了一次根本上变化,整个Matrix中,开始允许因为“爱”产生的冗余程序的存在。这是一个近乎根本性的有颠覆意义的改变。
也就是说,Revolution并不仅仅指的是在人类的角度上,Neo通过自我牺牲完成了对Zion的拯救,改变了脱离Matrix的人类宿命一样的被屠杀的命运;在另一个层面上,也指的是在Oracle的指引与Neo的协助之下,整个Matrix系统进行了一次根本性的“革命”。
更确切的对应到软件体系中,我们应该可以说,在电影中Matrix系统进行了一次大规模的系统热升级,在这次升级中,对整个系统的内存回收机制做出了根本上的修改,以使得系统更好的完成承载作为“电池”的人类思维的需求!
在影片中,从Merovingian、Architecture和Oracle的口中,直接间接的,我们可以知道,整个Matrix系统已经先后进行过六次这样的“升级”。这种开发模式,细细想来,与面向对象、敏捷开发中经常应用的迭代式的开发方式,有着异曲同工之处。
但是,一个系统要应用迭代开发方式,那么这个系统一定要满足特定的条件。在敏捷系统中,迭代开发需要满足
1、在项目开发早期需求可能有所变化
2、分析设计人员对应用领域很熟悉
3、高风险项目
4、用户可不同程度地参与整个项目的开发过程
5、使用面向对象的语言或统一建模语言
6、使用CASE工具
7、具有高素质的项目管理者和软件研发团队
其中,面向对象是使用迭代开发方式的必要条件之一。接下来,就来分析一下《The Matrix》世界对应到面向对象方式中的设计。
The Desert of the Real
Mopheus第一次试图向Neo介绍the Matrix的真相时候告诉他,由于历史信息的缺失,对整个世界的构成和来由并不完全清楚,通过推测,才得以窥知这个世界的秘密,他称之为,the desert of the real。可以想见,如果到了一个人工智能发展如此强大的时代,编程语言的类别或许应该一定会超越目前人类的认知和理解。但是从矩阵世界中发生的故事中,我们其实还是可以管中窥豹,发现很多面向对象的蛛丝马迹。下面,就来一一剖析。
在PB Kruchten经典的论文中可以知道,我们可以通过4+1视对面向对象设计的架构进行描述。部署视图显示的是系统的实际部署情况,它是为了便于理解系统在一组处理节点上的物理分布。所以,这里就先从高层次上,与物理世界关系方面,对矩阵世界的部署视图进行尝试性的描述。
上图就是矩阵世界中地球上各个系统的部署视图,可以看出,地表上,机器城维护者作为能源的巨大的分布式电力供应系统,而这个电力系统以人供电,每个人又通过统一的接口连接在Matrix则个虚拟现实系统之中,为系统统一管理、控制。人类反抗组织以地下的Zion为基地,通过庞大的地下管道系统进行反抗机器城的活动,从电池组合Matrix中解救出有意愿脱离Matrix的人类。通过电影中可以得知,上面各个系统之间存在着繁复的交互关系,接下来就用4+1视图中逻辑视图中的类图,来形象的展示各个系统和各个部件之间的关系。
上图可见,Matrix系统由两部分组成,接入系统的人,以及保证系统正常运行的各类程序。Architecture与Oracle均是系统程序的一部分,拥有相对于其他程序高得多的权限,并且拥有与机器城交互的能力。每隔一定时间,系统中不稳定的人群中会由Oracle指引和选择出现The One,The One多重继承了程序和人的属性,帮助Matrix完成每一次的系统更新。
以上就是从The Matrix电影有限的信息中——the desert of real——中推测出来的,关于Matrix面向对象层次上抽象出来的设计描述。满足了这个前提条件,接下来,让我们回归正题,来讨论Matrix中对于“迭代式开发”技术的应用。
宿命的迭代
迭代开发,是面向对象以及目前流行的敏捷开发方式中最常用的一种开发方式。迭代,是快速原型与面向对象技术的结合。在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。下面是迭代开发的流程示意图。
暂且不做说明,同时放上the Matrix中系统升级的时间线如下图。
图中可以很明显的看出,第一个有着完美世界架构的矩阵很快失败了,正如迭代开发中第一个原型,通常都是抛弃原型,是快速搭建起来的,以获取用户需求为目的的原型。通常,在使用过后,由于修改变更的可能性极大,所以通常会被抛弃而重新设计。而接下来的五次矩阵升级,都是同一版本的提升性升级,the One选择了重建Zion,新版本的矩阵仅仅是清楚了之前的Bug数据,便继续运行。但是Neo,第六次的选择,作出了不同的选择,选择相信爱,拯救Trinity和Zion。最终Neo牺牲了自己,挽救了矩阵世界和人类世界。同时,系统终于加入了决定性的变更——类似人类的情感——爱以及全新的内存回收机制。
多么典型的迭代开发流程!
由此可以发现,不论是标准的迭代开发的图示,抑或定义,抑或矩阵的升级流程图,FeedBack都起到了极其重要的作用。而Feedback的来源,正是每一任the One,从Zion,这些排斥现有矩阵的反抗者那里获取的。所以,其实一切的一切,不论是从矩阵中的逃脱、Zion中的自由还是最终Zion的获救,其实都是Machine City,为了更好地设计Matrix系统,进行的宿命办的迭代。
When some see coincidence, I see consequence. When other see chance, I see cost.
其实每次变更,都是一次选择,一次一次机遇,也一定会付出一定的代价。
在迭代中,代价由于快速迭代,所以只会影响这一次迭代的原型。
而同样的优点,在矩阵中,则被计算机所完美的利用。正如Architecture所说的,我们能够承受每一次系统迭代升级的代价,也随时准备承受这样的代价。
机器的精明,确实人类宿命的悲哀。
接口,机遇
那么,再这样完善的系统精巧的设计中,人类是不是真的就没有机会完成复兴呢?其实人类反击的机遇也恰恰蕴含在这近乎完美的设计之中。
在这样一个世界中,Matrix的世界中,人类与机器其实遵循同样的定律生活在一个虚拟的空间中。也就是说,机器和人类的思维,其实共享着同样的接口。面向接口设计的完美实例!这也就意味着,如果信息隐藏做的足够好,那么,既然人无法分辨机器,那么反过来,在Matrix中,自然可以做到让机器无法分辨出人!这不正是人的机遇么~?!
在《The Matrix》的动画版《Animatrix》中,描述了这样一幕,人类反抗组织通过私有Matrix,成功的与机器交流,并“招安了”许多机器作为保护自己的助手。同样的枷锁,蕴含在面向对象中的精灵,原来同样可以加诸机器头上!
结语
Architecture:You play a dangerous game!
Oracle: Change is always dangerous.
Architecture:Just how long, do you think this peace can last.
Oracle: As long as it can.
May so be the software system!