欢迎来到天天文库
浏览记录
ID:35409423
大小:71.94 KB
页数:13页
时间:2019-03-24
《林锐文章-修练8年c面向对象程序设计之体会》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、六年前,我刚热恋"面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行程序中滚爬出来预备写点心得体会时,却无法解释什么是“面向对彖”,就象说不清楚什么是数学那样。软件工程中的时捲术语“面向対象分析”和“血向対象设计”,通常是针对“需求分析”和“系统设计”坏节的。“面向对象”有儿人学派,就象如来佛、上帝和真主用各自的方式定义了这个世界,并留下一堆经书来解释这个卅界。冇些学者建议这样找“对象”:分析一个句子的语法,找出名词和动词,名词就是对象,动词则是对象的方法(即两数)。当年国民党的文人为了对抗毛泽东的《沁园春•雪》,特
2、意请清朝遗老们写了一些对仗工整的诗,请蒋介石过冃。老蒋看了气得大骂:“娘希匹,全都有一股棺材里腐尸的气味。”我看了几千页的软件工程资料,终于发现口己有些“弱智”,无法理解“而向对彖”的理论,同时醒悟到“编程是硬道理。”面向对象程序设计语言很多,如Smalltalk>Ada、Eiffel、ObjectPascalVisualBasic.C++等等。C++语言最讨人喜欢,因为它兼容C语言,并且具备C语言的性能。近儿年,一种叫Java的纯面向对象语言红极一时,不少人叫喊着要用Java革C++的命。我认为Java好比是C++的外甥,虽然不是肖•接遗传的,但也几分象样
3、。外甥在舅舅身上玩耍时洒了一泡尿,俩人不该为此而争吵。关于C++程序设计的书藉非常多,本章不讲C++的语法,只讲一些小小的编程道理。假如我能早几年明白这些小道理,就可以大人改善数十万行程序的质最了。1.C++面向对彖程序设计的重要概念早期革命影片里有这样一个角色,他说:“我是党代表,我代表党,我就是党。”后来他给同志们带來了灾难。会用C++的程序员一定懂得面向对象程序设计吗?不会用C++的程序员一定不懂得面向対象程序设计吗?两者都未必。就象坏蛋入党后未必能成为好人,好人不入党未必变成坏蛋那样。我不怕触犯众怒地说句人话:“C++没有高手,C语言才有高手。”在用
4、C和C++编程8年Z后,我深深地遗憾自己不是C语言的高手,更遗憾没冇人点拨我如何进行面向对象程序设计。我和很多C++程序员一样,在享用到C++语法的好处吋便以为口己已经明白了面向対象程序设计。就象挤掉才膏卖牙膏皮那样,真是眾殄天物呀。人们不懂拼咅也会讲普通话,假如懂得拼咅则会把普通话讲得更好。不懂面向对彖程序设计也可以用C++编程,假如懂得面向对象程序设计则会把C++程序编得更好。本节讲述三个非常基础的概念:“类与对象”、“继续与组合”、“虚函数与多态”。理解这些概念,有助于提高程序的质量,非凡是提高“可复用性”与“可扩充性”。1.1类与对象对象(Objec
5、t)是类(Class)的一个实例(Instance)。假如将对彖比作房子,那么类就是房子的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。类可以将数据和两数封装在一起,具屮两数表示了类的行为(或称服务)。类提供要害字publie、protected和private用于声明哪些数据和函数是公有的、受保护的或者是私有的。这样可以达到信息隐藏的冃的,即让类仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们不可以滥用类的封装功能,不要把它当成火锅,什么东西都往里扔。类的设计是以数据为屮心,还是以行为为中心?主张“以数据为中心”的那一派人关注类
6、的内部数据结构,他们习惯bl将private类型的数据写在前面,而将public类型的函数写在后面,如表&1(a)所示。主张“以行为为中心”的那一•派人关注类应该捉供什么样的服务和接口,他们习惯上将public类型的函数写在前面,而将private类型的数据写在后面,如表&1(b)所示。AclassA({private:public:inti,j;voidFund(void);floaty;voidFunc2(void);public:private:voidFund(void);inti,j;voidFunc2(void);•■4floatx,y;…m1A
7、青风血经-衰8.血)以数猪为中心的书SPWS衰8況序询wVib'cn.com很多C++教课书主张在设计类时“以数据为中心”。我坚持并fl建议读者在设计类时“以行为为中心”,即首先考虑类应该提供什么样的函数。Microsoft公司的COM规范的核心是接口设计,COM的接口就相当于类的公有函数[Rogerson1999]。在程序设计方面,咱们不要怀疑Microsoft公司的风格。设计孤立的类是比较轻易的,难的是正确设计基类及具派生类。因为有些程序员搞不清楚"继续”(Inheritance)、“纟fl合”(Composition)、“多态”(Polymorphis
8、m)这些概念。1.2继续与组合假如A是基类,B是A的
此文档下载收益归作者所有