time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > C\C++\VC > C语言 > 例程实作----庖丁解羊(上)

例程实作----庖丁解羊(上)

时间:2009-09-20 23:31 点击:557次 字体:[ ]




    作者:HolyFire

    在《庖丁解羊----划分》我们曾经将一只可爱的小羊拆成了零件,不知道是否还能否记得那道全羊谱。呵呵,说得口水都要流下来了。这里呢,没有美味可口的羊肉,只有我在给各位讲如何将我们学习的方法应用到编程中来。

    首先呢我们要把结构看清楚,也就是下面我东拼西凑起来的图形,你们都看到了,我的ASCII艺术还差的远呢,呵呵,不过还能看明白。

    山羊

    ┏━━━━━━━━━━━┳━━━┻━━━━━━━━━┳━━━━━━┓

    脑袋                    躯体                        尾部          四肢

    ┏━━╋━━┳━━┓   ┏━┳━╋━┳━━┳━━┓    ┏━━╋━━┓   ┏━┻━┓

    骨架  胡子  五官   绒毛  胸  腹  背 内脏绒毛  骨架  尾巴  绒毛  骨架  前肢    后肢

      ┏━━┳┻━┳━━┓    ┏━┳━┳┻┳━┳━┳━┓            ┏━━╋━━┳┛

    耳朵  眼睛  鼻子  嘴巴   心  脾  肝  肺  胃  肠  肾            脚  绒毛  骨架

    结构图

    这样一来,我们心里面就不是一块一块零碎的羊杂烩了,而是一部分一部分串在一起的整体。我们从底部开始向上观察,你会发现这是一个重组的过程。反之是一个分解过程。

    而我们又将一些最小的单元归结为{轮廓,颜色},这是外表上能感知到的信息。

    通过这些信息,我们发现自底向上解决这个问题好一些,人们总是乐意从简单容易的地方入手,这也是我一开始要做划分的原因。

    胡子{轮廓 , 颜色}  绒毛{轮廓 , 颜色}  骨架{轮廓 , 颜色}

    胸  {轮廓 ,颜色}  腹  {轮廓 , 颜色}  背  {轮廓 , 颜色}

    眼睛{轮廓 , 颜色}  鼻子{轮廓 , 颜色}  嘴巴{轮廓 , 颜色}

    心  {轮廓 ,颜色}  脾  {轮廓 , 颜色}  肝  {轮廓 , 颜色}

    肠  {轮廓 ,颜色}  肾  {轮廓 , 颜色}  脚  {轮廓 , 颜色}

    尾巴{轮廓 , 颜色}  耳朵{轮廓 , 颜色}  肺  {轮廓 , 颜色}

    胃  {轮廓 ,颜色}

    可以看出这些单位的组成都是一样的,我们可以将它统称为羊的部分。

    部分{轮廓,颜色}

    绒毛,骨架,胸,腹,背,眼睛,鼻子,胡子,嘴巴,心,脾,肝,肠,肾,脚,尾巴,耳朵,肺,胃{{部分}}

    前肢{脚,绒毛,骨架}

    后肢{脚,绒毛,骨架}

    前肢与后肢也有着一样的结构哦

    肢体{脚,绒毛,骨架}

    前肢,后肢{肢体}

    四肢{前肢,后肢}

    内脏{心,脾,肝,肺,胃,肠,肾}

    五官{耳朵,眼睛,鼻子,嘴巴}

    尾部{尾巴,绒毛,骨架}

    躯体{胸,腹,背,内脏,绒毛,骨架}

    脑袋{五官,胡子,绒毛,骨架}

    山羊{脑袋,躯体,四肢,尾部}

    其实,这些有各个部分组合起来的整体,如:前肢,后肢,躯体等等也是羊的一部分。

    肢体{{部分},脚,绒毛,骨架 }

    前肢,后肢{肢体}

    四肢{{部分},前肢,后肢}

    内脏{{部分},心,脾,肝,肺,胃,肠,肾}

    五官{{部分},耳朵,眼睛,鼻子,嘴巴}

    尾部{{部分},尾巴,绒毛,骨架}

    躯体{{部分},胸,腹,背,内脏,绒毛,骨架}

    脑袋{{部分},五官,胡子,绒毛,骨架}

    山羊{{脑袋},躯体,四肢,尾部}

    如果一个完整的整体是一个部分的特例的话,那么山羊也应该是一个部分。

    山羊{  部分,脑袋,躯体,四肢,尾部}

    这样一来,就可以方便的表示结构图的部分--整体的关系了。

    部分{轮廓,颜色}

    绒毛,骨架,胸,腹,背,眼睛,鼻子,嘴巴,心,脾,肝,肠,肾,脚,尾巴,耳朵,肺,胃{{部分}}

    肢体{{部分},脚,绒毛,骨架 }

    前肢,后肢{肢体}

    四肢{{部分},前肢,后肢}

    内脏{{部分},心,脾,肝,肺,胃,肠,肾}

    五官{{部分},耳朵,眼睛,鼻子,嘴巴}

    尾部{{部分},尾巴,绒毛,骨架}

    躯体{{部分},胸,腹,背,内脏,绒毛,骨架}

    脑袋{{部分},五官,胡子,绒毛,骨架}

    山羊{{部分},脑袋,躯体,四肢,尾部}

    那么,现在是开始运用头脑思考的时候了。

    羊的部分可以是一根颤巍巍的胡子,也可以是一个晃来晃去的尾巴,他们有共同的属性:轮廓和颜色,但是由脚,绒毛,骨架组成的肢体也是一个部分,他们有什么共同之处呢,用部分做基类是不是有点牵强呢。其实一个部分轮廓和颜色是什么样的对于我们并不重要,而且封装的原则是不应该让使用者知道内部结构,所以我们只要提供一个方法来描绘这个部分在视觉上的效果就可以了。如何让一个方法可以表现不同的效果呢,switch ? if else ? No!

    我们有更好方法----多态,继承的结构已经有了,缺的就是虚函数了。

    部分{显示=无显示}  如何表现一个未知的物体?无意义,一个纯虚函数正好胜任。

    轮廓{显示}  并非只有羊的部分才是可以体现视觉效果的,而且视觉效果是人与羊的关系,并非羊的一部分。

    绒毛{{部分,显示=显示绒毛},轮廓,颜色}

    骨架{{部分,显示=显示骨架},轮廓,颜色}

    胸  {{部分,显示=显示胸  },轮廓,颜色}

    腹  {{部分,显示=显示腹  },轮廓,颜色}

    背  {{部分,显示=显示背  },轮廓,颜色}

    眼睛{{部分,显示=显示眼睛},轮廓,颜色}

    鼻子{{部分,显示=显示鼻子},轮廓,颜色}

    嘴巴{{部分,显示=显示嘴巴},轮廓,颜色}

    胡子{{部分,显示=显示胡子},轮廓,颜色}

    心  {{部分,显示=显示心  },轮廓,颜色}

    脾  {{部分,显示=显示脾  },轮廓,颜色}

    肝  {{部分,显示=显示肝  },轮廓,颜色}

    肠  {{部分,显示=显示肠  },轮廓,颜色}

 



本文地址 : http://www.fengfly.com/plus/view-77275-1.html
标签: 例程实作
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:
本栏分类