以下是最近一则"女婿开电梯门导致岳父惨死"的新闻,可惜生命的同时,也引发了一系列联想。
不少人不了解或者了解但经常下意识忽略:电梯的门和轿厢是分离的部件。部件之间的协作如果有失误,系统就会出问题。电梯可以看作是上下移动的轨道车辆,但比轨道车辆更危险的是,没有地铁车厢时不小心掉入地铁轨道,赶紧爬上来就行,没有轿厢时掉入电梯井道,多半是死翘翘了。
电梯问题是软件建模中的经典问题,许多书籍和论文都喜欢以电梯为例来阐述自己的观点和方法。
(1)《实用面向对象软件工程教程》,作者:Edward Yourdon、Carl A. Argila,1996
(本图片来自孔夫子旧书网)
本书英文名是“Case Studies in Object-Oriented Analysis and Design”,应译为“面向对象分析设计案例研究”。内容就是两个案例:电梯调度系统和杂志订阅系统。这本书和杨芙清、邵维忠的《面向对象的系统分析》(1998)是我最早的面向对象建模读物了,看了很多很多遍。至今,《实用面向对象软件工程教程》还列在《软件方法》的推荐阅读(http://www.umlchina.com/book/softmeth_ref.htm)里。
200*年的时候,可能是觉得没必要再看了,就把书送给了某个学生。过了一阵又想,没有镇山之宝可不行啊,可是这老书到哪去再弄一本呢?有一次在上海莲花路王海鹏家做客,看到他书架上有,就厚着脸皮向他要来了。2012年买了iPad,下载了网上的扫描版,然后连王海鹏这本也送人了。
认真阅读此书,再好好看看现在的各种“领域驱动设计”伪创新——你会感觉,哦,原来以前的软件开发就是“领域驱动的”,而且是驱动得不行不行的。现在嘴上喊“领域驱动设计”,结果基本的领域建模技能不会,也懒得学,喊完口号就觉得心满意足,以为问题解决了。
(2)《面向对象与传统软件工程 原书第8版》,作者:Stephen R.Schach,2010
原书名“Object-Oriented and Classical Software Engineering [8 ed.]”,中文书我没有,只好截个英文书的内页。这本书介绍了各种流派的方法,然后介绍FSM、Petri Net、Z怎么用在电梯上,并给出了文献引用。
(3)Rational Rhapsody附带的的电梯案例
这是一个可以运行的例子。安装Rhapsody后,在Samples文件夹的C++案例里面找。可以自己到IBM网站(https://www.ibm.com/developerworks/downloads/r/rhapsodydeveloper/)下载Rational Rhapsody试用。
可能是因为看这些看多了,我经常告诫家里的老人和小孩,等电梯时不要靠门太近,门开后看清楚里面不是空的再进去。