抽象之美(载录)

OO直接翻译过来就是“面向对象”,它作为一种编程思想可以说是划时代的进化。虽说可能不是传说中的“银弹”(解决软件太复杂的万能灵丹),但是却能使挣扎在“焦油坑”中,那些绝望而无助的受难者猛然间看到希望。写《人月神话》的时候OO 还没有出来,现在作者很可能对于这一项技术性的变革投以赞赏的目光。
有 人说,编程是门艺术。而我认为,更重要的思想认识是——软件工程是门哲学。事实上,面向对象最重要的思想我认为就是来源于哲学思想。具体来说,就是——抽 象化。这里我直接把百度百科里面关于哲学里的抽象引述一遍——“抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细 节,不考虑其他因素。 ”通过抽象化,我们的软件系统就可以抓住事物的共性,从而抓住事物的本质。由于诸多因素,导致的结果是——软件需求在不断变化。而事物本质变化却不会像需 求变化那样大。这样,应付需求的变化,我们只需要在原来抽象化的软件模型的基础上做局部修改。举个例子:我们制造出汽车,放在普通公路上,我们的需求是安 全、便捷的行驶,放在赛道上则是需要尽可能跑得快。两者需求大不同,却不需要我们重复创造两个汽车类,而是只要在汽车类的基础上做局部的修改。从这个方面 来看,我认为,可以把“面向对象”理解为“面向类”。
另外,通过面向对象的方法建立的软件模型也符合人类认识事物的习惯,便于理解。这一点,对 于 一个软件团队来说,是高效沟通的有力保障,它所带来的益处完全可以提高到战略高度。因为一个清晰明了的设计模型,是团队成员相互沟通的有力保障。这一点, 在《人月神话》书中也花了大量篇幅介绍团队成员如何有效沟通,前辈们甚至用上了微型胶片来减少存档量。如今,一个简单明了的设计模型减少了很多这方面的投 入。
关于“面向对象”的认识,到了这一层,我们似乎可以用平静的心去实现陌生领域中的软件建模,而不是面对复杂多变的需求焦虑又不知所措,就像 “焦油坑”中绝望无助的怪兽,越挣扎下沉的越快,也不会面对当下层出不穷的新技术、新概念产生迷茫、踌躇不前。剩下的问题就是捕获需求,抽象化,寻找其中 的类……而那些设计模式 、持久化等概念便会自上而下的体会到。到那时,我们或许会因为与前辈在思想上产生共鸣而会心一笑。
光说不练假把式,这里拿一个例子来结尾。大学OO 教材有个电梯建模的习题,需求简单明了,就拿这个举例吧。
现 实生活中,坐电梯无非就是涉及到以下一些内容:电梯、人、楼层、信号灯、上、下、开门、关门……软件建模就是一种“思想实践”,这些内容都是在我们脑子 里,并不是要造出实体。所以,可以根据上面获得一些零散的信息,抽象的归纳客观事物的映射。比如,什么是电梯?电梯是能上能下将人送到预定的楼层。好了, 有了这个简单的定义(不一定要求很准确,只要在可容忍的范围就行,而这个范围是系统愿景确定的),我们大致归纳出电梯的属性有:楼层、信号灯、电梯门这 些。这个电梯类具有的行为可以有:上、下、停、开门、关门。这里为什么不把楼层和人单独归纳出一个类来?因为人其实是电梯的使用者,而楼层在坐电梯这个客 观事件中只是一个数字,并没有什么行为。
但是,坐电梯这个事件,光有个电梯似乎还是不行的。因为,还要符合将人送至他想到达的楼层的愿望。这就涉 及到人在哪个楼层,他是上还是下,他要上或者下到几楼。这里我们找不到客观实物来映射到软件模型,不像电梯类是客观现实中存在的实物。那么,这里我们就要 抽象归纳出客观世界中看不见,摸不着的东西来。回到现实中来看,例如电梯在1楼,5楼有人要下,那么电梯就上到5楼,停下来,人进去。电梯根据人的指令, 下到他想到的楼层。如果电梯在1楼上到5楼途中,2楼有人要上,电梯就会在2楼停下来。再如果,2楼的人要去10楼,电梯就不会在上的途中停在5楼,而是 上到10楼后停下来,再下到5楼停下来。这样我们就可以发现——电梯只管上和下,至于在哪里停,则是根据人发出的指令。而这些指令其实就是一串数字,一串 要求电梯在哪里停的数字,而且是随时可能变化的。比如,刚才说的那种情况,停车数字是1(电梯开始停的楼层)、2、10、5、1(5楼要下的楼层)。这 样,我们就可以抽象出一个类,一个客观现实中看不到,摸不着的类——电梯停队列类。这个类属性有最高层、最底层、需要停的楼层,行为有添加需要停的楼层, 移除需要停的楼层。
下面是对应的类图。



从这个例子中可以看出,电梯类很容易找到。但是电梯停队列则是我们对现实世界中的业务流程进行归纳、抽象得出来的。所以,我认为,软件建模的重心,其实是在对业务流程的抽象上。
上 述整个过程符合人们日常惯性思维,现实和模型映射起来很自然。可以将这个过程看成是一个“创建世界”的过程,是一件很愉悦的过程,最起码我是非常喜欢这种 “建造”软件模型的过程,这种抽象抽象再抽象的过程。这个例子需求简单明了,我们很容易就收集到了足够的素材来归纳、抽象。如果是在一个陌生的领域创建软 件模形,抽象素材从哪里来,怎样抽象?我们就要探索需求,而探索需求过程不仅限于 OO ,但是 OO 的思维方式却能更好的和问题域中的专家沟通,更好的理解需求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值