Programming 版 (精华区)

发信人: zhangyan (我跟模电拼了……), 信区: Programming
标  题: what is OOP
发信站: 哈工大紫丁香 (2001年06月01日20:53:36 星期五), 站内信件

回复人:holyfire(因为我手快所以我抢先用了水神这个昵称) (2001-6-1 16:
35:00)  得0分 
昨天在码字,想搞点有意思的东西,可惜写了一半就没有灵感(偶本来就没有灵感
)了,所以没有完成,作为一个改错题吧。

    经过多年的编程,吾发现编程的思想对一个程序员是至关重要的,以前拿到一
个问题,马上就开始考虑如何来一点一点把他用代码来实现,于是啃啊啃啊与愁眉
笼罩千辛万苦下每完成了一点就欣喜若狂,编着编着发现这里不足,那里没考虑到
于是东补补西凑凑,异常蹩脚的完成了一个小程序,当时的感觉就像我完成了全世
界,或许那个时代是我最开心的。
完成了四五个程序的我,开始发现我做了很多重复的劳动,于是乎开始做我的程序
库,编写功能型模块,想到了这些模块只要写一遍就可以受用无穷不禁得意洋洋,
或许那个时代我是聪明。
    当我写了五六千行代码的时候,我发现我写的功能模块已经记不清什么是干什
么的了,而我已经习惯使用别人写的比我好的模块时,我开始迷茫,我做的一切究
竟是为了什么,这时我开始研究别人的代码,开始懂得什么是优化,什么是数据结
构,什么是数学建模,我开始研究应用数学和软件工程,这时我开始使用C++用类
来写程序,或许那个年代我是明智的。
    当我写了四五十个*.h和*.cpp后,开始发现我写的类狗屁不通,一点都组合不
起来,我开始深入学习类以及面向对象,明白了继承和封装,这时的我才开始深深
思考什么是重要的,于是我开始分析问题而不是以上手就开始编代码。或许以前的
我是个白痴^_^。
我足足花了三年多的时间来浪费我的青春做了别人仅需一年的事情(当然着三年中
我积累的经验不可能是一年能做到的,但是对于编程上的修养,我浪费的时间已太
多),如果你们没有意识到这点,或许也会浪费很多时间。
    过场白已说的太多,大家重视的是我这三年牺牲换回来的经验而不是对愚蠢的
人的同情。
    分析能力对一个程序员来说是一个重要的属性,它直接关系到你对事物的理解
能力和组织能力,程序员做的工作就是将一个事物和它的运动(物质和运动,这是
组成世界的要素)分解成数学元素然后重新组织在计算机里重现,所以如何处理事
物是个要点,运动稍后再说。
事物的理解,我们了解一个事物并进行描述的时候,往往是先处理它的一部分,然
后等所有的部分都处理完的时候,具体的事物就重现了,比如给一个不知道山羊的
人介绍山羊,如果你对他说山羊就是山羊,他是无论如何都不会明白的,最后你只
会说你真是个白痴,山羊都不知道,而他说你算老几啊,连山羊都说不清。如果你
说山羊是一种有四只脚的脑袋上有两只角,还有短短的尾巴,那他模模糊糊会有些
形象在脑海里了,如果加上有绒绒的毛,可笑的胡子,咩咩的叫的食草动物,至少
他不会和牛混淆起来,如果你能描述的更详细更好,那他有九成知道山羊是什么样
子了,当他看见山羊的时候就会立刻明白,对于什么都不懂得计算机你不用说明什
么,但是要是别人或者几年以后的你能看明白你的文档,详细的说明是必须的,而
从上面的过程看来,将事物分成小块来处理是个好办法,我们把这个过程叫做划分
,当然划分是可以继续下去,将划分的小块继续划分直到不能划分为止。当然要不
一只山羊划分需要一个对山羊有着全面了解的人,所以划分你的问题的时候要对问
题有全面的了解,看上去这对一个还没有了解这个问题的人是一个矛盾,划分一个
事物有助于了解这个事物而要很好的划分却需要对事物充分的了解,于是我们要有
所改变,要改变的是我们的做法,我们先粗略的了解问题,然后粗略的划分一下,
将划分的模块再粗略的了解一下,然后将它粗略的划分,等到都成为不可划分的小
块时,我们再来组织它,而且之个时候,我们对问题已经有全面的了解了,这时候
我们将小块的重复部分扔掉(一般一定会有重复的部分),然后将这些小块重新将
问题组合起来,想想一下将一只大卸八块的山羊组合起来,哈哈一定是活不过来了
,不过有羊肉吃也不错,如果你很顺利的组合起来了,表示你很好的划分了这个问
题而且了解的很透彻,以后的事将会一帆风顺,你这时脑袋里一定充满了解决这个
问题的方案,已经跃跃欲试了,不要急,聪明的人会仔细的将划分的过程多看几遍
,重组的方法多试几种,这不但对以后和编程有好处,也是更好解决方案的起点。

    现在我们来解剖一只山羊,如果你愿意还可以细分,动物爱好者请回避。

    山羊     -> 脑袋
        -> 躯体
            -> 四肢
        -> 尾部    

    脑袋     -> 五官
        -> 胡子
        -> 绒毛
        -> 骨架
            
    躯体    -> 胸
        -> 腹
        -> 背
        -> 内脏
        -> 绒毛
        -> 骨架
            
    四肢    -> 两只前肢
        -> 两只后肢
            
    尾部    -> 尾巴
        -> 绒毛
        -> 骨架
            
    五官    -> 耳朵
        -> 眼睛
        -> 鼻子
        -> 嘴巴

    内脏    -> 心
        -> 脾
        -> 肝
        -> 肺
        -> 胃
        -> 肠
            
    前肢    -> 脚
        -> 绒毛
        -> 骨架
            
    后肢    -> 脚
        -> 绒毛
        -> 骨架

