87第5章 面向对象程序设计基础

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

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

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

资源描述

第5章面向对象程序设计基础2010-11-19面向对象的软件开发技术是当今计算机技术发展的重要成果和趋势之一。C#是完全面向对象的程序设计语言。类和对象是面向对象程序设计中的重要概念。封装性、继承性和多态性是面向对象的特点。本章主要介绍面向对象程序设计中的基本概念和基于C#的面向对象程序设计的方法。2020/1/232C#程序设计实用教程基本概念5.1面向对象概述5.1.1面向对象的概念•面向对象程序设计(Object-OrientedProgramming)简称OOP技术。•面向对象编程技术是计算机编程技术中一次重大的进步。•在面向对象编程技术出现之前,程序的设计普遍采用的是面向过程的程序设计方法。2020/1/233C#程序设计实用教程5.1.1面向对象的概念•OOP是一种系统化的程序设计方法,强调直接以问题域(即现实世界)中的事物为中心来考虑问题,并按照这些事物的本质特征把它们抽象为对象。•OOP的主要思想是将数据及处理这些数据的操作都封装(Encapsulation)到一个称为类(Class)的数据结构中。使用这个类时,只需要定义一个类的变量即可,这个变量(Object)。通过调用对象的数据成员完成对类的使用。•在这种方法下,编程人员不需要过分关注“如何做”,而是重点关注“做什么”。OOP编程思想较好地适应了现实世界中的问题,因而得以广泛应用。2020/1/234C#程序设计实用教程5.1.2面向对象语言的特点面向对象的编程方式具有继承、封装和多态性等特点。(1)继承在生活中,事物有很多的相似性,这种相似性是人们理解纷繁事物的一个基础。因为事物之间往往具有某种“继承”关系。比如,儿子和父亲往往有许多相似之处,因为儿子从父亲那里遗传了许多特性;2020/1/235C#程序设计实用教程5.1.2面向对象语言的特点继承(inheritance)是面向对象编程技术的一块基石,通过它可以创建分等级层次关系的类。继承是父类和子类之间共享数据和方法的机制,通常把父类称为基类,子类称为派生类。子类可以从其父类中继承属性和方法,通过这种关系模型可以简化类的设计。。2020/1/236C#程序设计实用教程5.1.2面向对象语言的特点例如,可以将水果看作一个父类,那么水果类具有颜色属性。然后再定义一个香蕉类,在定义香蕉类时就不需要定义香蕉类的颜色属性,通过如下继承关系可以使香蕉类具有颜色属性。class水果类{Public颜色;//在水果类中定义颜色属性}class香蕉类:水果类{//香蕉类中其他的属性和方法}2020/1/237C#程序设计实用教程水果类颜色水果类颜色香蕉类香蕉类的其它属性和方法5.1.2面向对象语言的特点(2)封装类是属性和方法的集合,为了实现某项功能而定义类后,开发人员并不需要了解类体内每行代码的具体涵义,只需通过对象来调用类内某个属性或方法即可实现某项功能,这就是类的封装。封装提供了外界与对象进行交互的控制机制,设计和实施者可以公开外界需要直接操作的属性和方法,而把其他的属性和方法隐藏在对象内部。这样可以让软件程序封装化,而且可以避免外界错误地使用属性和方法。2020/1/238C#程序设计实用教程5.1.2面向对象语言的特点(3)多态性类的多态(polymorph)指对于属于同一个类的对象,在不同的场合能够表现出不同的特征。多态性主要指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类具有不同的意义。例如:某个对象,其基类为“笔”,在调用它的“写”方法时,程序会自动判断出它的具体类型,如果是毛笔,则调用毛类对应的“写”方法,如果是铅笔,则调用铅笔对应的“写”方法。2020/1/239C#程序设计实用教程5.2定义类•在C#中,“类”是一种数据结构,它可以包含数据成员(常量和字段)、函数成员(方法、属性、事件、索引器、运算符、构造函数、析构函数)。•类是个静态的概念,如果要使用某个类,就应该定义该类的一个或多个实例,每一个实例就是一个对象。2020/1/2310C#程序设计实用教程5.2.1类的概念类是对象概念在面向对象编程语言中的反映,是相同对象的集合。类描述了一系列在概念上有相同含义的对象,并为这些对象统一定义了属性和方法。类是对象的抽象描述和概括。例如:汽车是一个类,只要是汽车都有车牌,颜色,车轮、车门、发动机等特性,都可以加速,刹车,转方向等行为。这是将所有的汽车进行归纳之后得出的共有的特性,但这些特性都是抽象的,非常不具体,只是用来描述一个类别,并不能具体指一辆汽车。而具体到某辆汽车就是一个对象了,例如:车牌照为苏A2345**的黑色奥迪轿车,这就是汽车类的一个汽车对象。用具体的属性可以在汽车类中唯一确定自己,并且对象具有类的操作2020/1/2311C#程序设计实用教程5.2.1类的概念在C#中,所有的内容都被封装在类中,类是C#的基础,每个类通过属性和方法及其他一些成员来表达事物的状态和行为。事实上,编写C#程序的主要任务就是定义各种类及类的各种成员。2020/1/2312C#程序设计实用教程5.2.2类的声明简单地讲,类是一种数据结构,用于模拟现实中存在的对象和关系,包含静态的属性和动态的方法。下面来看如何声明类及其属性、方法。在声明一个类之前,需要向工程中新添加一个文件。2020/1/2313C#程序设计实用教程5.2.2类的声明1.向工程添加新项目在VS.NET中添加一个新的类文件以及其他新项目。操作很简单,具体步骤如下:(1)在【解决方案浏览器】视图中,在工程上单击右键,再在打开的快捷菜单中选择【添加】→【类】,如图5-1所示。2020/1/2314C#程序设计实用教程5.2.2类的声明(2)在此时弹出的对话框中选择添加类文件,并为新文件命名,以.cs作为后缀,如图5-2所示。(3)单击【打开】按钮后,就可以在【解决方案浏览器】视图中看到这个新的类文件了。(4)双击该类文件,可以在其中声明新的类。当然,也可以把多个功能类似的类放在一个类文件中。2020/1/2315C#程序设计实用教程5.2.2类的声明2.声明类•C#中类的声明需要使用class关键字,并把类的主体放在花括号中,格式如下:[类修饰符]class类名[:基类类名]{//属性//方法}•其中,除了class关键字和类名外,剩余的都是可选项;类名必须是合法的C#标识符,它将作为新定义的类的类型标识符。2020/1/2316C#程序设计实用教程5.2.2类的声明注意:class关键字前面是访问级别。在C#中,类的访问级别由类的修饰符进行限定,类的修饰符如表5-1所示。在上例中,如果类的修饰符为public,这表示该类可以被任何其他类访问。类的名称位于class关键字的后面。2020/1/2317C#程序设计实用教程5.2.2类的声明•以上的类修饰符可以两个或多个组合起来使用,但需要注意下面几点:(1)在一个类声明中,同一类修饰符不能多次出现,否则会出错。。2020/1/2318C#程序设计实用教程5.2.2类的声明(2)在使用public、protected、internal和private这些类修饰符时,要注意这些类修饰符不仅表示所定义类的访问特性,而且还表明类中成员声明中的访问特性,并且它们的可用性也会对派生类造成影响。(3)如果省略类修饰符,则默认为私有修饰符private。(4)对于具有继承关系的类才有基类。如果一个类没有从任何类继承,就不需要基类类名选项。在C#中,一个类只能从另一个类中继承。2020/1/2319C#程序设计实用教程5.2.2类的声明下面以一个学生类的实例,说明该类在C#中的实现。该类的类图如图5-3所示。【例5-1】定义一个学生类。publicclassStudent{//属性//学号、姓名、年龄等//方法//长大、入学、毕业等}2020/1/2320C#程序设计实用教程5.2.3类的静态特性属性(或字段)可以看作是类的静态描述,同样,在定义属性时,也可以使用访问修饰符来定义其访问级别。属性的定义格式如下:[修饰符]数据类型属性名;其中,属性修饰符attribe-modifier包括public、private、protected。下面的例子用来说明public和private修饰符的作用。2020/1/2321C#程序设计实用教程5.2.3类的静态特性2020/1/2322C#程序设计实用教程【例5-2】public和private修饰符的作用。usingSystem;namespaceExample_PublicAndPrivate{///学生类publicclassStudent{//属性publicstringstrName;//公有属性privateintnAge;//私有属性//方法...}///Main函数类classTest{///应用程序的主入口点。staticvoidMain(string[]args){Students=newStudent();s.strName=张三“;//正确s.nAge=20;//错误,不能访问}}}5.2.3类的静态特性上述程序中,定义一个Student类,包含一个公有属性“strName”和一个私有属性“nAge”。在Test类中,试图对学生类的对象s的年龄进行设置,但是Student类的nAge属性是私有的,在其他的类中无法访问,因此程序会报错,报错信息如图5-4所示。而访问其公有属性strName就不会有问题。2020/1/2323C#程序设计实用教程5.2.4类的动态行为:方法类的属性是客观世界实体性质的抽象,而方法是实体所能执行的操作。下面来看如何声明其动态方法。同属性一样,类的方法也具有访问属性,如public、private、protected等,其定义格式如下:[修饰符]返回类型方法名(参数列表);下面的例子为Student类定义了公有方法SetAge()和GetAge(),用于设置和获取其静态属性“年龄”。2020/1/2324C#程序设计实用教程5.2.4类的动态行为【例5-3】类的公有方法的示例。usingSystem;namespaceDeclareMethod{///学生类publicclassStudent{//属性publicstringstrName;//公有属性privateintnAge;//私有属性//方法...publicvoidSetAge(int_nAge){this.nAge=_nAge;}2020/1/2325C#程序设计实用教程5.2.4类的动态行为publicintGetAge(){returnthis.nAge;}}///Main函数类classClass1{staticvoidMain(string[]args){Students=newStudent();s.SetAge(20);//赋值年龄Console.WriteLine(s.GetAge());//获取年龄}}}2020/1/2326C#程序设计实用教程5.2.4类的动态行为程序中为各个学生定义了公有方法SetAge(),其功能是为类的私有属性“年龄”赋值;同时为学生类定义了获取“年龄”属性值的公有方法GetAge()。通过SetAge()方法,并传递适当的参数,便可以为学生s的年龄赋值,而通过调用GetAge()方法获取其年龄,并输出。2020/1/2327C#程序设计实用教程5.2.5创建类的实例-对象•类是现实世界中对象或者关系的模拟,是一个抽象的概念。例如,像“学生”这个概念,世界上并没有一个叫做“学生”的活生生的东西,而只有“张三”或者“李四”这些具体的学生实例,这反应了类和对象的关系。(1)类是具有相同或相似结构、操作和约束规则的对象组成的集合。(2)对象是某一类的具体化实例,每一个类都具有某些共同特征对象的抽象。•C#使用new关键字来实现实例化类得到一个具体的对象

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

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

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

×
保存成功