分享
 
 
 

面向对象介绍(1)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

//以前的文章,刚进入大三时写的,那时刚看模式的书,初生牛犊不怕

//虎,现在看草拟的章节,几乎不敢续写了

第一篇

做人很累,做程序员(软件开发人员)更累。

恰好,前面就有一个帖子,讲的是一个老程序员的心声,大家看看,就可体会我们这行的酸楚,工作强度,工作时间,何况还有个人问题---试问谁不想得到爱情的滋润呢?可多数成了撒哈拉的望雨树……而且,不比其他行,我们被迫追赶机器的速度,“程序员的经验”,简直就可当作一个新典故,程序员行业不敬老:)。

然而,做人很有意思,做程序员(软件开发人员)更有意思。

一旦想一想,计算机已如何深入了这个社会,一旦想一想,这个领域,是如何的丰富,即有大片开垦好的丛林,阵阵送来清爽的风,又有无际的荒原野莽,等着有志者、冒险家去发现,去创造,你就会明白,一个真正的程序员的人生将是多么的精彩。更何况,我还没有注意到,哪个方面可以如此自由,如此蔑视级别,如此推崇创新!

我们都是未来的计算机开发、工作人员,无论如何,我们的生活和计算机再也分不开,我们将为它追赶着技术,追赶着发展机会,品味着它所带来的一切!就如今天,在中秋前夕,我想念着我的家人,我思念我喜欢的女孩(我也是望雨树:),但我还坐在电脑面前,谈计算机的技术,谈面向对象!

有同学或许会说,你要谈面向对象,就谈它的概念嘛,谈它的发展嘛,你为什么一开始就说那么多不相关的东西呢?哦,不,一个真正的程序员,不是在真空中掌握技术,对于一个人,很多时候,你没有掌握那些技术,多是非智商因素。事情不是孤立的,我因为上面的想法深深扎入内心,所以我才会去追求着那美妙的一切,包括面向对象,所以我才会在这儿写帖子。

在计算机系,你没有听到这些,或者,你的心中,没有闪现过这些问题吗?

(1)我学了c,但现在oo很流行,我想学,可我应该从哪儿开始呢?大家说c++好,但还有人说java更有前途,又听说c#气势汹汹的也来了,另外还有vb,有delphi,有smalltalk等等,啊天那,我神经快要断了!我该如何办呢?

(2)(气愤地)啊,vc太难了,我恨不得拿脚踹它踹踹踹……(小声地)vb有用吗?……

(3)我学了c++,可以写些小程序,可我不知道什么可设计成类(class),或者,我觉得无论什么层次都可写成类:)。我感觉到了这一定有问题,毫无疑问良好的oo程序系统应该为类(class)作出好的划分!可我怎么看不到痕迹呢?

(4)代码重用,良好架构,可我的类怎么一堆一堆呢?而且总是需要新类?难道oo承诺的都是骗人的?我快要疯了……

(5)oo的影响有多大?我自己想学的是数据库,是操作系统,或者网络,我学oo将有多大的收益呢?

……

我相信大多数的同学心中都曾闪现过这样的问题;我正是捕捉着心中这样的问题一步一步走过来的……今天,我把它们摘出来,放到我的序中,一方面,我后面的小节设置,和它们有非常大的关系,另一方面,我渴望大家放手,不放口:)讨论。

我当然希望能部分的解决它们。不,此话说大了:),我只是试图说说我的理解---其中当然有许多我从书中学来的观点。如果说的不对的地方,当然是由我负责,我自己没有理解好,炒的菜不好吃,我要问自己的橱艺了,你放心,我不会去找种菜人去理论:)。

下面是草拟的章节:

1,序

提出问题,我为什么选择这份苦差使。并讲一个小故事:)。

2,面向对象语言的分析

分析面向对象的概念和技术,在计算机(高级)语言中,主要讲c++和c#,delphi也会涉及,java就看进度了。

3,简单的面向对象程序设计

如题。

4,用面向对象的观点构造数据结构

讲数据结构的封装。用详实的例子,小的如链表,大的如图的遍历动态演示、哈夫慢树B_树的设计。

5,编译器运用面向对象进行的封装实践

有同学不知道该如何深入学习编程,他不停的问,vc好,还是c++builder好?delphi

有前途吗?等等诸如此类的问题。此节试图谈论它们。

6,面向对象的开发理念

所有的高手,都要回到数学上来,回到开发理念上来。本节谈论面向对象的开发理念和windows编程有关的部分。

7,再谈面向对象的开发理念

谈论UML和设计模式。

8,其他面向对象技术

谈论诸如操作系统、数据库等领域面向对象的应用。

