科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[韩小明]借火车看设计过程

[韩小明]借火车看设计过程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

从火车的设计入手,完整体会设计的自上而下的过程。从小处入手,体会平常大家不能参与的设计过程。

作者:韩小明 来源:CSDN 2007年10月10日

关键字: 韩小明 火车 设计过程

  • 评论
  • 分享微博
  • 分享邮件
在去野三坡的途中,和Linc谈起火车的架构来,感觉其扩展性特别好。车厢可以载人,可以载媒,可以载货,可以载坦克,可以载飞机,火车头可以有一个,也可以有多个,可以在两头,可以在中间。
回来以此为题,大家一起讨论一下设计。
一直认为,设计如哲学一样,大道同源。其道理一定可以应用到各个领域。因此火车也需要设计,因此软件也需要设计。
那好,我们开始设计吧。
这时候,你想到了什么?火车的扩展性?
是的,至少我们讨论的时候,第一个想到的就是这个。因此我们开始考虑应该提供一个基类,来描述什么样的是车厢,所有满足此条件的车厢就可以挂接到火车上了。
有什么呢?轮子、前后接轨。底盘。还有人提到是不是应该有电源接口。也是有一定道理的。正当我们大声讨论还有哪些特性的时候,Linc终于忍不住要发话了。后来证明,他早就如鲠在喉,不吐不快了!
Linc讲到,我们的设计不要一下子深入到细节。有道理!大凡设计,大概有两种基本方法,自上而下和自下而上。一般在架构的时候,我们都采用自上而下的方法来统揽全局,而到细部设计的时候,我们采用自下而上的方式保证不遗漏细节。
显然,Linc同学的想法已经不是一天了,他迅速地在纸上描述出自己的构想。
考虑火车由什么组成:火车头和N个车厢。于是Linc同学认为,火车的能力和是有各车厢的能力体现的。那么抽象一个此行为的车厢,整个火车都是这个车厢的派生类(呵呵,想法比较大胆啊)。火车车厢再按照功能分类。有动力车厢、载人车厢、载货车厢等等。对于火车来说,你不要关心其组成细节,它有几个火车头?几节车厢?你都不需要知道。只告诉你火车能做甚么。Linc称这就是组合模式(Composite)
后来,我们曾经就什么是组合模式,大大争论了一番。最后发现我原来对组合模式的理解是片面的。这是后话。
设计如果就到这,就不能体现什么是设计了。至少我是这么认为的。我提出了另一个想法(其实我之前没有好好考虑过,但是听了Linc后就有了这些想法,这也许就是集体的力量吧,或者说是:头脑风暴?)。
我们其实还是在考虑火车的结构,不管是细节还是架构!我想设计应该从更高点看问题:火车是什么?火车对“外”提供哪些功能?火车要能走轨道,能进站,出站,能紧急刹车,能倒车掉头,火车能悬浮?火车能充电?等等。
面向对象设计中,最开始都是先要找到对象,然后再看其结构及其完成功能所需要的架构。
经过这些讨论,我们慢慢地对火车有了逐渐清晰的理解。我们的讨论看似比较随意,但稍微留心,其实可以发现我们讨论一个完整的设计的时候的思路。
1、 面向对象分析:找出对象,及外界对对象的要求(功能)
2、 面向对象设计:架构出组织结构,及实现思路
3、 面向接口设计:局部设计、优化。
我们平常最容易一开始陷入的就是第3个,典型的自下而上方式。上面提的这个思路当然不是绝对好,只是可以帮助我们进行理顺思路。有句话说的好,过分关注细节,会让我们因为没考虑到而放弃,而关注高层,会让我们因为考虑了而放弃。
咱们很多人不能够有机会参与完整的项目设计,但是,只要我们把一个小问题详细完整地进行考虑,思路是一样的。多做这方面的讨论,能给我们带来很多意想不到的收获。
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1419706

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章