`
ruilin215
  • 浏览: 1142975 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

借火车看设计过程

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

相关推荐

    火车站销售系统

    【火车站销售系统】是一个针对初学者设计的简单项目程序,主要目标是模拟火车站售票过程,帮助学生理解基础的软件开发流程和技术。这个项目对于想要学习编程、了解软件工程的初级开发者来说,是一个很好的实践平台。...

    Android 蓝虫火车票余票查询源码-IT计算机-毕业设计.zip

    本项目是一个基于Android平台的“蓝虫火车票余票查询”应用源码,适用于IT计算机专业的毕业设计学习。通过分析这个源码,学生可以深入理解Android应用开发的基本流程和技术要点,为自己的毕业设计提供参考。 1. **...

    VB+SQL火车站售票管理系统(论文+系统+答辩PPT+需求分析).rar

    通过这个项目,学生可以深入理解和实践软件开发的全过程,包括需求分析、系统设计、编程实现、测试和答辩。 【描述】"计算机专业毕业设计VB相关系统论文设计与实现资源分享"表明这个压缩包包含了整个毕业设计的完整...

    jsp成品网站源码,火车票订票系统

    开发者或学习者可以借此了解整个系统的架构、设计模式和功能实现,甚至对其进行修改和扩展以满足特定需求。 【标签解析】 "jsp"标签明确了该项目的核心技术栈,即JSP。JSP是Java Web应用中的重要组成部分,它允许...

    毕业设计完整版ASP.NET交通信息网上查询系统的设计与实现(源代码+论文+开题报告).zip

    通过这个项目,学习者可以了解到ASP.NET Web应用的开发流程,如何使用.NET Framework进行服务器端编程,以及如何设计和实现一个实用的信息查询系统。同时,阅读论文和开题报告也能提升对项目管理和软件工程的理解。...

    数字电路设计实验(7个实验.ewb格式)

    在电子工程领域,数字电路设计是至关重要的一个部分,它涉及到计算机硬件、嵌入式系统、通信设备等众多领域。本资源"数字电路设计实验(7个实验.ewb格式)"提供了一系列实用的数字电路设计实践,对于学习和理解数字...

    数据库课程设计题目 VC++ MFC

    数据库课程设计是IT教育中的重要环节,旨在让学生运用所学的数据库原理和程序设计技能,开发小型...在实现过程中,学生需要掌握需求分析、系统设计、数据库设计、编程和测试的全过程,以此提升数据库应用开发的能力。

    21.小壁虎借尾巴教案1.doc

    9. 课堂活动:设计有趣的教学环节,如猜谜语导入,观看动画片段,以及采用开火车读、小组接龙等方式复习生字,提高学生参与度,使课堂氛围活跃。 10. 文化启蒙:童谣《比尾巴》的赏析,可以让学生在轻松愉快的氛围...

    《白杨》教学设计说明.doc

    《白杨》这篇课文是一篇借物喻人的抒情散文,主要讲述了在通往新疆的火车上,一位父亲向他的孩子介绍白杨树的故事。通过白杨的形象,作者热情赞扬了边疆建设者们响应祖国召唤,扎根边疆、建设边疆的崇高精神和无私...

    五年级语文下册 第一组 3 白杨教学设计2 新人教版-新人教版小学五年级下册语文教案.doc

    这篇五年级语文下册的第三课《白杨》是一篇借物喻人的精读课文,作者通过描述在通往新疆的火车上,一位父亲和两个孩子对于窗外白杨树的讨论,揭示了白杨树的特性,进而赞美了边疆建设者们无私奉献的精神和远大的志向...

    用户体验地图绘制

    用户体验地图的应用场景非常广泛,无论是在打车软件、火车票预订还是网上订酒店等领域,都可以通过绘制用户体验地图来发现用户在使用过程中遇到的问题,从而优化产品设计。例如,在使用打车软件时,从用户打开应用、...

    三年级语文下册第一单元2燕子主题阅读:燕子飞回来了素材新人教版20200503273

    《燕子飞回来了》这篇主题阅读是针对三年级语文下册第一单元的一篇文章,旨在通过小燕子和妈妈的视角,让孩子们...教师在教学过程中,可以深入挖掘这些知识点,设计相关的教学活动,让孩子们在阅读的乐趣中增长知识。

    人教版一年级语文.pdf

    人教版一年级语文《小壁虎借尾巴》教学设计分析 本教案旨在指导一年级学生学习《小壁虎借尾巴》课文,掌握新字、理解课文内容、提高阅读能力和朗读技巧。 一、教材分析 《小壁虎借尾巴》课文讲述小壁虎向小鱼...

    2013年中考英语 动词专练(无答案)

    例如,"It can't be expensive because it's by a famous designer." 这里的can't表示根据常识进行的否定推测,即“那件T恤不可能很贵,因为它是名牌设计师设计的”。因此,了解并掌握动词的这些用法,对于提高中考...

    部编语文一年级(下册)教(学)案_3.小青蛙.doc

    2. 识字教学:教学过程中强调了识字教学的重要性,采用了图文结合的方式帮助学生认识12个生字,并要求会写7个生字。通过多种识字方法,如比较字形、加偏旁等,教授学生识字技巧。 3. 韵文朗读:朗读是教学的重点,...

    幼儿园新生入园亲子陪读活动方案(大型活动).pdf

    - **信任游戏:借玩具**:让孩子单独跟随教师去大班借玩具,增强对教师的信任,为独立入园做准备。 整个活动通过丰富的游戏和互动,让孩子在玩耍中学习和成长,同时让家长看到孩子的进步,从而增强对幼儿园的信任...

    一年级语文下册 尾巴的功能1教案 语文A版 教案.doc

    同时,教学过程设计了一系列活动,如小组合作学习生字、开火车认读生字、分角色朗读和表演等,以增强学生的参与度和兴趣。教师借助生字卡片、动物头饰和课件等教学资源,使课堂更加生动有趣。 在教学过程中,教师...

    PB18051113-林成渊-第二次作业1

    以上是任务管理模块的详细工作流程,涵盖了用户交互与后台处理的全过程,确保了安卓灰色应用检测系统的高效运行。通过这样的设计,系统能够有效地帮助用户监控和管理应用的检测任务,同时提供及时的反馈和报告。

    二年级数学下册六两三位数的加法和减法7三位数减两三位数的隔位退位减法课件苏教版20200306454

    例如,在问题“600 - 516”的过程中,百位上的6不足以减去十位上的1,因此我们需要从千位借一,使得百位变成16,然后进行减法操作,最终得到结果84。 接着,资料中通过具体实例展示了如何运用这个概念解决实际问题...

Global site tag (gtag.js) - Google Analytics