深入浅出面向对象程序设计.ppt

上传人:b****2 文档编号:2120273 上传时间:2022-10-27 格式:PPT 页数:52 大小:772.50KB
下载 相关 举报
深入浅出面向对象程序设计.ppt_第1页
第1页 / 共52页
深入浅出面向对象程序设计.ppt_第2页
第2页 / 共52页
深入浅出面向对象程序设计.ppt_第3页
第3页 / 共52页
深入浅出面向对象程序设计.ppt_第4页
第4页 / 共52页
深入浅出面向对象程序设计.ppt_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

深入浅出面向对象程序设计.ppt

《深入浅出面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《深入浅出面向对象程序设计.ppt(52页珍藏版)》请在冰豆网上搜索。

深入浅出面向对象程序设计.ppt

深入浅出面向对象程序设计制作人:

刘荣海22本课目标面向对象和面向过程的区别面向对象程序设计的基本概念分享有关学习OOP的的方法面向对象和面向过程面向过程面向过程:

首先分析出解决问题所需要的步骤首先分析出解决问题所需要的步骤;然后用函数把这些步骤一步一步实现然后用函数把这些步骤一步一步实现;使用的时候一个一个依次调用就可以了。

使用的时候一个一个依次调用就可以了。

面向对象面向对象:

把构成问题事务分解成各个对象,建立对象的目把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

物在整个解决问题的步骤中的行为。

五子棋游戏设计思考

(1)分析问题

(2)设计算法(3)编写程序(4)编译运行(5)分析结果面向过程设计回到步骤二进行下一局设计思路一设计思路一面向对象设计设计思路二设计思路二面向对象程序设计的基本概念OOP的三大特性:

u封装u继承u多态2类(class)和对象(object)对象指的是一个实体的实例,在这个实体中包括了特定对象指的是一个实体的实例,在这个实体中包括了特定的属性数据和对这些数据进行操作的函数。

的属性数据和对这些数据进行操作的函数。

对象可以是:

对象可以是:

现实生活中的一个物理对象(一辆汽车,一个人,一本书)现实生活中的一个物理对象(一辆汽车,一个人,一本书)某一概念实体的实例(一个图形,一种管理方式)某一概念实体的实例(一个图形,一种管理方式)类是一组具有相同数据结构和相同操作的对象的集合。

类是一组具有相同数据结构和相同操作的对象的集合。

在一个类中,每个对象都是类的实例,可以使用类中提在一个类中,每个对象都是类的实例,可以使用类中提供的方法。

供的方法。

创建类的对象的操作,被称为类的实例化。

创建类的对象的操作,被称为类的实例化。

2.1类的声明类声明语句声明一个新类,其语法格式为:

类声明语句声明一个新类,其语法格式为:

特征特征修饰符修饰符classclass类名类名:

基类名和任何实现接口的列基类名和任何实现接口的列表表类体类体uu对象引用:

对象引用:

Customerc;Customerc;c=newCustomer();/c=newCustomer();/这中间发生了什么事情?

这中间发生了什么事情?

类的成员一个类就是一个数据结构,可以包含:

l数据成员(常量、字段和事件);l函数成员(方法、属性、下标指示器、操作符、构造函数和析构函数);l嵌套的类型2.2类成员的访问修饰符C#C#支持的类修饰符有:

支持的类修饰符有:

newnew、publicpublic、protectedprotected、internalinternal、privateprivate、abstractabstract和和sealedsealed。

new-new-嵌套类声明时使用,表明隐藏父类中同名的成员。

嵌套类声明时使用,表明隐藏父类中同名的成员。

Public-Public-没有限制(类内部,类对象都可访问)没有限制(类内部,类对象都可访问)Private-Private-只有类内部可以访问只有类内部可以访问Protected-Protected-只有本类内部和子类内部可以访问只有本类内部和子类内部可以访问(本类和子类的对象本类和子类的对象不能访问不能访问)Internal-Internal-同一个命名空间下的对象可以访问;同一个命名空间下的对象可以访问;注意:

注意:

