4 面向对象编程基础.ppt
《4 面向对象编程基础.ppt》由会员分享,可在线阅读,更多相关《4 面向对象编程基础.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章章 面向对象编程基础面向对象编程基础n教学要求n深入理解面向对象概念n掌握类的声明、成员、构造函数和析构函数n掌握方法的声明、参数、重载与覆盖n掌握属性的声明n教学重点n类和对象n构造函数重载n方法的声明、参数、重载与覆盖n教学难点n对类和对象的理解n类的声明、方法的声明及参数n学时分配:6+6教学内容n基本概念n类的定义以及对象的创建n构造函数和析构函数n方法的参数n方法的重载n属性基本概念n面向对象程序设计(OOP)方法强调直接以问题域中的事物为中心来思考和认识问题,并按照这些事物的本质特性把它们抽象为对象,以作为构成软件系统的基础n对象:是系统中用来描述客观事物的一个实体,它有一
2、组属性(用来描述对象静态特征的数据项)和一组行为(用来描述对象动态特征的数据项)构成,是类的特定实例,对象具有下列特征:n标识(Identity):对象各不相同n行为(Behavior):对象可以执行的操作n状态(State):对象可以存储一些随时间变化的信息n类:是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了抽象的描述,其内部包括属性和行为两个主要部分。一个属于某类的对象称为该类的一个实例。n面向对象程序设计方法的核心是类,利用它可以实现对数据和方法的封装,通过类的继承,能够实现对问题的深入抽象描述。n类相当于一种用户自定义的类型,它和前几章提到的基本类型,如浮点型、整形
3、,有类似的特征。n实例化:对象必须实例化后才能使用类与对象的关系示意图12324512245对象对象对象对象类类抽象n抽象是面向对象程序设计的基本原则之一,抽象与具体相对应。n一个汽车的型号就是抽象,它代表了某个汽车的一切属性,包括最大时速,车身长度,全车净重等。抽象就是对具体事物的概括。n抽象是一种从一般的观点看待事物的方法,它要求程序员集中于事物的本质特征,而不是具体细节或具体实现。面向对象鼓励程序员以抽象的观点看待程序,即程序是一组抽象的对象组成的;另一方面又可以将对象的共同特征进一步抽象出来,从而形成“类”的概念。封装封装n所谓“封装”,就是用一个框架把数据和代码组合在一起,形成一个对
4、象。遵循面向对象数据抽象的要求,一般数据都被封装起来,也就是外部不能直接访问对象的数据,外部能见到的只有提供给外面访问的公共操作(也称接口,对象之间联系的渠道)。在C#中,类是支持对象封装的工具,对象则是封装的基本单元。n封装的对象之间进行通讯的一种机制叫做消息传递。消息是向对象发出的服务请求,是面向对象系统中对象之间交互的途径。消息包含要求接收对象去执行某些活动的信息,以及完成要求所需的其他信息(参数)。发送消息的对象不需要知道接收消息的对象如何对请求予以响应。接收者接收了消息,它就承担了执行指定动作的责任,作为消息的答复,接收者将执行某个方法,来满足所接收的请求。继承继承n继承是面向对象编
5、程技术的一块基石,通过它可以创建分等级层次的类。例如,创建一个汽车的通用类,它定义了汽车的一般属性(如:车轮、方向盘、发动机、车门)和操作方法(如:前进、倒退、刹车、转弯等)。从这个已有的类可以通过继承的方法派生出新的子类,卡车、轿车、客车等,它们都是汽车类的更具体的类,每个具体的类还可增加自己一些特有的东西。继承继承n继承是父类和子类之间共享数据和方法的机制,通常把父类称为基类,子类称为派生类。一个基类可以有任意数目的派生类,从基类派生出的类还可以被派生,一群通过继承相联系的类就构成了类的树型层次结构。n如果一个类有两个或两个以上直接基类,这样的继承结构被称为多重继承或多继承。在现实世界中这
6、种模型屡见不鲜,如:一些组合功能的产品像沙发床,它既有沙发的功能,又有床的功能,沙发床应允许同时继承沙发和床的特征。继承继承n尽管多继承从形式上看比较直观,但在实现上多继承可能引起继承操作或属性的冲突。当今的很多语言已不再支持多继承,C#语言也对多继承的使用进行了限制,它通过接口来实现。接口可以从多个基接口继承。接口可以包含方法、属性、事件和索引器。一个典型的接口就是一个方法声明的列表,接口本身不提供它所定义的成员的实现。所以接口不能被实例化,一个实现接口的类再以适当的方式定义接口中声明的方法。多态性多态性n多态性就其字面上的意思是:多种形式或多种形态。在面向对象编程中,多态是指同一个消息或操
7、作作用于不同的对象,可以有不同的解释,产生不同的执行结果。n在面向对象编程中,多态性有两种,一种是静态多态,一种是动态多态。当在同一个类中,直接调用一个对象的方法时候,系统在编译时,根据传递的参数个数、参数类型以及返回值的类型等信息决定实现何种操作,这就是所谓的静态绑定。当在一个有着继承关系的类层次结构中,间接调用一个对象的方法时候,也就是说,调用经过基类的操作,这种调用只有到系统运行时,才能根据实际情况决定实现何种操作,这就是所谓的动态绑定。C#支持这两种类型的多态,在实现多态上C#可以有几种方式:接口多态性、继承多态性、通过抽象类实现的多态性。nC#中,多态是通过虚方法或重载来实现的。类类
8、n对象是面向对象语言的核心,数据抽象和对象封装是面向对象技术的基本要求,而实现这一切的主要手段和工具就是类。n从编程语言的角度讲,类就是一种数据结构,它定义数据和操作这些数据的代码。n把握面向对象编程的重要一步就是区分类与对象,类是对其成员的一种封装,对类进行对象实例化,并在其数据成员上实施操作才是完成现实任务的根本。实例化后的类为对象,其核心特征便是拥有了一份自己特有的数据成员拷贝。这些为对象所持有的数据成员称之为实例成员。不为对象所持有的数据成员称之为静态成员,在类中用static修饰符声明。n类的成员包含数据成员(常量、域、事件)和函数成员(方法、属性、索引器、操作符、构造函数、析构函数
9、等)。类的声明类的声明n要定义一个新的类,首先要声明它,语法形式:语法形式:属性集信息opt 类修饰符opt class 类名:类基 opt 类主体 optn属性集信息:是C#语言提供给程序员为程序中定义的各种实体附加一些说明信息,这是C#语言的一个重要特征。n类修饰符:可以是以下表3.1所列的几种之一或者是它们的有效组合,但在类声明中,同一修饰符不允许出现多次。类的声明类的声明n类基:它定义该类的直接基类和由该类实现的接口。当多于一项时,用逗号“,”分隔。如果没有显式地指定直接基类,那么它的基类隐含为object。n最简单的类声明语法形式:语法形式:class 类名 类成员 n例如:clas
10、s Point /Point类的访问权限缺省为public int x,y;类的成员类的成员 n类的定义包括类头和类体两部分,其中类体用一对大花括号 括起来,类体用于定义该类的成员。n类成员由两部分组成,一个是类体中以类成员声明形式引入的类成员,另一个则是直接从它的基类继承而来的成员。类成员声明主要包括:常数声明、字段声明、方法声明、属性声明、事件声明、索引器声明、运算符声明、构造函数声明、析构函数声明、静态构造函数、类型声明等。当字段、方法、属性、事件、运算符和构造函数声明中含有static修饰符时,则表明它们是静态成员,否则就是实例成员。n类成员的访问性:主要是指外部对它的访问权限npub
11、lic:成员可以从任何代码访问。成员可以从任何代码访问。nprotected:成员只能从派生类访问。成员只能从派生类访问。ninternal:成员只能从同一程序集的内部访问。成员只能从同一程序集的内部访问。nprotected internal:成员只能从同一程序集内的派生类访问。成员只能从同一程序集内的派生类访问。nprivate:成员只能在当前类的内部访问成员只能在当前类的内部访问,默认值。默认值。n成员的类型n静态成员:在成员前加static,属于类所有,只能由类来访问n非静态成员:属于类的对象所有,只能由对象进行访问类的成员类的成员n1常数声明常数声明一般语法形式语法形式:访问权限修饰
12、符const 类型 变量名=常数其中:其中:n常数访问权限修饰符可以是:new、public、protected、internal、private。n类型必须是:sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string、枚举类型或引用类型。常数表达式的值类型应与目标类型相一致,或者可以通过隐式转换转换成目标类型。n2字段声明字段声明的一般语法形式语法形式:访问权限static类型 变量名=常数n变量声明列表:标识符或者用逗号“,”分隔的多个标识符,并且变量标识符还可用赋值号“=”设定初始值
13、。n静态变量和常量只能由类名来访问,非静态变量只能由对象来访问n只读变量只能在变量定义及其所属类的构造函数中进行修改其值,其他情况下该变量都是只读的,当将其定义为静态的只读变量时,只能在变量定义及其所属类的静态构造函数中进行修改其值。Public Class Studentpublic int a;/公有变量公有变量 public static int c;/静态变量静态变量 private int s_Age;/私有变量私有变量protected int b;/保护的变量保护的变量 const int d=3;/常量常量 public static readonly double PI=3.
14、14/只读变量只读变量变量的初始化n对于静态变量、非静态的对象变量和数组元素,这些变量在自动初始化时都被赋予为本身的默认值。对于所有引用类型的变量,默认值为null,其他类型变量的默认值如表所示。变量类型默认值Sbyte,byte,short,ushort,int,uint,long,ulong0Charx0000Float0.0fDouble0.0dDecimal0.0mBoolFalseenum0举例举例n例:例:通过构造函数对只读字段赋值。using System;public class Areapublic readonly double Radius;/Radius是只读字段pri
15、vate double x,y;/私有字段public double Size;/公有字段public static double Sum=0.0;/静态字段public Area()Radius=1.0;/通过构造函数对radius赋值class Testpublic static void Main()Area s1=new Area();Console.WriteLine(Radius=0,Size=1,Sum=2,s1.Radius,s1.Size,Area.Sum);/静态字段通过类访问Area.Sum,实例字段通过对象访问s1.SizeConsole.Read();构造函数构造函数
16、n 当定义了一个类之后,就可以通过new运算符将其实例化,产生一个对象。为了能规范、安全地使用这个对象,C#提供了对对象进行初始化的方法,这就是构造函数。n在C#中,类的成员字段可以分为实例字段和静态字段,与此相应的构造函数也分为实例构造函数和静态构造函数。n1实例构造函数声明语法形式实例构造函数声明语法形式:属性集信息 opt 构造函数修饰符 opt 标识符(参数列表 opt):base(参数列表 opt)opt :this(参数列表 opt)opt 构造函数语句块 n构造函数修饰符:public、protected、internal、private、extern。n一般地,构造函数总是pu
17、blic类型的。如果是private类型的,表明类不能被外部类实例化。n标识符(参数列表 opt):标识符是构造函数名,必须与这个类同名,不声明返回类型,并且没有任何返回值。这与返回值类型为void的函数不同。构造函数参数可以没有,也可以有一个或多个。这表明构造函数在类的声明中可以有函数名相同,但参数个数不同或者参数类型不同的多种形式,这就是所谓的构造函数重载。构造函数举例构造函数举例n例:例:Time类的构造函数及其重载。using System;public class Timeprivate int hour,minute,second;public Time()hour=minute=
18、second=0;public Time(int h)hour=h;minute=second=0;public Time(int h,int m)hour=h;minute=m;second=0;public Time(int h,int m,int s)hour=h;minute=m;second=s;class Test static void Main()Time t1,t2,t3,t4;/对t1,t2,t3,t4分别调用不同的构造函数 t1=new Time();t2=new Time(8);t3=new Time(8,30);t4=new Time(8,30,30);构造函数构造函
19、数n2.静态构造函数声明语法形式静态构造函数声明语法形式:属性集信息 opt 静态构造函数修饰符 opt 标识符()静态构造函数体 n静态构造函数修饰符:extern static 或者 static extern 如果有extern修饰,则说明这是一个外部静态构造函数,不提供任何实际的实现,所以静态构造函数体仅仅是一个分号。n标识符():标识符是静态构造函数名,必须与这个类同名,静态构造函数不能有参数。n静态构造函数体:静态构造函数的目的是用于对静态字段进行初始化,所以它只能对静态数据成员进行初始化,而不能对非静态数据成员进行初始化。n静态构造函数是不可继承的,而且不能被直接调用。只有创建类
20、的实例或者引用类的任何静态成员时,才能激活静态构造函数,所以在给定的应用程序域中静态构造函数至多被执行一次。如果类中没有声明静态构造函数,而又包含带有初始设定的静态字段,那么编译器会自动生成一个默认的静态构造函数。静态构造函数举例构造函数举例using System;class Screen static int Height;static int Width;int Cur_X,Cur_Y;static Screen()/静态构造函数,对类的静态字段初始化 Height=768;Width=1024;析构函数析构函数n一般来说,创建一个对象时需要用构造函数初始化数据,与此相对应释放一个对象时
21、就用析构函数。所以析构函数是用于实现析构类实例所需操作的方法,声明语法形式:属性集信息 opt extern opt 标识符()析构函数体 n标识符必须与类名相同,但为了区分构造函数,前面需加“”表明它是析构函数。n析构函数不能写返回类型,也不能带参数,因此它不可能被重载,当然它也不能被继承,所以一个类最多只能有一个析构函数。一个类如果没有显式地声明析构函数,则编译器将自动产生一个缺省默认的析构函数。n析构函数不能由程序显式地调用,而是由系统在释放对象时自动调用。如果这个对象是一个派生类对象,那么在调用析构函数时也会产生链式反应,首先执行派生类的析构函数,然后执行基类的析构函数,如果这个基类还
22、有自己的基类,这个过程就会不断重复,直到调用Object类的析构函数为止,其执行顺序正好与构造函数相反。析构函数举例析构函数举例n例:析构函数的调用次序。using System;public class Point private int x,y;Point()Console.WriteLine(Points destructor);public class Circle:Point private double radius;Circle()/缺省约定调用基类的无参构造函数Point()。Console.WriteLine(Circles destructor );class Test p
23、ublic static void Main()Circle b=new Circle();b=null;GC.Collect();GC.WaitForPendingFinalizers();Console.Read();方法方法n方法的含义方法的含义n方法是按照一定格式组织的一段程序代码,在类中用方法声明方式来定义 n它实现由对象或类执行的计算或操作 n方法的声明语法形式:方法的声明语法形式:方法修饰符 返回类型 方法名(形参表)方法体方法的修饰符方法的修饰符修饰符作用说明备注public表示该方法可以在任何地方被访问访问修饰符protected表示该方法可以在它的类体或派生类中被访问,但不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象编程基础 面向 对象 编程 基础
限制150内