最后我们得到的是:
    山羊 脑袋 躯体 四肢 尾部 脑袋 五官 胡子 绒毛 骨架 躯体 胸 腹 背 内脏
 绒毛 骨架 四肢 两只前肢 两只后肢 尾部 尾巴 绒毛 骨架 五官 耳朵 眼睛 鼻
子 嘴巴 内脏 心 脾 肝 肺 胃 肠 前肢 脚 绒毛 骨架 后肢 脚 绒毛 骨架

去掉重复的部分:
    山羊 脑袋 躯体 四肢 尾部 五官 胡子 绒毛 骨架 胸 腹 背 内脏 两只前肢
 两只后肢 尾巴 耳朵 眼睛 鼻子 嘴巴 心 脾 肝 肺 胃 肠 脚 脚

最终的不可划分的子模块:
    胡子 绒毛 骨架 胸 腹 背 尾巴 耳朵 眼睛 鼻子 嘴巴 心 脾 肝 肺 胃 肠 


现在我们将它重新组合一下,是不是很简单的就完成了。而且我们需要处理的东西
并不多。现在我们来用数学元素来描述一下

    胡子:    数量不多的多种形状的轮廓,有各种颜色
    绒毛:    非常多的多种形状的轮廓,有各种颜色
    骨架:    多种形状的轮廓,有一种颜色
    胸:    某形状的轮廓,有一种颜色
    腹:    某形状的轮廓,有各种颜色
    背:    某形状的轮廓,有各种颜色
    尾巴:    某形状的轮廓,有各种颜色
    耳朵:    最多两个的某形状的轮廓,有各种颜色
    眼睛:    最多两个的某形状的轮廓,有各种颜色
    鼻子:    最多一个的某形状的轮廓,有各种颜色
    嘴巴:    某形状的轮廓,有各种颜色
    心:    某形状的轮廓,有各一颜色
    脾:    某形状的轮廓,有各一颜色
    肝:    某形状的轮廓,有各一颜色
    肺:    某形状的轮廓,有各一颜色
    胃:    某形状的轮廓,有各一颜色
    肠:    多种形状的轮廓,有一种颜色
    脚:    多种形状的轮廓,有各种颜色
    
现在我们又得出了数量、轮廓和颜色这个三个元素,他们是所有元素都有的共性,
我们找到了组合山羊的最小划分,虽然在科学上这不是正确答案,但粗略的表达一
只山羊这一足够。好,虽然历时不多,我们大脑海里已经解决了这个问题。
 

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 天外飞仙]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.595毫秒