总之呢,这对我是个非常大的挑战!这些帖子的内容,我将在课下整理,搜索以前写的例子,或许还要写些新的例子。因此,发帖子的时间,也许会间隔的有点长,请大家原谅---期间我会以一些数学知识做补偿的:)。我希望熟悉其中任何一节内容的同学,如果你愿意承担其书写任务,我将是非常高兴。我来做你的助手!真的,来吧……

写到此,绪论似乎应该结束了。然而我心中还有一个非常有趣的问题,我想了很久,今天还是说出来了,呵呵,不要对号入坐:)。

似乎有这样的事,同学们路上遇到了,就问,学什么呢?哦,学c++……

学c++?有一个古老的故事:),你听说过吗?

说是从前有三个程序员,他们非常的有意思,也非常肯学。下班回来,他们常坐在一个小酒馆里,聊天呀什么的。这日,他们遇到了一个共同的熟人。大家招呼落座,熟人发话:“各位好友近日在忙些什么呢?”

第一个程序员眼睛一亮,脸上灿烂的笑。这些日子为了加薪,他自学了c++。好在他有c的基础,不几日便把c++搞定了。c++?面向对象?那个简单,就是往struct{/*---*/}里扔函数,然后加public,加private,加protect,就是封装……于是他得意的说:“我学会了c++!”

第二个程序员眼睛一亮,脸上也灿烂的笑。原来,他也自学了c++。不仅学了c++,他还看了传闻最难的vc!再忙活两个星期另两天另两个小时后,他终于在一大堆文件中完成了一个控件的应用,其中似乎弄了许多消息……不敢说十分明白,但又好象明白了,不就是好比家里老婆掌握着财政大权,我想用什么,就得给她打个电话……哦明白了,他成就感非常!于是也得意的说:“我也学会了c++”。

第三个程序员也眼睛一亮,脸上灿烂的笑。毫无疑问,他也学了c++。学c++很长时间,有喜也有乐。vc难学啊,但进去其乐无比。更有趣的是,他现在老是想自己写的那些类,类创建了自己的对象,对象之间相互作用,有分布的感觉,也有抽象代数中关系与系统的特点,到底是巧合呢,还是这些知识真的有联系,有用?我要好好考察考察……刚想致此,却见其他人在盯着自己,于是浅浅一笑,也说:“巧了,我也在学c++……”。

熟人大笑,哈哈,哈哈,可见是英雄所见略同!!

这就是三个程序员的故事。是我前些日子专门为此系列杜撰的:),大家莫笑。就算作此绪论的结尾,好与坏,大家评论了。

我开始准备第一节内容,可能花些时间。大家发自己的帖子接应我啊:)。

第二篇

一,引言

这是这个系列的第二篇文章,本来很仓促,但看到计算机系的“水”这么大,也不得不抓紧时间:)。呵呵,微软前些日子又有Cg(在vc版看到的),有同学大呼c#还没学,微软要把我们拖疯了……哎呀呀,你们比微软还狠些,在我看来……:)

玩笑玩笑,但对于微软,我们也不必如此慌张,我不主张“学语言**”的说法,上次的三个程序员的故事,并不是我想讽刺谁,实在是我觉得学计算机语言,其实是你要学它带来的思考方式,学它带来的技术,学习(练习)交流的方式……我接触面向对象,是在大一的时候,比接触c还早些。那时候,只有计算机文化基础的知识,懂点dos和windows95。记得寒假前我去找当时的一个大师兄(四年级),我说想看pascal,如何?事实上pascal我已看了点,只觉得这语言和数学太象了:),他说pascal没前途,最好是打好基础,大二后学c++和vc,大三和老师合作……恰好寒假在老师那儿住,见了钱能那本c++教程,

就看。

开学后学校学c,自己就看着c++。如果你那时问我,什么是面向对象?面向对象有什么好处?为什么业内面向对象这么流行?我说不清楚,但我觉得,c++要比c好用些,比如:

我在c中,需要一个一般求和的函数,可能你得写:

int Add_int( int a,int b){ return a+b;}

float Add_float( float a,float b){return a+b;}

double Add_double(double a,double b){ return a+b;}

在调用时我们自己要记得(!)区别对待。但c++中函数可重载:

int Add(int a,int b) { return a+b;}

float Add( float a,float b){ return a+b;}

double Add(double a,double b){ return a+b;}

调用时,我们自然不需在特意记得这个差别。似乎,在后来,差别更大些,c语言中,我们学了struct后,也许会觉得这个东东功能太强大了---大得不得了:),什么物体我们不可以拿到我们的程序中来,通过结构体?

比如,邻居家有只猫儿,可爱的很,我们就有:

struct Cat

{

int age;

float weight;

char color[20];

char name[20];

};

好啦,邻居家的mimi,和自个养的tiantian,都可以在计算机里按个户口了:):

...

struct Cat NCat;

/* NCat.age=2;NCat.weight=5.5;NCat.color="black";NCat.name="mimi";*/

struct Cat MCat;

/*MCat.age=1;MCat.weight=4.5;MCat.color="yellow";MCat.name="tiantian";*

/

...

这下,上面的求和函数可以用了,你的弟弟才上小学,想计算两个猫儿的年龄和、体重和,你说,这么做了,在上面的定义和初始化后,调用函数:

int ageSum=Add_int(NCat.age,MCat.age);

float weightSum=Add_float(NCat.weight,MCat.weight);

你说,这很自然呀,我定义了我的数据,我初始化它们,然后我定义一大批功能函数,我在合适的地方调用它们处理我的数据,最后我得到我的结果,这有什么不妥吗?

可以说没有,这是面向过程的编程模式,是我们大部分同学所熟悉的,它有它很多的优点。我们后来学数据结构,及现在学图形编程,大家都是这个思路。也没觉得特别不方便啊。

然而,你从来没有想过,猫儿除了自身的属性值外,它还有很多自己的行为!你没有想过,猫儿寂寞的时候想唱唱歌?它或许在交朋友,自然得要对方的年龄呀,身高体重呀……和自己的比一比,看看是否合适?:)若如此,你太不理解你的猫儿,也太不了解这个世界的美妙了。

可是,如何办呢?是呀,挺为难的,你有没有想到三个程序员的故事的第一个?那位的扔很有道理:):

...

// c++ code

struct Cat{

int age;

float weight;

char color[20];

char name[20];

// Cat(int Age=0,float Weight=0;char Color[20]="none",

// char Name[20]="none")

// { /*---*/}

int Add(int a,int b){ return a+b;}

float Add(float a,float b){ return a+b;}

double Add(double a,double b){ return a+b;}

void IntroduceSelf()

{

cout<<"My name is "<<name<<"."<<endl;

}

//and so on

...

};

看着是不是有点怪?呵呵,我看着也别扭,把struct改为class或许会好些,好在我现在只是试图在叙述我们从面向过程转向面向的动机,中间过程反而有利于说明问题。下面会有个纯c++的版本。

这样,若NCat,MCat经定义后(注意初始化工作是有构造函数完成的,不过我暂时注释掉了),它们自己就可以来求伙伴俩的年龄和、体重和了,还可以自我介绍一下:

MCat.IntroduceSelf();

这个例子很小,不足以说明普及面向对象的必要性与紧迫性,但可给人些感性认识。事实上,我们的现实世界,是丰富多采的,我们的软件开发领域,是丰富多采的。我下面试图再完整的讲述这个例子。

宠物也不是一种啊,终于有一天,你家人一致通过,再买一只小狗。现在你要在计算机上也给它按个户口,没办法,你是地大计算机系毕业的嘛,家里就你是专家:)!

如何办呢,你是不是准备再写个struct dog{/*------*/};呢?呵呵,狗与猫有些共

同的属性,是不是觉得写起来很烦?然而猫狗的行为却大相径庭,于是你又要写一批函数管理狗的数据。

这还好,不就是加只狗吗?可你一旦坐下来,一想起老爸退休了,要买只鸟,弟弟前日里哭着要养小乌龟,家里正为此开会表决:),而今天阿姨过来,送了几只可爱的金鱼……啊天啊,以后的日子该如何是好呢?

呵呵,我们的程序员,事实上就面临着这样的困难。软件越做越大,软件要升级,软件要满足新的客户要求……我们的面向对象,可以说是应时而生!现在面向对象的概念,可以说以深入软件设计领域的各个方面,比如windows组件设计,比如数据库,我们如何能无动于衷呢?如何不去掌握它的思想呢?

不说了,看一下c++如何对付那只狗的:):

家里的猫和狗--------------------------------》都是宠物

--猫的属性---行为--|

-------------------------》宠物的属性和行为

--狗的属性---行为--|

...

//C++ code

class Pet

{

protected:

int age;

float weight;

char color[20];

char name[20];

public:

Pet(int Age,float Weight)

:age(Age),weight(Weight)

{ }

virtural int GetAge()=0;

virtural float GetWeight()=0;

//and so on :)

};

class Cat:public Pet

{

float sleepHour;

//and so on:)

public:

Cat(int Age,float Weight)

:Pet(Age,Weight)

{ }

int GetAge() { return age;}

float GetWeight(){ return weight;}

//and so on:)

};

class Dog:public Pet

{

float runV;

//and so on:)

public:

Dog(int Age,float Weight)

:Pet(Age,Weight)

{ }

int GetAge() { return age;}

float GetWeight(){ return weight;}

//and so on:)

};

...

哈哈,我们终于引来了面向对象!让我休息一下,下次就此例详细说明面向对象的概念。因为时间问题,下次再举例,会有c#,delphi,但没有java了,呵呵,它们对面向对象的实现,本来就很相似嘛!

附:我很想看大家写的帖子呢……

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有