软件代码设计零碎杂想-3

基于现在的计算机架构设计,也基于这个世界的时空规律,现阶段,就我所知,对于一个线程的执行,在cpu中,是一个指令一个指令执行的,也就是说,cpu是按照顺序来读取机器指令,在某时刻,只有一条指令被执行。我还没有发现过在同一个时刻,同一个线程里的多条指令被多个地方同时执行,也没有发现cpu在执行指令的时候,不按照指令顺序,东一条西一条的去乱七八糟的执行。为什么扯这些闲淡?我只想引出高级语言中的3类流程控制结构,无论哪一种流程控制结构,最终在cpu上,都是乖乖的一条指令一条指令的执行,并没有什么面向对象,面向过程的说法。

对于高级语言的程序流程,一般分为3类,顺序,选择,循环。对于顺序和循环,不管是面向过程还是面向对象的设计,都逃脱不了这个东西。而对于选择,正是面向对象设计中多态的用武之地。可以很大胆的说,多态,正是对选择流程的处理法宝。在进行程序设计的时候,一个很有用的规则,就是当程序需要用到if else,switch的时候,可能就需要进行抽象,隔离变化,使用多态了。嗯,为什么使用多态,而不去使用if else,关于这个,我觉得不去展开说了,如果觉得这是个问题,请参考其他相关文章或者书籍。

我早期在进行设计的时候,经常是不知道怎么隔离变化,怎么抽象共同特性。这很正常,设计是水到渠成的事情,而不是抓着脑袋凭空想象出来的。这样进行设计,要么是过度设计,要么是无法设计。那设计是怎么水到渠成?答案是对需求进行分析,对每个用例进行仔细的研究,画顺序图,画流程图,搞清楚每个步骤怎么完成,由谁发起,由谁完成,由谁擦屁股。分析出来每个具体的对象的功能和属性。当知道了软件要做什么,分别需要哪些功能,有哪些分支条件,很自然的,设计就出来了。哪些是共性,哪些可以隔离,不用想,都明摆的放在那里了。

现在的教科书,在谈到多态的时候,举例子的时候,往往很快就把抽象出来的共性的东西一下子拿出来,正方形是shape,长方形是shape,三角形也是shape,所以我们用shape作为父类,定义这些形状都有的共同操作和属性。这样教学,完全是误导,长久的这样进行思考,思维就习惯了从上而下的设计方法,先搞定抽象类,先想好共性,然后再设计子类。我认为这是错误的。进行设计,应该是从下往上,从具象到抽象,得将每一个具体的对象的功能,属性,流程搞清楚了,然后才能进行很好的抽象,发现其共性,隔离其变化。

还是以shape为例进行说明。

shape,形状,到底应该向客户提供哪些哪些功能?你说的清楚吗?反正我是说不清楚。

求面积算不算?求重心算不算?背景色算吗?在DC上画出来算吗?以某种特效显示出来呢?返回构成形状的坐标点list算吗?求与另一个形状是否有交集算不?如果给定每个坐标的运动方向,初始速度,加速度,求某时间后形状的变化算吗?......太多太多问题了。这些应该都算是形状的共性啊,不管是三角形,圆形等等都可以具备的啊,难道就不能抽象到shape里去吗?

如果对上面这个问题还真存在疑惑的,那说明你还真的没有搞明白如何进行设计了。为什么这么说,请听我一一道来。

需要开发一个几何教学软件,供初中生使用。初中生几何教材里,主要学习了平行线,三角形,四边形。需要软件演示他们各自的定理,并能根据定理,给定不同的参数,进行相关计算。

现在,你可以对shape进行抽象出来吗?你觉得该怎么抽象才比较好呢?

为了吸引儿童对于形状的认识,公司需要开发一套图形大战的游戏软件。主要帮助儿童认识圆形,三角形,四边形。游戏需要颜色鲜艳,操作方便。

这里也涉及到了shape,又该如何抽象,如何设计呢?拿教材里的举例,每个shape,都有计算面积的方法,所以shape应该提供area函数。area函数,在这里能用得上么?

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值