《面向对象的编程技术对象和属性等.ppt》由会员分享,可在线阅读,更多相关《面向对象的编程技术对象和属性等.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 MicrosoftMicrosoftMicrosoftMicrosoft C#程序设计语言课程内容程序设计语言课程内容 第一章:概述第一章:概述第一章:概述第一章:概述 第二章:第二章:第二章:第二章:C#C#语言的基本原理语言的基本原理语言的基本原理语言的基本原理 第三章:第三章:第三章:第三章:C#C#中对象的创建中对象的创建中对象的创建中对象的创建 第四章:面向对象的编程技术第四章:面向对象的编程技术第四章:面向对象的编程技术第四章:面向对象的编程技术 第五章:第五章:第五章:第五章:C#C#编程编程编程编程 第六章:编写基于第六章:编写基于第六章:编写基于第六章:编写基于 .NET.
2、NET 的应用的应用的应用的应用 程序程序程序程序 第七章:使用第七章:使用第七章:使用第七章:使用 ADO.NET ADO.NET 访问访问访问访问 数据数据数据数据 第八章:创建基于第八章:创建基于第八章:创建基于第八章:创建基于 Windows Windows 的应用程序的应用程序的应用程序的应用程序 第九章:在第九章:在第九章:在第九章:在 C#C#应用程序中使应用程序中使应用程序中使应用程序中使 用用用用 XML Web ServiceXML Web Service 第十章:创建第十章:创建第十章:创建第十章:创建 Web Web 应用程序应用程序应用程序应用程序 十一章:十一章:十
3、一章:十一章:应用程序设置和应用程序设置和应用程序设置和应用程序设置和 部署部署部署部署 十二章:进阶学习目标十二章:进阶学习目标十二章:进阶学习目标十二章:进阶学习目标4面向对象的编程技术面向对象的编程技术面向对象的编程技术面向对象的编程技术内容:内容:内容:内容:设计对象设计对象设计对象设计对象 继承性继承性继承性继承性 多态性多态性多态性多态性 MicrosoftMicrosoftMicrosoftMicrosoft 设计对象设计对象 4.1学习完本节后,你将能够:学习完本节后,你将能够:学习完本节后,你将能够:学习完本节后,你将能够:在对象中封装信息在对象中封装信息在对象中封装信息在对
4、象中封装信息 使用属性管理对封装数据的访问使用属性管理对封装数据的访问使用属性管理对封装数据的访问使用属性管理对封装数据的访问 MicrosoftMicrosoftMicrosoftMicrosoft 封封 装装 性性 4.1.2 将类的某些数据和操作这些数据的代码将类的某些数据和操作这些数据的代码将类的某些数据和操作这些数据的代码将类的某些数据和操作这些数据的代码隐藏起来,这就是封装隐藏起来,这就是封装隐藏起来,这就是封装隐藏起来,这就是封装 封装的好处:封装的好处:封装的好处:封装的好处:w w可以隐藏类实现的细节可以隐藏类实现的细节可以隐藏类实现的细节可以隐藏类实现的细节w w简化用户的
5、使用简化用户的使用简化用户的使用简化用户的使用w w易于软件的更新、修订、维护。可以修改内易于软件的更新、修订、维护。可以修改内易于软件的更新、修订、维护。可以修改内易于软件的更新、修订、维护。可以修改内部实现,但不影响用户的使用部实现,但不影响用户的使用部实现,但不影响用户的使用部实现,但不影响用户的使用 MicrosoftMicrosoftMicrosoftMicrosoft 访访 问问 修修 饰饰 符符 使用访问修饰符,可以定义应用程序中类成员使用访问修饰符,可以定义应用程序中类成员使用访问修饰符,可以定义应用程序中类成员使用访问修饰符,可以定义应用程序中类成员的作用域(可见性)的作用域
6、(可见性)的作用域(可见性)的作用域(可见性)声明声明声明声明定义定义定义定义public不限制访问private只能从包含的类中访问internal从类型所在的 assembly 访问protected包含的类或继承的子类可以访问protected internal包含的类、继承的子类或类型所在 assembly 可以访问 MicrosoftMicrosoftMicrosoftMicrosoft 属属 性性 4.1.3 属性是属性是属性是属性是“聪明聪明聪明聪明”的字段,的字段,的字段,的字段,“特殊特殊特殊特殊”的方的方的方的方法法法法 定义属性类似于定义一个方法,但使用定义属性类似于定义
7、一个方法,但使用定义属性类似于定义一个方法,但使用定义属性类似于定义一个方法,但使用属性时如同使用一个字段属性时如同使用一个字段属性时如同使用一个字段属性时如同使用一个字段class Cat public string name;public int age;static void Main()Cat cat1=new Cat();cat1.age=-13;/错误 MicrosoftMicrosoftMicrosoftMicrosoft 创创 建建 属属 性性 4.1.3 语法:语法:语法:语法:public|protected 数据类型 属性名 get /get访问器,获取属性的代码 set
8、 /set访问器,设置属性的代码 MicrosoftMicrosoftMicrosoftMicrosoft 创创 建建 属属 性性 4.1.3 示例:示例:示例:示例:public class Cat private int age;public int Age get return age;set if(value=20)报告出错 else age=value;MicrosoftMicrosoftMicrosoftMicrosoft 使使 用用 属属 性性 4.1.3 示例:示例:示例:示例:Cat cat1=new Cat();cat1.Age=1;/使用Age属性的set访问器int n
9、=Cat.Age;/使用Age属性的get访问器cat1.Age=100;/收到错误消息 MicrosoftMicrosoftMicrosoftMicrosoft 属属 性性 4.1.3 如果只提供了如果只提供了如果只提供了如果只提供了get get,没有,没有,没有,没有set set,这样的属性,这样的属性,这样的属性,这样的属性为只读属性为只读属性为只读属性为只读属性 如果只提供了如果只提供了如果只提供了如果只提供了set set,没有,没有,没有,没有get get,只写属性,只写属性,只写属性,只写属性 优点:优点:优点:优点:w w属性在使用时类似于类的字段,简单属性在使用时类似于
10、类的字段,简单属性在使用时类似于类的字段,简单属性在使用时类似于类的字段,简单w w属性在实现时类似于方法,可以编写代码控制用户属性在实现时类似于方法,可以编写代码控制用户属性在实现时类似于方法,可以编写代码控制用户属性在实现时类似于方法,可以编写代码控制用户对数据的存、取,增加安全性检查对数据的存、取,增加安全性检查对数据的存、取,增加安全性检查对数据的存、取,增加安全性检查w w可以设置只读或只写属性可以设置只读或只写属性可以设置只读或只写属性可以设置只读或只写属性 MicrosoftMicrosoftMicrosoftMicrosoft 练练练练 习习习习1.1.参见教材参见教材参见教材
11、参见教材P101P101页页页页4.1.4 4.1.4 课堂练习课堂练习课堂练习课堂练习10 分钟分钟编写和使用属性编写和使用属性 4.1.44面向对象的编程技术面向对象的编程技术面向对象的编程技术面向对象的编程技术内容:内容:内容:内容:设计对象设计对象设计对象设计对象 继承性继承性继承性继承性 多态性多态性多态性多态性 MicrosoftMicrosoftMicrosoftMicrosoft 继继 承承 性性 4.2 定义基类定义基类定义基类定义基类 创建派生类创建派生类创建派生类创建派生类 创建密封类创建密封类创建密封类创建密封类 MicrosoftMicrosoftMicrosoftM
12、icrosoft 继继 承承 4.2.1“A”is a kind of“B”A”is a kind of“B”,猫是一只动物,阿土仔是一个,猫是一只动物,阿土仔是一个,猫是一只动物,阿土仔是一个,猫是一只动物,阿土仔是一个人人人人“A”is a kind of“B”A”is a kind of“B”,说明,说明,说明,说明B B是是是是A A的一个父类,的一个父类,的一个父类,的一个父类,A A是是是是B B的子类(基类的子类(基类的子类(基类的子类(基类/派生类)派生类)派生类)派生类)子类无条件的接收父类具有的特性,包括属性和方法,子类无条件的接收父类具有的特性,包括属性和方法,子类无条件
13、的接收父类具有的特性,包括属性和方法,子类无条件的接收父类具有的特性,包括属性和方法,这就叫做继承这就叫做继承这就叫做继承这就叫做继承 继承允许把公共的属性和方法包含在基类中得到重用,继承允许把公共的属性和方法包含在基类中得到重用,继承允许把公共的属性和方法包含在基类中得到重用,继承允许把公共的属性和方法包含在基类中得到重用,此外,子类还可以添加自己的特性此外,子类还可以添加自己的特性此外,子类还可以添加自己的特性此外,子类还可以添加自己的特性 利用继承,可以以现有的类为基础,创建出新的类,利用继承,可以以现有的类为基础,创建出新的类,利用继承,可以以现有的类为基础,创建出新的类,利用继承,可
14、以以现有的类为基础,创建出新的类,实现了代码的重用实现了代码的重用实现了代码的重用实现了代码的重用 MicrosoftMicrosoftMicrosoftMicrosoft 继继 承承 4.2.1 继承描述了继承描述了继承描述了继承描述了“是什么是什么是什么是什么种类种类种类种类”(is a kind is a kind ofof)的关系的关系的关系的关系 派生类从基类继承属派生类从基类继承属派生类从基类继承属派生类从基类继承属性和方法,实现了代性和方法,实现了代性和方法,实现了代性和方法,实现了代码重用码重用码重用码重用 派生类变得更专门化派生类变得更专门化派生类变得更专门化派生类变得更专门
15、化 在在在在C#C#中只支持单一中只支持单一中只支持单一中只支持单一继承,即每个子类只继承,即每个子类只继承,即每个子类只继承,即每个子类只能有一个父类能有一个父类能有一个父类能有一个父类父类父类子类子类动物动物大象大象猫猫 MicrosoftMicrosoftMicrosoftMicrosoft 派派 生生 类类 4.2.2 示例:示例:示例:示例:动物园需要管理动物园需要管理动物园需要管理动物园需要管理3 3种动物,羚羊,狮子,大象种动物,羚羊,狮子,大象种动物,羚羊,狮子,大象种动物,羚羊,狮子,大象public class Antelope public bool IsSleeping
16、;public void Sleep()public void Eat()public class Lion public bool IsSleeping;public void Sleep()public void Eat()public void StalkPrey()public class Elephant public bool IsSleeping;public void Sleep()public void Eat()public int CarrayCapacity;public class Animal public bool IsSleeping;public void S
17、leep()public void Eat()public class Antelope:Animalpublic class Lion:Animal public void StalkPrey()public class Elephant:Animal public int CarrayCapacity;MicrosoftMicrosoftMicrosoftMicrosoft 派派 生生 类类 4.2.2 示例:示例:示例:示例:public class Animal protected bool IsSleeping;public void Sleep()public void Eat()
18、public class Lion:Animal public void StalkPrey().Lion adoptedLion=new Lion();adoptedLion.StalkPrey();adoptedLion.Eat();MicrosoftMicrosoftMicrosoftMicrosoft base 关键字关键字 4.2.3 base base 指代一个对象的父指代一个对象的父指代一个对象的父指代一个对象的父类类类类/基类基类基类基类 当子类中的成员与父类成当子类中的成员与父类成当子类中的成员与父类成当子类中的成员与父类成员重名是,父类的成员被员重名是,父类的成员被员重名是
19、,父类的成员被员重名是,父类的成员被隐藏隐藏隐藏隐藏 base base 的作用:的作用:的作用:的作用:w w点取父类中被子类隐藏了点取父类中被子类隐藏了点取父类中被子类隐藏了点取父类中被子类隐藏了的成员变量的成员变量的成员变量的成员变量w w点取被子类覆盖了的方法点取被子类覆盖了的方法点取被子类覆盖了的方法点取被子类覆盖了的方法w w作为方法名表示父类的构作为方法名表示父类的构作为方法名表示父类的构作为方法名表示父类的构造函数造函数造函数造函数public Animal public void method1()public class Lion:Animal /将父类的同名方法隐藏 pu
20、blic void method1()public Lion()this.method1();base.method1();MicrosoftMicrosoftMicrosoftMicrosoft 密密 封封 类类 4.2.4 使用使用使用使用sealedsealed关键字声明密封类关键字声明密封类关键字声明密封类关键字声明密封类 密封类不允许其他类继承该类密封类不允许其他类继承该类密封类不允许其他类继承该类密封类不允许其他类继承该类 密封的方法不允许被覆盖密封的方法不允许被覆盖密封的方法不允许被覆盖密封的方法不允许被覆盖 如果你的类不希望被别人继承、修改,为安全起见,如果你的类不希望被别人继
21、承、修改,为安全起见,如果你的类不希望被别人继承、修改,为安全起见,如果你的类不希望被别人继承、修改,为安全起见,把它们定义为把它们定义为把它们定义为把它们定义为sealedsealed吧!吧!吧!吧!public sealed class MyClass/class members MicrosoftMicrosoftMicrosoftMicrosoft 练练练练 习习习习1.1.参见教材参见教材参见教材参见教材P108P108页页页页4.2.5 4.2.5 课堂练习课堂练习课堂练习课堂练习10 分钟分钟创建派生类创建派生类 4.2.54面向对象的编程技术面向对象的编程技术面向对象的编程技术
22、面向对象的编程技术内容:内容:内容:内容:设计对象设计对象设计对象设计对象 继承性继承性继承性继承性 多态性多态性多态性多态性 MicrosoftMicrosoftMicrosoftMicrosoft 多多 态态 4.3 通过在基类中使用虚方法来实现多态性通过在基类中使用虚方法来实现多态性通过在基类中使用虚方法来实现多态性通过在基类中使用虚方法来实现多态性 创建和使用抽象类创建和使用抽象类创建和使用抽象类创建和使用抽象类 MicrosoftMicrosoftMicrosoftMicrosoft 多多 态态 性性 4.3.1 具有多种不同的形态,这种能力称为多态性具有多种不同的形态,这种能力称为
23、多态性具有多种不同的形态,这种能力称为多态性具有多种不同的形态,这种能力称为多态性 子类继承了父类的特性,但子类在某些细节上各不相子类继承了父类的特性,但子类在某些细节上各不相子类继承了父类的特性,但子类在某些细节上各不相子类继承了父类的特性,但子类在某些细节上各不相同,多种多样,如何做到这一点呢?同,多种多样,如何做到这一点呢?同,多种多样,如何做到这一点呢?同,多种多样,如何做到这一点呢?AnimalAnimal对象对象对象对象ElephantCatMouse行为行为行为行为Eat GrassEat MouseEat Cheese被调用的被调用的被调用的被调用的方法方法方法方法Eat()E
24、at()Eat()MicrosoftMicrosoftMicrosoftMicrosoft 编编 写写 虚虚 方方 法法 4.3.2 如果希望某个方法的实现能够在子类中进一步得到改如果希望某个方法的实现能够在子类中进一步得到改如果希望某个方法的实现能够在子类中进一步得到改如果希望某个方法的实现能够在子类中进一步得到改进,那么将方法定义为虚方法进,那么将方法定义为虚方法进,那么将方法定义为虚方法进,那么将方法定义为虚方法 使用使用使用使用virtualvirtual关键字定义虚方法关键字定义虚方法关键字定义虚方法关键字定义虚方法 这样子类就可以改进从父类继承下来的这样子类就可以改进从父类继承下来
25、的这样子类就可以改进从父类继承下来的这样子类就可以改进从父类继承下来的EatEat方法了方法了方法了方法了public class Animal public virtual void Eat()Console.WriteLine(Eat something);MicrosoftMicrosoftMicrosoftMicrosoft 编编 写写 虚虚 方方 法法 4.3.2 如果希望改进父类的某个虚方法,使用如果希望改进父类的某个虚方法,使用如果希望改进父类的某个虚方法,使用如果希望改进父类的某个虚方法,使用overrideoverride关键字关键字关键字关键字覆盖父类的方法,提供自己的实现
26、就可以了覆盖父类的方法,提供自己的实现就可以了覆盖父类的方法,提供自己的实现就可以了覆盖父类的方法,提供自己的实现就可以了 当覆盖虚方法时,覆盖的方法必须与被覆盖的方法具当覆盖虚方法时,覆盖的方法必须与被覆盖的方法具当覆盖虚方法时,覆盖的方法必须与被覆盖的方法具当覆盖虚方法时,覆盖的方法必须与被覆盖的方法具有相同的方法签名有相同的方法签名有相同的方法签名有相同的方法签名 这样子类就可以有与众不同的这样子类就可以有与众不同的这样子类就可以有与众不同的这样子类就可以有与众不同的EatEat方法了方法了方法了方法了public class Cat:Animal public override voi
27、d Eat()Console.WriteLine(Eat mouse!);MicrosoftMicrosoftMicrosoftMicrosoft 虚虚 方方 法法 的调的调 用用 4.3.2 当调用某个虚方法时,运行时会根据具体对象的类型,当调用某个虚方法时,运行时会根据具体对象的类型,当调用某个虚方法时,运行时会根据具体对象的类型,当调用某个虚方法时,运行时会根据具体对象的类型,动态决定调用哪个方法。动态决定调用哪个方法。动态决定调用哪个方法。动态决定调用哪个方法。public class Animal public virtual void Eat()Console.WriteLine(
28、Eat something);public class Cat:Animal public override void Eat()Console.WriteLine(Eat mouse!);Animal myCat=new Cat();myCat.Eat();/输出:Eat mouse!MicrosoftMicrosoftMicrosoftMicrosoft 多多 态态 的的 实实 现现 4.3.2动物饲养员public class AnimalTrainer public void FeedAnimal(Animal a)a.Eat();static void Main()Elephant
29、myElephant=new Elephant();Cat myCat=new Cat();Mouse myMouse=new Mouse();AnimalTrainer marry=new AnimalTrainer();marry.FeedAnimal(myElephant);/Eat Grass marry.FeedAnimal(myCat);/Eat Mouse marry.FeedAnimal(myMouse);/Eat Cheese MicrosoftMicrosoftMicrosoftMicrosoft 抽象方法抽象方法抽象方法抽象方法w w只有方法声明,但没有方法实现,是一个空
30、方法只有方法声明,但没有方法实现,是一个空方法只有方法声明,但没有方法实现,是一个空方法只有方法声明,但没有方法实现,是一个空方法w w抽象的方法隐式为虚方法,必须被覆盖抽象的方法隐式为虚方法,必须被覆盖抽象的方法隐式为虚方法,必须被覆盖抽象的方法隐式为虚方法,必须被覆盖 抽象类:抽象类:抽象类:抽象类:w w包含了抽象方法的类必须声明为抽象类包含了抽象方法的类必须声明为抽象类包含了抽象方法的类必须声明为抽象类包含了抽象方法的类必须声明为抽象类w w只能被继承,但不能创建一个抽象类的对象实例只能被继承,但不能创建一个抽象类的对象实例只能被继承,但不能创建一个抽象类的对象实例只能被继承,但不能创
31、建一个抽象类的对象实例 使用使用使用使用abstractabstract关键字定义抽象类和抽象方法关键字定义抽象类和抽象方法关键字定义抽象类和抽象方法关键字定义抽象类和抽象方法 如果你的某个类的方法不知道该如何实现,实现的细如果你的某个类的方法不知道该如何实现,实现的细如果你的某个类的方法不知道该如何实现,实现的细如果你的某个类的方法不知道该如何实现,实现的细节是由子类决定的,那么把它定义成节是由子类决定的,那么把它定义成节是由子类决定的,那么把它定义成节是由子类决定的,那么把它定义成abstractabstract吧!吧!吧!吧!抽象方法和抽象类抽象方法和抽象类 4.3.3 Microsof
32、tMicrosoftMicrosoftMicrosoft class Shape public string name;public double GetArea()?抽象方法和抽象类抽象方法和抽象类 4.3.3 思考题:思考题:思考题:思考题:为什么使用抽象方法为什么使用抽象方法为什么使用抽象方法为什么使用抽象方法 定义一个定义一个定义一个定义一个shapeshape类,表示各种几何图形,方法类,表示各种几何图形,方法类,表示各种几何图形,方法类,表示各种几何图形,方法getAreagetArea()用来计算图形的面积,该如何实现这个方法呢?用来计算图形的面积,该如何实现这个方法呢?用来计算
33、图形的面积,该如何实现这个方法呢?用来计算图形的面积,该如何实现这个方法呢?三角形,正方形,三角形,正方形,圆形圆形,不同的,不同的几何图形面积的计几何图形面积的计算公式不同,显然算公式不同,显然在这里没法实现在这里没法实现 MicrosoftMicrosoftMicrosoftMicrosoft class 圆形:Shape public override double GetArea()area=R2;class 三角形:Shape public override double GetArea()area=(底*高)/2;abstract class Shape public abstra
34、ct double GetArea();/没有方法体 抽象方法和抽象类抽象方法和抽象类 4.3.3 解决办法:定义为解决办法:定义为解决办法:定义为解决办法:定义为abstractabstract,让各个子类自己去实现吧。,让各个子类自己去实现吧。,让各个子类自己去实现吧。,让各个子类自己去实现吧。MicrosoftMicrosoftMicrosoftMicrosoft 练练练练 习习习习1.1.参见教材参见教材参见教材参见教材P115P115页页页页4.3.4 4.3.4 课堂练习课堂练习课堂练习课堂练习10 分钟分钟使用多态性使用多态性 4.3.4 MicrosoftMicrosoftMi
35、crosoftMicrosoft 面向对象编程优点面向对象编程优点 4.1.1 简易性简易性简易性简易性对象反映了现实世界的元素,使程序更容易设计对象反映了现实世界的元素,使程序更容易设计对象反映了现实世界的元素,使程序更容易设计对象反映了现实世界的元素,使程序更容易设计 封装性封装性封装性封装性隐藏了重要的数据和实现细节,易于代码维护,更安全隐藏了重要的数据和实现细节,易于代码维护,更安全隐藏了重要的数据和实现细节,易于代码维护,更安全隐藏了重要的数据和实现细节,易于代码维护,更安全 继承性继承性继承性继承性实现了代码重用,提高了开发效率实现了代码重用,提高了开发效率实现了代码重用,提高了开
36、发效率实现了代码重用,提高了开发效率 多态性多态性多态性多态性实现了现实世界对象的多样性和差异性实现了现实世界对象的多样性和差异性实现了现实世界对象的多样性和差异性实现了现实世界对象的多样性和差异性 聚合性聚合性聚合性聚合性对象是独立的单元,由简单的对象组装成复杂的对象对象是独立的单元,由简单的对象组装成复杂的对象对象是独立的单元,由简单的对象组装成复杂的对象对象是独立的单元,由简单的对象组装成复杂的对象 MicrosoftMicrosoftMicrosoftMicrosoft 面向对象面向对象面向对象面向对象编程就是编程就是编程就是编程就是“累累累累”啊!啊!啊!啊!小小 憩憩 片片 刻刻 MicrosoftMicrosoftMicrosoftMicrosoft 我想,想,想我想,想,想int x1=10;int x2=x1;x1+;/此时 x1=?,x2=?Animal cat1=new Animal();/Animal是一个类cat1.age=10;/设置年龄Animal cat2=cat1;cat1.age+;/此时 cat1.age=?cat2.age=?(10个积分)1 1