《2022年面向对象编程的理念 .pdf》由会员分享,可在线阅读,更多相关《2022年面向对象编程的理念 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 1 页 共 3 页面向对象编程的理念(个人感受,仅供参考)面向对象编程和之前的结构化编程最大的不同在于面向对象编程要更人性化,使程序的结构更接近人类社会的结构。(实际上,计算机的出现为我们带来了一个虚拟的世界,这个虚拟的世界中的很多看似很深奥的规律、理论都来源于我们的真实世界,甚至就是简单的生活常识。比如计算机系统中的缓存系统。)我们要编制一个程序,不论多复杂,目的只有一个,让程序的各组成部分有机协调起来,相互配合, 完成一个复杂的任务。如何才能让程序的开发更顺畅,更有效呢?我们还是要向真实世界学习。在人类的社会中,不论是一个个自然人,还是由自然人组成的团体、企业、机关、部门, 他们之间形
2、成了一个极其复杂的系统,但这个系统却能有条不紊地运行着。人类社会是如何做到这一点的呢?答案就是两个字:对象(Object) 。不管是自然人,还是那些团体,机构、部门等等,都是一个个具体的对象。每个对象都有自己的一些特征和功能。一个对象的特征决定了它自身的一些基本属性,存储了与它自身相关的一些信息;一个对象的功能则决定了他能为别人做什么。比如自然人有他的名字、身高、体重等特征,还有一些功能(也就是能力) 。比如一个人是医生,他就有看病的能力。这些对象调用其他对象提供的功能而不必知道该功能的实现细节。我们来上课, 你不必操心教室是如何安排才不会冲突的;你开开教室的电灯,不必操心 (也无从知道) 所
3、用的电来自那个发电厂,具体是如何发出的;你去定一张飞机票,只需向航空售票系统说明你的需求(其实就是提供参数,传入数据给售票系统)即可,不用操心(也无从知道)票是如何为你定下来的,为什么我通过石家庄的航空售票系统却能定美国或韩国航空公司的飞机票?它们之间是如何联系在一起,如何瓜分我的飞机票钱的?等等这些问题你都无须知道。上面这些小例子其实说得就是面向对象编程的一个基本理念:封装。一个程序 (一个复杂的系统)内部的各个模块、组成部分之间只要相互服务、调用就好了,不要知道的太多。把你的需求告诉我, 我为你服务,达成你的愿望。至于我具体是如何做的,细节的东西你无须知道,很多时候也不应该知道。不仅如此,
4、 人类社会还为那些有着相同特征或功能的对象归了类。比如我们说学校,这其实就是一类对象, 社会上有千千万万具体的学校,每个学校都是一个具体的对象,但它们有一些共同的特征和功能,所以人们将它们归为一类,定义为学校,这里的学校就是一个类(Class) 。学校又可细分为小学、中学、大学等,这就是在一个类下又分出子类。这就是面向对象编程中的继承 。我们可以说河北师范大学是一个(is a)大学,也可以笼统地说河北师范大学是一个学校。当我们说某某单位是一个学校时,我们就知道这个单位肯定应该有教室、教师、学生等所有学校都有的一些共性的东西,但我们不确定这个单位一定是所大学,所以我们不能说这个学校一定有一个个的
5、系。也就是说,系是大学这个子类才有的特征。正是因为有了类,现实世界才有序。虽然事物众多,形形色色,但各属其类,特征明显,功能明确。 即使我们新到一个城市,也能大概知道他的公交系统是什么样的。因为公交系统就是一个类, 这个类应该有什么样的特征和功能是比较明确的。各个城市的公交系统不过就是这个类的一个个具体的对象而已。当然, 不同城市的公交系统在具体实现一些功能时,又可以有自己的特色。比如一个简单的票价问题,小的城市可以无人售票,不论路途远近, 一律一元;大的城市可以按路途远近分段制定票价。这就是面向对象编程中的多态 。再举个简单点的例子:自然界中存在大量的动物(一个类),动物又分为爬行动物、哺乳
6、动物、两栖动物等等(子类)。一个动物应该有一种能力,那就是移动。但不同的动物在具体实现这种能力时,表现形式是多样的。有的爬,有的游,有的奔跑,有的飞翔。(多态)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - 第 2 页 共 3 页面向对象编程将这些思想搬到了计算机程序中。一个程序没有运行时,就是在磁盘上的一堆代码。但一旦它运行起来,他就要在内存中生成众多的变量。程序要达成目标,其实就是要对这些变量做一些列的操作,彼此配合,完成任
7、务。结构化编程也好, 面向对象编程也好, 不过就是我们以何种视角、何种眼光来解读这些变量。面向对象编程就是以对象的眼光来看待内存中的这些变量的。一切都是对象(Everything is object) 。也就说,如果我们将一个程序的内存空间(32 位计算机平台上这个空间为4G)想像成一个社会, 那么一个程序运行时的众多变量就好比这个虚拟社会中的一个个的对象。我们只要像现实世界中那样来处理这些虚拟世界中的对象即可。每个对象 (变量) 都有其自身的一些特征(属性)和功能(方法)。这众多的对象同样也被划分成不同的类型,这就是变量的数据类型。这些对象(变量)中有比较简单的,比如int,char 等等值
8、类型的,好比现实世界中的自然人对象; (所以,在C#中,一切都是对象,包括那些值类型,因此就不难理解为何一个简单的int 也有其自身的方法,比如int.Parse()) 。这些对象中也有相当复杂的,他们的类型是程序员定义的一个类或接口,它们是有内部结构的,好比现实世界的机关、单位。至于他们的内部结构到底是什么样的,取决于定义它们的类或接口。而且这些对象因为比较复杂,所以在内存中是放在heap中的。面向对象编程与之前的结构化编程的一个很大的不同就在于,在面向对象编程中,变量不再仅仅是存放待处理数据的容器,而是一个个活生生的对象,不仅有数据(属性、字段)还有方法。 这些方法、 属性、 字段使得这些
9、变量有了生命,可以接受信息 (消息) 然后给出回馈。也就是说, 每个变量可以为程序中的其他变量服务,而且调用这种服务无须知道服务实现的细节。随着程序的运行,内存空间中的这些变量生生灭灭,当程序退出时, 这个虚拟的社会就消亡了。总结:现实世界内存空间(虚拟世界)千千万万的事物千千万万的变量事物有类别(动物、植物、微生物等等)变量有类型( int,char,bool 等等)同一类别的事物有一些共同的特点同一类型的变量有很多共同的特点除了自然界本就存在的一些事物,人类还发明、定义了很多事物,比如学校,医院,各种交通工具等等众多的人类社会的东西(对象) ,这些东西也都有各自的类别。除了程序语言本就定义
10、好了的一些变量类型(如前面所列) ,程序员还可根据具体编程需要发明、定义一些特别的变量,这些变量也应有其类型( type) 。所以程序员可以先定义某种类型,然后再声明一个或多个这种类型的变量供程序使用。如何去定义一个崭新的类型呢?这就用到了类(class) ,程序员先定义一个 class, 在定义中说明这个class有什么样的特征和功能;然后再根据这个class去创建一个个具体的对象(object) 。因此,一个 class 就是程序员自己定义的一种数据类型 (type),然后程序员就可以声明多个数据类型为这个class的变量, 每个变量都指向了一个具体的对象(object) 。名师资料总结
11、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - 第 3 页 共 3 页有个例子说, 在活字印刷术出现之前,人们使用的是刻版印刷,大量的文字刻在同一个木板上(耦合度太高) ,一旦某个字需要改动,整个刻版全部报废,需要重新刻版。好比程序设计耦合度太高, 牵一发而动全身,用户提出小小的一处修改,要影响整个程序做大调整,这是不好的, 也是导致软件危机的重要原因。后来有了活字印刷术,一个个活字拼出想要的文章。那个字需要修改,换一个活字就行了。活字印刷的好处:易维护(想改哪,只改那,不会牵一发而动全身);易扩展(想要添加新的字,很容易)易复用(印完这篇文章,这些活字还有用)灵活性高(想横着印,竖着印,随你便)面向对象编程就是要达到这样的目的,通过封装、继承、多态等实现程序各部分间松耦合,让我们的程序也易维护、易扩展、易复用、灵活性高。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -