版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C# 程序设计,第2部分 揭开面向对象的神秘面纱,C# 程序设计李志中,第2部分目录,2.1 千呼万唤始出来,C# 程序设计李志中,2.1 千呼万唤始出来,大家知道,在程序设计发展史中的最重要的革新莫过于由面向过程走向面向对象,如果将其誉为程序设计发展史上一座最为重要的里程碑,是毫不为过的。 “千呼万唤始出来、犹抱琵琶半遮面。”这是我国唐代的著名诗人白居易所作诗歌琵琶行中的名句。在这里我将它用在计算机程序设计的面向对象方法上。由面向过程走向面向对象,我们且不追究其是否“千呼万唤始出来”,因为在面向对象满天飞的今天,没有人再在乎它是否是“千呼万唤”的结果。,C# 程序设计李志中,2.1 千呼万唤
2、始出来,然而,对于那些已习惯于面向过程程序设计的开发人员或者编程的初学者来说,“犹抱琵琶半遮面”则显得尤为重要。因为他们在面向对象的神秘面纱下,总是认为这是一门极其高深的、难于掌握的学问,从而对其敬而远之,或者是在学习中迟迟不得其精要。 本章将站在面向对象程序设计初学者的角度,结合C#语言,以一种最为通俗易懂的方式来揭开面向对象的这块神秘面纱,移开那把“遮住了半边脸的琵琶”,让它彻底地展现在我们的视野之中。,2.2 一切都是对象,C# 程序设计李志中,2.2 一切都是对象,程序是什么?首先,请不要把它看得太深奥,它实际上是非常简单的。 为什么要编写计算机程序呢?答案很简单,就是希望使用计算机来
3、完成一些原来需要手工完成的任务,以提高效率。那么程序本质上就是用来解决一些现实问题的,只是需要使用计算机来辅助实现而已! 我们打个比方,已知一个圆的半径需要求其面积,我们可以使用纸和笔、根据圆的面积公式求解,的这一过程就是在解决一个现实问题;再如现在我们在学习C#程序设计这门课程也是处理一个现实中的问题。 如果我们希望使用计算机来完成这些工作,就需要编写两个计算机程序,第一个程序是非常简单的,在学习本课程的过程中,我们很快就能编写出这个程序;第二种情况是比较复杂的,我们暂时还不好全部使用计算机来实现这个目标。,C# 程序设计李志中,2.2 一切都是对象,对象是什么呢?在现实生活中,我们的理解就
4、是那些可以看得见摸得着的物体。例如一个人、一张桌子、一台电脑都是一个对象。我们先看看上面的两个问题,第一个问题求圆的面积,从整体的角度来看,这个圆就是一个对象,从部分的角度看,圆的半径、圆周率、圆的面积也是对象。第二个问题就更大了,在学习这门课程的过程中,也有很多的对象,老师是一个对象,每一位同学是一个对象,用于学习的课本、教室、桌子、电脑等都是这个过程中涉及到的对象。 “一切都是对象”,这是对微软最新的面向对象语言C#的精辟阐释。也就是说,C#程序中的最小元素就是对象。,2.3 分类、类与对象,C# 程序设计李志中,2.3 分类、类与对象,好了,现在我们已经知道了在C#程序中,一切都是对象。
5、那么也就是说要编写一个C#程序,就需要构造这个程序需要的对象。 我们首先来看求圆的面积这个例子,刚刚我们谈到了,在这个程序中需要圆的半径、圆周率、圆的面积这三个对象。这仅仅是几个数值而已,在C#中实现也是很简单的,使用本书后面介绍的常量和变量定义这些对象、再使用数学运算符按照圆的面积计算公式进行计算,就能得到圆的面积。,C# 程序设计李志中,2.3 分类、类与对象,我们再来看第二个例子,我们先对学习C#程序设计这个任务做一个假设:有一位老师,还有50位学生,以及一台教师电脑、50台学生用电脑、一台投影仪、一张投影布、50本教材、一个教室、50张课桌、50张椅子。其中老师有姓名、年龄、性别等属性
6、;电脑则有品牌、颜色、中央处理器 CPU类型等属性。 不用再列举了,我们已经知道如果需要在程序中一个一个的构造这么多对象,那将是一件非常复杂或者根本不可能完成的任务!,C# 程序设计李志中,2.3 分类、类与对象,我们现在的做法是根据程序的需要,一个一个的构造对象,显然我们不应该这样做!如果我们转换一下思维,不难发现这些对象中有很多是相似的,例如老师和学生都有姓名、年龄、性别等属性,电脑都有品牌、颜色、CPU 类型等属性,桌子椅子都有尺寸、颜色等属性等等。如果我们把这些具有相同属性的对象抽象出来,也就是说对其分类,再在类的基础上来构造对象,这样就简单多了! 那么,在C#中是不是这样做的呢?答案
7、当然是肯定的,事实上,虽然“一切都是对象”是C#语言的精髓,然而我们在编写C#程序时,您会发现一切都是类!这些您都将在后面的章节中慢慢的认识到。,C# 程序设计李志中,2.3 分类、类与对象,本节的节标题是“分类”,我们不妨再来讨论一下“分类”的相关知识。类的英文名( class)是分类的英文名(classification)的词根,从中可以推测出,类是分类的结果,事实正是如此,设计一个类的过程就是对信息进行分类,并将相关信息放置到一个有意义的实体中的过程。 分类是一个分别按照种类、等级或性质等进行归类的过程,分类可以把无规律的事物分为有规律的,按照不同的特点分类事物,使事物更有规律。,C#
8、程序设计李志中,2.3 分类、类与对象,分类是我们具有的一种基本的思维能力,例如,所有的人都具有通用的行为(例如说话、行走等)和通用的属性(如都有两只手、两只眼睛等),此时就用“人类”一词来泛指具有这些行为和属性的对象。当然“人类”还可以分,例如根据肤色可以将“人类”分成“黑种人”、“白种人”和“黄种人”。这里的“人类”相当于面向对象思想中的基类,而“黑种人”、“白种人”和“黄种人”则是基类“人类”的继承类(派生类、子类),它们都具有基类“人类”的所有特征。 如人们对事物的分类一样,在编写程序时,很有必要对一个问题即解决方案进行分类,然后用一种编程语言来对这些类进行建模,这正是现代面向对象语言
9、的宗旨,C#就是其中之一。,C# 程序设计李志中,2.3 分类、类与对象,类是分类的结果,是一个抽象的概念,从概念的角度来看,它本身不具有任何的属性和行为等,只有对象才具有这些属性和行为。例如,人类只是一个类,是一个抽象的概念,它本身是不具有两只手和两只眼睛这些属性的,也不具有说话和行走这些行为,只有符合人类定义的个体(即人类的一个实例、通俗的讲就是一个人),才具有这些属性和行为。 在人们周围存在着很多对象的例子,除了前面例子中提到过的,还有如一台电视机、一辆小汽车、一条小狗等,都是对象。通常称电视机是电器类的一个实例,小汽车是汽车类的一个实例,而小狗则是动物类的一个实例。因此,对象是类的实例
10、。,C# 程序设计李志中,2.3 分类、类与对象,对象是面向对象编程的最小单位,可以视为一个单元的代码和数据的组合。它可以是应用程序的一部分,如圆的半径、圆周率、圆的面积,或者把整个圆看做一个对象,甚至还可以认为整个程序是一个对象。 对象是理解面向对象技术的关键,通俗地讲,对象就是类变量。对类进行实例化的过程就是创建对象的过程。,2.4 类的成员,C# 程序设计李志中,2.4 类的成员,类(class)是 C#类型中最基础的一种,它将这个类具有的特征(以后我们称这些特征为类的成员)组合在一个单元中。 那么类的成员可以有哪些呢,或者说这个组合单元可以包含哪些成员?我们还以人类或者相关的类为例来说
11、明。,C# 程序设计李志中,2.4 类的成员,第一、每个人都有姓名,通常情况下,每个人的姓名是不同的(这里仅为了说明类的成员、不考虑同名的问题),那么类中应该包含一个用于表示人的姓名成员。当我们或得了类的实例(对象)时,应该给对象的这个成员一个特定的值,以表示这个人的姓名。在C#中,把这种成员称为字段成员,它其实就是雷中直接定义的变量。大家又会问了,什么是变量呢?这在本书后面的章节中将介绍,它其实很简单,变量就是一个可变的量,如姓名,每个人的姓名不一样,这就要求它必须可变,在需要的时候,给他分配一些值,如“张三”、“李四”等。这就是变量,就这么简单!,C# 程序设计李志中,2.4 类的成员,第
12、二、上面提到了变量是类中一个可以改变其值的成员,勤于思考的你很快就会想到,如果是一个不可以改变其值的成员呢,那又如何?要说明这个问题,我们首先必须考虑这样的成员是否有其存在的必要性。人类都有性别这一属性,他可以是“男”和“女”,但如果现在我们讨论的不是人类,而是人类的子类(子类这个概念与继承有关,在本书后面的章节中介绍,这里我们只要理解这些子类是人类的一部分就可以了):男人类或女人类。这时我们再来看性别这个成员,男人类当然也具有性别,只是这个成员的值永远都不会改变而已。在C#中,把这样的成员称为常量成员,表示类中不可改变其值的一种成员。,C# 程序设计李志中,2.4 类的成员,第三、人具有很多
13、的属性,如姓名、性别等,但是如果这是类是人类的一个子类(如教师类),那么它就还有一个工资属性,用于表示教师的月薪。大多数人都不想公开自己的工资,那么怎么办呢?我们可以限定它的可访问性,并将它封装起来,然后还可以限制它是只读、只写或者是可读写等特征。在C#中,把这种成员称为属性成员,其本质就是一个字段成员,只是用一个不同的名称给了这个字段一个包装,并可以限定它的可读写性质。具体的实现将在后面的章节中介绍。,C# 程序设计李志中,2.4 类的成员,第四、同样的,人也具有很多的行为,如说话、走路、吃饭等。这些行为在C#中称为方法,通常用于执行类的一些操作和计算,方法是执行。 第五、人在什么在情况下才
14、会进行说话、走路和吃饭这些行为呢?通常情况下,要进行这些动作,会有一些前提条件:如回答问题时会说话、起床时会走路、肚子饿了会吃饭等,回答、起床和肚子饿了就是触发说话、走路和吃饭这些行为的元素。在C#中,把这样的元素称为事件。这与C#中的一种叫做事件驱动的机制有关,即在C#中,要执行一个方法,需要有一个事件来驱动,例如单击了一个按钮,就会产生按钮的单击事件,我们可以对编写一个方法,让程序在发生按钮的单击事件是执行这个方法。,C# 程序设计李志中,2.4 类的成员,第六、在类中,有一种特殊的成员,称为索引器,它允许我们以一种特殊的方式检索和存取对象。索引器超出了本书介绍的范畴,故在此不作详细的解释
15、。 第七、我们可以对两个整数进行加减乘除等运算、也能对两个小数进行同样的运算,这些都是由我们所熟悉的算术运算符来实现的。但如果我们需要对两个人进行加法运算呢?有读者认为,两个人不能相加,其实不然,只要我们需要,就可以对两个人进行这些运算。但是我们必须定义好运算的规则。例如相加,加的是什么,是身高?是年龄?还是其它?也就是说,只要定义好了这些规则,两个对象是可以执行这些运算的。在C#中,把这种成员称为运算符,且通常以重载的形式出现。关于重载,同样超出了本书的范畴,请读者参考其他资料和书籍。,C# 程序设计李志中,2.4 类的成员,第八、在C#中,还有一种特殊的成员:构造函数,它用于构造类的实例,即对象。构造函数本质上是方法,只是其调用的方式有点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海报设计合同模板
- 家庭雇佣保姆合同样式参考
- 2024独家原创企业绩效合同签定仪式领导讲话稿
- 2024租赁办公室合同范本
- 个人教育助学贷款
- 购房借款协议2024年
- 篮球训练合作协议范本
- 房产代理合同租赁
- 个人消费借款合同范本
- 提升机租赁合同样本格式
- 临床医疗教学之127:冠心病合并心房颤动患者抗栓管理中国专家共识2020版课件
- 腰椎间盘突出区域定位及意义
- 天蓝色商务发展历程时间轴PPT模板课件
- 各潮位站基面关系
- 高处安全作业票填写模板(2022更新)
- 幼儿园绘本故事:《妈妈买绿豆》 PPT课件
- 急腹症(课堂PPT)
- 物流中心岗位设置及岗位职责
- 九年级人自然社会教案
- 某市康复医院建立的可行性报告
- 配位化学 第2章 配合物的结构和成键理论
评论
0/150
提交评论