命名空间下的类只有两个显式的修饰符:

命名空间下的类只有两个显式的修饰符:

publicpublic,internalinternal;默认类的访问修饰符是:

默认类的访问修饰符是:

internalinternal2.3构造函数和析构函数构造函数:

构造函数:

构造函数用于初始化构造函数用于初始化构造函数构造函数与与类类同名,且没有返回值同名,且没有返回值构造函数通常是构造函数通常是publicpublic的的可以有多个重载的构造函数可以有多个重载的构造函数如果不写构造函数,系统会提供一个缺省的无参数构造函如果不写构造函数,系统会提供一个缺省的无参数构造函数(如果写了,系统将不再提供)数(如果写了,系统将不再提供)构造函数在创建对象的时候调用(构造函数在创建对象的时候调用(newnew一个类的实例时)一个类的实例时)析构函数:

析构函数:

析构函数用于释放被占用的系统资源析构函数用于释放被占用的系统资源形式上与构造函数相同,除了在名称前面加形式上与构造函数相同,除了在名称前面加:

析构函数不能显示的去调用析构函数不能显示的去调用当对象超出了有效范围,系统自动调用其析构函数;当对象超出了有效范围,系统自动调用其析构函数;关键字thisthisthis只当前对象;只当前对象;例如:

例如:

classstudentclassstudentstringname=ss;stringname=ss;publicstudent(stringname)publicstudent(stringname)this.name=name;this.name=name;publicvoidtest(stringname)publicvoidtest(stringname)Console.WriteLine(name);Console.WriteLine(name);Console.WriteLine(this.name);Console.WriteLine(this.name);2.4属性(property)属性是对现实世界中实体特征的抽象,它提供了对类或对属性是对现实世界中实体特征的抽象,它提供了对类或对象性质的访问;象性质的访问;比如,一个用户的姓名、一个文件的大小、一个窗口的标比如,一个用户的姓名、一个文件的大小、一个窗口的标题,都可以作为属性。

题,都可以作为属性。

C#C#中的属性更充分地体现了中的属性更充分地体现了对象的封装性对象的封装性:

不直接操作类:

不直接操作类的数据内容,而是通过访问器进行访问。

它借助于的数据内容,而是通过访问器进行访问。

它借助于getget和和setset对属性的值进行读写;对属性的值进行读写;内部像函数,外部看像字段内部像函数,外部看像字段在属性的访问声明中:

在属性的访问声明中:

只有只有setset访问器,表明属性的值只能进行设置而不能读出。

访问器,表明属性的值只能进行设置而不能读出。

只有只有getget访问器,表明属性的值是只读的,不能改写。

访问器,表明属性的值是只读的,不能改写。

同时具有同时具有setset访问器和访问器和getget访问器,表明属性的值的读写都访问器,表明属性的值的读写都是允许的。

是允许的。

2.5static修饰符静态成员和非静态成员静态成员和非静态成员:

静态成员静态成员属于属于该类的所有对象实例;(无论这个类创建该类的所有对象实例;(无论这个类创建了多少个副本,一个静态成员在内存中只占有一块区域)了多少个副本,一个静态成员在内存中只占有一块区域)类的非静态成员属于类的实例所有,每创建一个类的实例,类的非静态成员属于类的实例所有,每创建一个类的实例,都在内存中为非静态成员开辟了一块区域。

都在内存中为非静态成员开辟了一块区域。

静态成员在类外部使用静态成员在类外部使用类名访问类名访问非静态方法在类外部非静态方法在类外部使用实例名访问使用实例名访问静态方法和非静态方法静态方法和非静态方法:

静态方法中:

只能直接访问其他静态成员和其他静态方法;静态方法中:

只能直接访问其他静态成员和其他静态方法;静态方法在类外部使用类名访问静态方法在类外部使用类名访问非静态方法在类外部使用实例名访问非静态方法在类外部使用实例名访问2.6重载方法重载方法名相同,方法参数列表不同;操作符重载必须声明为static和public运算符操作的是对象一元运算符重载二元运算符重载,其中有两个参数,分别为左操作数和右操作数练习11、设计一个类表示银行账户,数据成员有姓名、设计一个类表示银行账户,数据成员有姓名、账号、余额;可以进行的操作有:

取款、存款、账号、余额;可以进行的操作有:

取款、存款、打印账户信息;打印账户信息;22、设计一个类来表示矩阵,并重载矩阵的加法;、设计一个类来表示矩阵,并重载矩阵的加法;33、设计一个类(、设计一个类(playerplayer),表示游戏中的角色),表示游戏中的角色(该角色有耐力和体力),重载游戏角色的(该角色有耐力和体力),重载游戏角色的+运运算符,该运算符表示升级;算符,该运算符表示升级;如:

如:

playerp=newplayer();playerp=newplayer();p+;p+;/表示该角色升级,耐力和体力分别加表示该角色升级,耐力和体力分别加100100;2222本章目标类的继承多态性抽象类密封类接口接口和抽象类类和结构的区别委托和事件3类的继承现实世界中的许多实体之间不是相互孤立的,它们往往具有共同的特征,也存在内在的差别。

人们可以采用层次结构来描述这些实体之间的相似之处和不同之处。

3.1继承规则C#C#中,派生类只能从一个类中继承(中,派生类只能从一个类中继承(单继承单继承););继承是可传递的继承是可传递的。

如果。

如果CC从从BB中派生,中派生,BB又从又从AA中派生,中派生,那么那么CC不仅继承了不仅继承了BB中声明的成员,同样也继承了中声明的成员,同样也继承了AA中的中的成员。

成员。

ObjectObject类作为所有类的基类。

类作为所有类的基类。

派生类应当是对基类的扩展。

派生类可以添加新的成员,派生类应当是对基类的扩展。

派生类可以添加新的成员,但不能除去己经继承的成员的定义。

但不能除去己经继承的成员的定义。

构造函数和析构函数不能被继承构造函数和析构函数不能被继承。

除此以外的其它成员,。

除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。

基类不论对它们定义了怎样的访问方式,都能被继承。

基类中成员的访问方式只能决定派生类能否访问它们。

中成员的访问方式只能决定派生类能否访问它们。

类的继承中构造函数如何执行当创建派生类的对象时:

系统是先创建基类,然后再创当创建派生类的对象时:

系统是先创建基类,然后再创建子类;建子类;即即,系统将会先调用基类的构造函数再调用派生类的构造系统将会先调用基类的构造函数再调用派生类的构造函数函数;注意:

注意:

实例化子类时,默认是调用父类的无参数构造函数实例化子类时,默认是调用父类的无参数构造函数如果想调用父类有参构造函数,需要在子类的构造函数如果想调用父类有参构造函数,需要在子类的构造函数后面显示的去调用,如:

后面显示的去调用,如:

publicTriangle(doublex,doubley)publicTriangle(doublex,doubley):

base(x,y):

base(x,y)3.2类的覆盖子类的成员声明中,可以声明与继承而来的成员同名的成子类的成员声明中,可以声明与继承而来的成员同名的成员;这时我们称派生类的成员覆盖员;这时我们称派生类的成员覆盖(hide)(hide)了基类的成员。

了基类的成员。

这种情况下,编译器不会报告错误,但会给出一个警告。

这种情况下,编译器不会报告错误,但会给出一个警告。

对派生类的成员对派生类的成员使用使用newnew关键字关键字,可以关闭这个警告。

,可以关闭这个警告。

3.3Base关键字basebase关键字主要是为派生类调用基类成员提供一个简写的关键字主要是为派生类调用基类成员提供一个简写的方法;方法;使用使用basebase关键字对基类成员的访问格式为:

关键字对基类成员的访问格式为:

base.base.标识符标识符1多态性“多态性”一词最早用于生物学,指同一种族的生物体具有相同的特性。

在C#中,多态性的定义是:

同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。

C#支持两种类型的多态性:

(1)编译时的多态性

(2)运行时的多态性编译时的多态性(重载Overlo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1