面向对象基础-类与对象.ppt_第1页
面向对象基础-类与对象.ppt_第2页
面向对象基础-类与对象.ppt_第3页
面向对象基础-类与对象.ppt_第4页
面向对象基础-类与对象.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

类与对象,C#面向对象程序设计案例教程,2,教学目标,(1) 初步理解面向对象的编程思想; (2) 能够区分类和对象,理解类和对象之间的关系; (3) 学会自定义类,学会创建与使用对象; (4) 能区分字段与属性、属性与方法; (5) 掌握实例构造函数重载及其应用,了解析构函数; (6) 能区分实例成员与静态成员,能定义并正确调用两种成员; (7) 掌握对象作为方法参数在值传递方式和引用传递方式下的区别。,3,面向对象基本概念 (10.30),对象 程序中的对象来源于生活,现实生活中的某个实体经过抽象、建模后就变成程序中的一个对象,即用特定符号描述的对象。 程序中的对象有共同的结构模型,包括对象名、一组属性、一组操作,其中属性描述对象的静态特征,表示对象的状态,是类的数据成员;操作(或称方法)描述对象的行为,是对象的动态特征,通常是对数据成员进行操作的方法。,4,类 现实生活中的对象往往可以根据共性进行归类,一组具有共同特征和行为的相似对象归为一类。 程序设计中,把一组相似对象的共同特征抽象出来并存储在一起,就形成了类。 从具体对象到类实际上是一个概括的过程,把对象的共同特征抽取出来,形成了类,如果再对这个类用计算机语言加以描述,就形成了程序中的类,这个过程称为抽象。,5,面向对象(类)的几个特征 1封装 封装实际上是在类的设计过程中完成的,类对外部提供统一的接口方法,类的内部相当于一个黑盒,类的使用者并不知道类的内部实现细节,只要知道怎么调用这些接口方法就够了。 2继承 现实世界中有很多事物之间存在一般化与特殊化的关系,这都是由于事物之间存在着“继承”关系,这种思想反映在程序设计中,就是继承,即一个类从另一个类获得了已有的基本特征,并在此基础上增加了自身的一些特殊特征。,6,面向对象的几个特征 3多态 在面向对象程序设计中,多态是指用户对一个对象进行一个操作,但具体的动作却取决于这个对象的类型,即对不同的对象执行相同的操作会产生不同的结果。从多态发生的时机上分,多态可以分为编译时多态和运行时多态两种。 。,7,类 和 对 象,【案例简介】 定义一个猫类,有姓名,品种,毛色,体重,出生日期等属性,以及打招呼,喵喵叫,抓老鼠的行为.创建并使用这个类的实例。【案例目的】 (1) 学会自定义类; (2) 学会用自定义类创建、实例化对象,通过对象引用成员。 【技术要点】 掌握类定义的结构框架。,8,9,类 和 对 象,代码及分析 定义了一个猫类Cat, 在Main()方法中声明并实例化两个猫类对象。,10,相关知识及注意事项 1类的定义 类定义的一般格式如下:,class private protected public ,Public:不限制对该类的访问 Protected:受保护的,表示该类只能被这个类的成员或派生类成员访问 Private:私有的,只能被该类的成员访问。,11,2对象的定义与使用 1) 对象的声明与实例化,类名 对象名; /声明对象 对象名new类名(); /实例化对象,例如,创建一个名为catBobi的猫类对象代码为: Cat catBobi; catBobi new Cat(); 也可以把对象声明与实例化合为一步进行: Cat catBobi = new Cat();,12,2. 对象的定义与使用,2) 对象的使用 在面向对象中,对象不是一个被动接受处理的数据,而是一个拥有数据并能主动提供服务的实体。一个对象被创建后,就可以通过对象本身来获取对象状态或调用对象行为。 调用对象成员的格式为:,对象名.对象成员,13,3类成员的访问修饰符,类的成员的访问修饰符及其含义,14,思考一,年龄是公有变量,可以随时访问随时赋值,可年龄不应该为负数,如果输入也可以编译,不出现语法错误。一般我们要对数据进行合法性检查,避免出现严重后果。我们可以把age设置成私有变量,在类内部检查合法性,在通过公有函数访问。例如:,15,/函数用来为age变量赋值 public void SetAge(int ageValue) if (ageValue = 0) age = 0; else age = ageValue; /读取变量age的值 public int GetAge() return age; ,16,思考二,以上方法可以解决age的访问问题,但实际上人们习惯把age当作一个变量,而不是通过函数访问的方式得到。 C#为解决这类问题,专门设计一种特殊的语法-属性。在属性中,已经定义了get与set两个访问器,用来读取以及设置变量的值。例如,17,public int age getreturn age; setif(value=0) age=0; else age=value ,18,4类的属性,为什么使用属性 除了添加公有方法读写字段外,C#能否提供一种更有效的访问形式,既能读写字段,同时又保证数据成员能被更好地隐藏和保护起来呢?那就是使用属性。属性是类的一种特殊成员,它具有字段的形式,又具有方法的本质 2)怎样定义属性 属性的定义格式为:,修饰符 类型 属性名 set /写入数据 get /读取数据 ,19,作业:,1.类的定义与对象的实例化 仿照课堂上的案例,定义猫类,以及两个对象的实例化代码 定义一个Person类,有姓名,年龄,性别,职业等属性,设计使用set与get访问器获取年龄以及性别。 2.windows应用程序,20,21,下课,22,using System; class Persons string name; int age; string gender; string work; public string Name get return name; set name = value; public int Age get return age; set if (value = 0) age = 0; else age = value; ,public string Gender get return gender; set if (value = “男“ | value = “女“) gender = value; else gender = “男“; public string Work get return work; set work = value; ,定义一个描述个人情况的类Person如下:,23,构造函数:,每当生成类的对象时,自动调用类的构造函数。因此可把初始化工作放到构造函数中完成。 构造函数和类名相同,没有返回值。例如可定义Persons类的构造函数如下: public Persons(string Name,int Age) name=Name; age=Age; 当用Persons OnePerson=new Persons(“张五“,20)语句生成Person类对象时,将自动调用以上构造函数。,24,构造函数重载 在C#语言中,同一个类中的函数,如果函数名相同,而参数的类型或个数不同,认为是不同的函数,这叫函数重载。仅返回值不同,不能看作不同的函数。这样,可以在类定义中,定义多个构造函数,名字相同,参数类型或个数不同。根据生成类的对象方法不同,调用不同的构造函数。例如可以定义Person类没有参数的构造函数如下:,25,public Person() name=“张三”; age=12; 用语句Person OnePerson=new Person(“李四“,30)生成对象时,将调用有参数的构造函数,而用语句Person OnePerson=new Person()生成对象时,调用无参数的构造函数。,26,析构函数 变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销。类的对象被撤销时,将自动调用析构函数。一些善后工作可放在析构函数中完成。析构函数的名字为类名,无返回类型,也无参数。 Person类的析构函数为 Person()。C#中类的析构函数不能被自己编写的代码调用,当垃圾收集器撤销不被使用的对象时,自动调用不被使用对象的析构函数。由于析构函数无参数,因此,析构函数不能重载。,27,使用Person类的完整的例子,using System; namespace e1_3_5 class Person private String name=“张三“; private int age=12; public void Display() Console.WriteLine(“姓名:0,年龄: 1“,name,age); public void SetName(string PersonName) name=PersonName; public void SetAge(int PersonAge) age=PersonAge; ,28,/两个构造函数 public Person(string Name,int Age) name=Name; age=Age; public Person() name=“田七”; age=12; ,29,class Class1 static void Main(string args)/主函数 Person OnePerson=new Person(“李四“,30); OnePerson.Display(); OnePerson.SetName(“王五“); OnePerson.SetAge(40); OnePerson.Display(); OnePerson=new Person(); OnePerson.Display(); ,30,显示的效果是: 姓名: 李四,年龄:30 姓名: 王五,年龄:40 姓名: 田七,年龄:12,31,构造函数与析构函数,相关知识及注意事项 1构造函数 1) 什么是构造函数 对象在实例化的时候,可以进行数据成员的设置,称为对象的初始化;另外,类有时也需要做一些初始化工作,这些工作都由构造函数完成。构造函数也称构造方法,它的基本特点是: (1) 构造函数名与类名相同; (2) 构造函数没有返回值,且函数头部不用写“void”; (3) 除了在实例化对象时由系统调用以及派生类构造函数调用基类构造函数之外,其他任何函数都不能调用它。,32,构造函数与析构函数,2)构造函数的声明与调用,public Cat(string myVariety,string myColor, float myWeight) variety = myVariety; hairColor = myColor; weight = myWeight; birthday = DateTime.Today; ,用new运算符创建一个对象时,构造函数名后所跟的参数列表就是对象的初始化列表。,Cat catBobi = new Cat(“波斯猫“, “白色“, 2.3F);,33,构造函数与析构函数,3)构造函数的重载 构造函数可以重载,以方便程序员初始化对象。,public Cat(string myVariety,string myColor, float myWeight) public Cat (float myWeight, string myVariety, string myColor ) ,添加了这些构造函数后,可以在Main()方法中按照如下所示的多种方式创建并初始化对象:,Cat catBobi = new Cat(“波斯猫“, “白色“, 2.3F); Cat catBobi = new Cat(“波斯猫“, 2.3F, “白色“); Cat catBobi = new Cat(2.3F,“波斯猫“, “白色“);,34,构造函数与析构函数,4)静态构造函数 静态构造函数通常用于对类的静态字段进行初始化。 为Cat类添加静态构造函数对count字段进行初始化。,static Cat()/静态构造函数 count = 0; ,静态构造函数有如下特点: (1) 仅有一个static修饰符。 (2) 只对静态字段赋初值。 (3) 由系统自动调用,一个类仅调用一次,与创建对象操作无关。,35,构造函数与析构函数,5析构函数 1) 什么是析构函数 在对象使用结束时,可以进行一些相关的清理工作并释放所占用的内存空间,这个工作由析构函数完成。析构函数的特点如下: (1) 析构函数的名称与类名相同,在类名前加“”; (2) 析构函数没有返回值,也不能声明为void; (3) 析构函数只有一个,不能重载; (4) 析构函数也是类的成员函数。,Cat() Console.WriteLine(“执行了析构函数!“); ,36,对象做参数与返回值为对象,5.5.1 案例说明 【案例简介】 定义一个圆类Circle,描述圆的半径、数量、求面积、求周长等成员。要求在测试类Program中编写两个方法:一个方法用于根据给定的半径创建一个圆类对象并返回;另一个方法用于根据给定的扩大倍数将指定的圆类对象进行放大。 案例运行结果如右图所示。,37,对象做参数与返回值为对象,【案例目的】 (1) 巩固类的定义与对象的创建; (2) 掌握对象作为方法返回值的用法; (3) 掌握对象作为方法参数在传值方式下的用法。 【技术要点】 (1) 对象作为方法返回值的用法; (2) 对象作为方法参数的用法。,38,对象做参数与返回值为对象,5.5.2 代码及分析 (1) 定义了一个圆类Circle,包含的字段为圆的半径radius、数量count、圆周率PI(常数字段),方法为求面积Area()、求周长Perimeter()等,还包括属性Radius、Count。 (2) 在Program 类中定义了一个CreatCircle()方法和ScaleUp()方法,CreatCircle()方法用于创建一个对象并返回,返回值为对象,ScaleUp()方法根据给定的扩大倍数x将指定的圆类对象半径放大x倍。 (3) 圆的半径值一般应该大于零,为了防止不合法数据被赋给

温馨提示

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

评论

0/150

提交评论