面向对象程序设计基础.ppt_第1页
面向对象程序设计基础.ppt_第2页
面向对象程序设计基础.ppt_第3页
面向对象程序设计基础.ppt_第4页
面向对象程序设计基础.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章,面向对象程序设计基础,2,面向对象是在对真实系统建模的基础上的一种软件开发方法。 面向对象的程序是由类和对象组成。 让我们了解这些术语类和对象。,面向对象的方法,基本概念,3,对象和类之间,对象可以是现实生活中的一个物理对象,还可以是某一类概念实体的实例。例如:一辆汽车、一个人、一本书,乃至一种语言、一个图形、一种管理方式,都可以作为一个对象。 类是一组具有相同数据结构和相同操作的对象的集合。类是对一系列具有相同性质的对象的抽象,是对对象共同特征的描述。比如每一辆汽车是一个对象的话,所有的汽车可以作为一个模板,我们就定义汽车这个类。 可以使用类的定义实例化对象,这表示创建该类的一个实例。,“类”和“对象”常常混淆,所以从一开始就正确区分它们是非常重要,4,第3章 面向对象编程基础,3.1 面向对象编程概念 对象是具有属性和操作(方法)的实体。 对象的属性表示了它所处的状态; 对象的操作则用来改变对象的状态达到特定的功能; 对象有一个唯一的标识名以区别于其他对象; 对象有固定的对外接口,它是对象与外界通信的通道。 类是一种抽象的数据类型,它是在对象之上的抽象,它为属于该类的全部对象提供了统一的抽象描述。 类和对象的关系:类是对象的模板,对象则是类的具体化,是类的实例。,5,对象,属性,型号,价格,里程,行为,起动,停车,行驶,属性,车轮数量,档的数量,行为,加速,换档,刹车,属性,名称,颜色,品种,行为,摇尾巴,吃东西,犬 吠,6,对象具有以下特性: 对象有状态 对象可以显示行为 对象有一个唯一的标志 对象通过消息进行彼此之间的交互。 让我们了解这些概念。,面向对象的基础,7,示例,8,示例,9,思考1 识别对象和类,考虑一个计算机游戏,该游戏中有两个游戏者Tom和Mike,他们要进行相互射击。Tom选择了一支机关枪,Mike选择了一支手枪作为游戏中的武器。请为该游戏设计类,及创建对象。,确定以下对象的可能状态: 手机 立体声播放器,答案: 手机状态:关机,铃声,振动,通话 立体声播放器:播放,暂停,倒带和快进,思考2 识别对象状态,11,Dr. James和 Mr. Hyde 到机票代售站去定购12月3日的票。在代售站,他们向票务人员预订两张头等舱的机票,请确定以下项: 这种情况下的消息接收方。 接收方可能使用的方法。,答案: 在这个示例中,消息的接收方是售票柜台的票务员。 票务员将检查12月3 日是否有两张头等舱的车票。如果有,他将输入详细信息(姓名、年龄、出发日期和座位号),计算所需的费用,然后确定此次预订。,思考3 识别对象方法,12,作为DialCom Telecommunications公司的软件开发小组的成员,分配给你一个任务,要求你创建一个能够接受并显示客户详细信息(如姓名、年龄、电话号码)的软件模型。请确定要创建的类和类的方法。,答案: 根据每个问题说明,所需的类是: Customer 类具有的方法是: 接受客户详细信息 显示客户详细信息,思考4 识别类,13,面向对象程序设计在处理对象时,必须遵循的三个原则是:,1封装 是用一个框架把数据和代码组合在一起。 在C#中,类是支持对象封装的工具。 2继承 通过它可以创建分等级层次的类。 继承是父类和子类之间共享数据和方法的机制,通常把父类称为基类,子类称为派生类。 一个基类可以有任意数目的派生类;C#中一个类只能有一个直接基类,这样的继承结构被称为单继承。 C#通过接口来实现多重继承。接口可以从多个基接口继承。 3多态性 是指同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 多态性有两种,一种是静态多态,一种是动态多态。,14,5.2定义类,在C#中,“类”是一种数据结构,它可以包含数据成员(常量和字段)、函数成员(方法、属性、事件、索引器、运算符、构造函数、析构函数)。 类是个静态的概念,如果要使用某个类,就应该定义该类的一个或多个实例,每一个实例就是一个对象。如果要使用某个类,只要向该类发送消息即可,而对象会利用自身存在的函数来响应接收的消息。 类类型支持继承,继承是一种使派生类可以对基类进行扩展和专用化的机制。,15,类,对程序员而言,类是 C# 中的一种数据结构(引用类型),用于定义描述对象的数据和操作这些数据的代码。,1 类的声明,访问修饰符 class :基类, / 类的主体 ,示例: class Customer / 类的主体 ,/ 数据成员 / 方法成员,访问修饰符在P69 表51 默认修饰符为:internal,16,5.2.2 类的声明,下面以一个学生类的实例,说明该类在C#中的实现。该类的类图如图5-3所示。 【例5-1】定义一个学生类。 public class Student /属性 /学号、姓名、年龄等 /方法 /长大、入学、毕业等 ,17,语法:,数据成员,访问修饰符,数据类型,成员变量;,private,protected,internal,public,_age,_money;,status,.,int,char,., class Customer public string _name; public int _age; public string _telephone; ,访问成员,步骤 1:创建一个类的对象,Customer aSir = new Customer();,步骤 2:使用点号访问成员变量,aSir._name = “张三“; aSir._age = 52;,18,类成员的访问修饰符 1,19,类成员的访问修饰符 2,Teacher 类,private 成员,protected 成员,public 成员,internal 成员,Student 类,只有 Student 类在 Teacher 类都在同一程序集中,才可访问internal成员,不可访问,不可访问,可以访问,访问Teacher类所有成员,访问Student类所有成员,20,5.2.3 类的静态特性,【例5-2】public和private修饰符的作用。 using System; namespace Example_PublicAndPrivate / / 学生类 / public class Student /属性 public string strName; /公有属性 private int nAge; /私有属性 /方法. ,/ / Main函数类 / class Test / / 应用程序的主入口点。 / static void Main() Student s = new Student(); s.strName = “张三“; /正确 s.nAge = 20; /错误,不能访问 ,21,5.2.3 类的静态特性,上述程序中,定义一个Student类,包含一个公有属性“strName”和一个私有属性“nAge”。在Test类中,试图对学生类的对象s的年龄进行设置,但是Student类的nAge属性是私有的,在其他的类中无法访问,因此程序会报错,报错信息如图5-4所示。而访问其公有属性strName就不会有问题。,22,5.2.4 类的动态行为,类的属性是客观世界实体性质的抽象,而方法是实体所能执行的操作。 下面来看如何声明其动态方法。同属性一样,类的方法也具有访问属性,如public、private、protected等,其定义格式如下: 访问修饰符 返回值类型 方法名(形式参数表) /方法体 下面的例子为Student类定义了公有方法SetAge()和GetAge(),用于设置和获取其静态属性“年龄”。,23,5.2.4 类的动态行为,【例5-3】类的公有方法的示例。 using System; namespace DeclareMethod / / 学生类 / public class Student /属性 public string strName; /公有属性 private int nAge; /私有属性 /方法. public void SetAge(int _nAge) this.nAge = _nAge; ,24,5.2.4 类的动态行为,public int GetAge() return this.nAge; / / Main函数类 / class Class1 static void Main(string args) Student s = new Student(); s.SetAge(20); /赋值年龄 Console.WriteLine(s.GetAge(); /获取年龄 ,25,5.2.4 类的动态行为,程序中为各个学生定义了公有方法SetAge(),其功能是为类的私有属性“年龄”赋值;同时为学生类定义了获取“年龄”属性值的公有方法GetAge()。 通过SetAge()方法,并传递适当的参数,便可以为学生s的年龄赋值,而通过调用GetAge()方法获取其年龄,并输出。,26,5.2.5 创建类的实例,类是现实世界中对象或者关系的模拟,是一个抽象的概念。例如,像“学生”这个概念,世界上并没有一个叫做“学生”的活生生的东西,而只有“张三”或者“李四”这些具体的学生实例,这反应了类和对象的关系。 (1)类是具有相同或相似结构、操作和约束规则的对象组成的集合。 (2)对象是某一类的具体化实例,每一个类都具有某些共同特征对象的抽象。 C#使用new关键字来实现实例化类得到一个具体的对象,其格式如下: 类名 对象名 = new 类名( 实参表 ); 在前面的示例中已经用到创建类实例,都是使用new关键字得到一个具体的学生对象。如下列代码所示: Student s = new Student();,27,5.2.6 继承类,继承的本质是代码重用。当要构造一个新的类时,通常无需从头开始。 例如,在学生类的基础上,可以建立一个“大学生”类。很明显,“大学生”这个类具有自己的新特点,如“所在系”就并不是所有的学生都有的,而是大学生才有的特殊性质。 因此,可以把大学生看作是学生的一种延续,即在继承了学生的属性和方法基础之上,又包含了新的属性或方法。 在构造大学生这个类时,只需在学生类的基础上添加大学生特有的特性即可,而无需从头开始。 此时,称学生类为父类,大学生类为子类。在C#中,用符号“:”来实现类的继承。,28,5.2.6 继承类,【例5-4】类继承的示例。 using System; namespace Example_Inheritance / / 学生类 / public class Student public string strName; /姓名 public int nAge; /年龄 ,29,5.2.6 继承类,/ / 大学生类:继承学生类 / public class CollegeStudent : Student public string strInsititute; /所在系 ,30,5.2.6 继承类,/ / 程序入口:主函数类 / public class MainClass / / 主函数 / static void Main(string args) Student s = new Student(); s.strName = “xiaobao“; s.nAge=18; Console.WriteLine(“姓名:0,年龄1“, s.strName, s.nAge);,31,5.2.6 继承类,/使用子类 Console.WriteLine(“-使用子类-“); CollegeStudent c = new CollegeStudent(); c.strName = “小宝“; c.nAge=23; c.strInsititute = “计算机系“; Console.WriteLine(“姓名:0,年龄:1岁,所属系:2“, c.strName, c.nAge, c.strInsititute); Console.ReadKey(); ,32,5.2.6 继承类,程序运行结果如图5-5所示。 注意:此时,大学生类具有学生类的所有属性和方法,另外,还具有其独自的属性所在系。不难看出,继承就是指一个子类能够直接获得父类的性质或特征,而不必重复定义。显然,继承具有传递性。另外,C#只支持单继承,即一个类只能继承一个父类。,33,using System ; class Vehicle /定义汽车类 public int wheels ; /公有成员,轮子个数 protected float weight ; /保护成员,重量 public void F( ) wheels = 4 ; /正确,允许访问自身成员 weight = 10 ; /正确,允许访问自身成员 ,类的声明 示例,34,class train /定义火车类 public int num ; /公有成员,车厢数目 private int passengers ; /私有成员,乘客数 private float weight ; /私有成员,重量 public void F( ) num = 15 ; /正确,允许访问自身成员 weight = 100 ; /正确,允许访问自身成员 Veh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论