大话对象

我原先曾经写过一个功能类似的软件,那个时候使用C语言写的,并且Down机现象比较严重, 怎么调都调不好。这回做软设刚好选到了UDP协议设计,我想写TCP协议可能收获更大,所以换了一个题目。另外我这个学期也选了C++程序设计的课,学了一些面向对象编程的知识就像用到实际中来,所以这回在我和另一个组员设计软件框架的过程中,我特意按照OO的思路理清了关系,认真的进行了一次OO式的分析。在不断OO过程之中,我有了许多心得和感悟。

网络上面文件传输的代码很多,远程终端的代码也不少,但是我认真的看了一下他们的代码,虽然软件可用,但是他们代码的结构一般都是十分的凌乱,面向过程的代码看不出过程。面向对象的代码都到处掺杂着过程,看不出对象。

我十分的推崇Donald E. Knuth的观点,编程不仅仅是技术,更加是一门艺术,代码不仅仅编译能过,能够使用了就完事了的,他更要体现出代码作者对于问题的思考和分析。思考要deep,分析要clear,这样的代码才能够成为一种艺术品而流芳千古。

如果说面向过程的分析是一种理性逻辑的思考的话,进行面向对象的分析则颇有一种哲学家的意味。程序是用来做什么?归根结底就是描述这个世界,只有清晰的描述才能够良好的解决,这是解决任何问题的不二法门。同一个事物,面向过程的描述和面向对象的描述有着天壤之别,前者专注于事,而后者专注于物。譬如对于一个歌舞晚会,习惯面向过程分析的人就会说这是一幕接着一幕,朗诵之后是舞蹈,舞蹈之后歌唱,歌唱之后是收场(呵呵:)), 但是习惯面向对象分析的人则看到的是完全不懂的一幅景象。他们的眼里是一个个明星,所有的动作都被加上的特定的主体,周杰伦唱完了《不能说的秘密》,Michael Jackson又来一个太空舞步。每个明星都有自己拿手的表演和自己鲜明的特点。MJ不可能知道周杰伦的秘密,周杰伦现在也不可能向MJ那样呆在上帝的身旁(对MJ的歌迷来说很不幸,他前两天去世,流下了一个悲剧的传奇)。

我无意评论是面向对象好还是面向过程好,两个各有用武之地,但是面向对象分析的时候确实很过瘾(我承认我是个追星族),不论什么问题,首先第一步就是要抽取行为主体,然后进行封装。就譬如这个远程终端的程序,整个过程中你方唱罢我登场,那么这个“你我”首先要分清楚。毫无疑问,至少有两个主体在过程中表现了,首先是Server,然后是Client,但这种程度的抽象显然是不够的(至少它无益于我编程),更进一步抽象的话,你就想象服务器是一个司令,来打一场(提供MATLAB计算能力)的仗,如果你是这个司令的话,会怎么做呢?首先,界面显示肯定要分配一个人(食色性也,谁也逃不掉, 良好的界面总是给人一种耳目一心的感觉), Interface Class就这样诞生了。另外还得有一个后勤部长,所有的计算资源都由他管,资源是有限滴,分配是必须滴,另外用户信息的管理什么的也归他,Server Class就是这样一个后勤部长。另外要有联络兵,负责和客户端进行通信,有几个客户端进行连接就有几个联络兵,专人专事,VIP级的待遇,联络兵在本程序里面就是Server Com Class。每个联络兵还得配个小秘,负责写写抄抄,这就是Calculation Class了。

客户端的分析也是一样的,这里就不啰嗦了,经过这么一分系,总体的概念就有了,只要实现了每一个类。你就可以在主程序里面挥斥方遒了。所以我喜欢写主程序,颇有点毛主席“指点江山,激扬文字”的状态。

其实面向对象不是那么神秘的,只要追过星的人,都是面向对象的高手。文学家,哲学家其实也都是面向对象的高手,只是他们当时还没这个概念而已。“流水落花春去也,天上人间”,换成程序员的说法就是

Class 水 { 流(); };

Class 花 { 落(); };

Class 春

{

Public:

去();

Private:

水 水均益;

花 花无缺;

}

Void 春::去()

{

水均益.流();

花无缺.落();

};

这次我谈网络编程比较少,因为网络编程的知识基本上是在写C语言版本中获得的,这里就不细讲了,这次主要就是对OOA有了更深的了解,所以就借课程设计报告的版面抒发了一下我的小感想,希望读者不会烦我的罗里啰嗦。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: