面向对象程序设计基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章面向对象程序设计基础面向对象的软件开发技术是当今计算机技术发展的重要成果和趋势之一。C#是完全面向对象的程序设计语言。类和对象是面向对象程序设计中的重要概念。封装性、继承性和多态性是面向对象的特点。本章主要介绍面向对象程序设计中的基本概念和基于C#的面向对象程序设计的方法。2020/4/52C#程序设计实用教程5.1面向对象概述5.1.1面向对象的概念•面向对象程序设计(Object-OrientedProgramming)简称OOP技术。•面向对象编程技术是计算机编程技术中一次重大的进步。•在面向对象编程技术出现之前,程序的设计普遍采用的是面向过程的程序设计方法。2020/4/53C#程序设计实用教程5.1.1面向对象的概念•OOP是一种系统化的程序设计方法,强调直接以问题域(即现实世界)中的事物为中心来考虑问题,并按照这些事物的本质特征把它们抽象为对象。•OOP的主要思想是将数据及处理这些数据的操作都封装(Encapsulation)到一个称为类(Class)的数据结构中。使用这个类时,只需要定义一个类的变量即可,这个变量(Object)通过调用对象的数据成员完成对类的使用。•在这种方法下,编程人员不需要过分关注“如何做”,而是重点关注“做什么”。OOP编程思想较好地适应了现实世界中的问题,因而得以广泛应用。2020/4/54C#程序设计实用教程5.1.2面向对象语言的特点面向对象的编程方式具有继承、封装和多态性等特点。(1)继承在生活中,事物有很多的相似性,这种相似性是人们理解纷繁事物的一个基础。因为事物之间往往具有某种“继承”关系。比如,儿子和父亲往往有许多相似之处,因为儿子从父亲那里遗传了许多特性;汽车与卡车、轿车、客车之间存在一般化与具体化的关系,它们也可以用继承来实现。2020/4/55C#程序设计实用教程5.1.2面向对象语言的特点继承(inheritance)是面向对象编程技术的一块基石,通过它可以创建分等级层次关系的类。继承是父类和子类之间共享数据和方法的机制,通常把父类称为基类,子类称为派生类。子类可以从其父类中继承属性和方法,通过这种关系模型可以简化类的设计。假如已经定义了A类,接下来准备定义B类,而B类中有很多属性和方法与A类相同,那么就可以实现B类继承于A类,这样就无须再在B类中定义A类中已具有的属性和方法,从而可以在很大程序上提高程序的开发效率,提高代码利用率。2020/4/56C#程序设计实用教程5.1.2面向对象语言的特点例如,可以将水果看作一个父类,那么水果类具有颜色属性。然后再定义一个香蕉类,在定义香蕉类时就不需要定义香蕉类的颜色属性,通过如下继承关系可以使香蕉类具有颜色属性。class水果类{Public颜色;//在水果类中定义颜色属性}class香蕉类:水果类{//香蕉类中其他的属性和方法}2020/4/57C#程序设计实用教程5.1.2面向对象语言的特点(2)封装类是属性和方法的集合,为了实现某项功能而定义类后,开发人员并不需要了解类体内每行代码的具体涵义,只需通过对象来调用类内某个属性或方法即可实现某项功能,这就是类的封装。封装提供了外界与对象进行交互的控制机制,设计和实施者可以公开外界需要直接操作的属性和方法,而把其他的属性和方法隐藏在对象内部。这样可以让软件程序封装化,而且可以避免外界错误地使用属性和方法。2020/4/58C#程序设计实用教程5.1.2面向对象语言的特点以汽车为例,厂商把汽车的颜色公开给外界,外界想怎么改颜色都可以的,但是防盗系统的内部构造是隐藏起来的;更换汽缸可以是公开的行为,但是汽缸和发动机的协调方法就没有必要让用户知道了。2020/4/59C#程序设计实用教程5.1.2面向对象语言的特点(3)多态性类的多态(polymorph)指对于属于同一个类的对象,在不同的场合能够表现出不同的特征。多态性主要指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类具有不同的意义。例如:某个对象,其基类为“笔”,在调用它的“写”方法时,程序会自动判断出它的具体类型,如果是毛笔,则调用毛类对应的“写”方法,如果是铅笔,则调用铅笔对应的“写”方法。2020/4/510C#程序设计实用教程5.2定义类•在C#中,“类”是一种数据结构,它可以包含数据成员(常量和字段)、函数成员(方法、属性、事件、索引器、运算符、构造函数、析构函数)。•类是个静态的概念,如果要使用某个类,就应该定义该类的一个或多个实例,每一个实例就是一个对象。如果要使用某个类,只要向该类发送消息即可,而对象会利用自身存在的函数来响应接收的消息。•类类型支持继承,继承是一种使派生类可以对基类进行扩展和专用化的机制。2020/4/511C#程序设计实用教程5.2.1类的概念类是对象概念在面向对象编程语言中的反映,是相同对象的集合。类描述了一系列在概念上有相同含义的对象,并为这些对象统一定义了属性和方法。类是对象的抽象描述和概括。例如:车是一个类,自行车、汽车、火车也是类。但是自行车、汽车、火车都是车这个类的子类。因为他们有共同的特点都是交通工具,都有轮子,都可以运输。而汽车有颜色,车轮、车门、发动机,这是和自行车、火车的不同之处,是汽车类自己的属性。而具体到某辆汽车就是一个对象了,例如:车牌照为苏A2345**的黑色奥迪轿车。用具体的属性可以在汽车类中唯一确定自己,并且对象具有类的操作。简而言之,类是C#中最为强大的数据类型,它定义了数据类型的数据和行为。2020/4/512C#程序设计实用教程5.2.1类的概念在C#中,所有的内容都被封装在类中,类是C#的基础,每个类通过属性和方法及其他一些成员来表达事物的状态和行为。事实上,编写C#程序的主要任务就是定义各种类及类的各种成员。2020/4/513C#程序设计实用教程5.2.2类的声明简单地讲,类是一种数据结构,用于模拟现实中存在的对象和关系,包含静态的属性和动态的方法。下面来看如何声明类及其属性、方法。在声明一个类之前,需要向工程中新添加一个文件。2020/4/514C#程序设计实用教程5.2.2类的声明1.向工程添加新项目在VS.NET中添加一个新的类文件以及其他新项目。操作很简单,具体步骤如下:(1)在【解决方案浏览器】视图中,在工程上单击右键,再在打开的快捷菜单中选择【添加】→【类】,如图5-1所示。2020/4/515C#程序设计实用教程5.2.2类的声明(2)在此时弹出的对话框中选择添加类文件,并为新文件命名,以.cs作为后缀,如图5-2所示。(3)单击【打开】按钮后,就可以在【解决方案浏览器】视图中看到这个新的类文件了。(4)双击该类文件,可以在其中声明新的类。当然,也可以把多个功能类似的类放在一个类文件中。2020/4/516C#程序设计实用教程5.2.2类的声明2.声明类•C#中类的声明需要使用class关键字,并把类的主体放在花括号中,格式如下:[类修饰符]class类名[:基类类名]{//属性//方法}•其中,除了class关键字和类名外,剩余的都是可选项;类名必须是合法的C#标识符,它将作为新定义的类的类型标识符。2020/4/517C#程序设计实用教程5.2.2类的声明注意:为了促进C#程序的标准化和可读性,应尽量采用.NETFramework推荐的类命名规则:类名尽量是一个名词或者名词短语,首字母大写,并尽量避免缩写。class关键字前面是访问级别。在C#中,类的访问级别由类的修饰符进行限定,类的修饰符如表5-1所示。在上例中,如果类的修饰符为public,这表示该类可以被任何其他类访问。类的名称位于class关键字的后面。2020/4/518C#程序设计实用教程5.2.2类的声明•以上的类修饰符可以两个或多个组合起来使用,但需要注意下面几点:(1)在一个类声明中,同一类修饰符不能多次出现,否则会出错。(2)new类修饰符仅允许在嵌套类中表示类声明时使用,表明类中隐藏了由基类中继承而来的、与基类中同名的成员。2020/4/519C#程序设计实用教程5.2.2类的声明(3)在使用public、protected、internal和private这些类修饰符时,要注意这些类修饰符不仅表示所定义类的访问特性,而且还表明类中成员声明中的访问特性,并且它们的可用性也会对派生类造成影响。(4)抽象类修饰符abstract和密封类修饰符sealed都是受限类修饰符。2020/4/520C#程序设计实用教程5.2.2类的声明(5)如果省略类修饰符,则默认为修饰符internal。(6)对于具有继承关系的类才有基类。如果一个类没有从任何类继承,就不需要基类类名选项。在C#中,一个类只能从另一个类中继承,而不能从多个类中继承;而在C++及其他面向对象的程序设计语言中,一个类可以从多个其他类中继承。如果一个类想继承多个类的特点,可以采用接口的方法实现。2020/4/521C#程序设计实用教程Msdn:搜索accessmodifiersClassandStructAccessibilityClassesandstructsthataredeclareddirectlywithinanamespace(inotherwords,thatarenotnestedwithinotherclassesorstructs)canbeeitherpublicorinternal.Internalisthedefaultifnoaccessmodifierisspecified.ClassandStructMemberAccessibilityClassmembers(includingnestedclassesandstructs)canbedeclaredwithanyofthefivetypesofaccess.Structmemberscannotbedeclaredasprotectedbecausestructsdonotsupportinheritance.访问权限控制图解publicThetypeormembercanbeaccessedbyanyothercodeinthesameassemblyoranotherassemblythatreferencesit.privateThetypeormembercanbeaccessedonlybycodeinthesameclassorstruct.protectedThetypeormembercanbeaccessedonlybycodeinthesameclassorstruct,orinaclassthatisderivedfromthatclass.internalThetypeormembercanbeaccessedbyanycodeinthesameassembly,butnotfromanotherassembly.protectedinternalThetypeormembercanbeaccessedbyanycodeintheassemblyinwhichitisdeclared,orfromwithinaderivedclassinanotherassembly.Accessfromanotherassemblymusttakeplacewithinaclassdeclarationthatderivesfromtheclassinwhichtheprotectedinternalelementisdeclared,anditmusttakeplacethroughaninstanceofthederivedclasstype.5.2.2类的声明下面以一个学生类的实例,说明该类在C#中的实现。该类的类图如图5-3所示。【例5-1】定义一个学生类。publicclassStudent{//属性//学号

1 / 189
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功