您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > c#教案-第5章(理论教学)
大理学院课程教案(理论教学)课程名称:C#面向对象程序设计课程类型:(1)1、必修;2、选修;3、其它授课对象:计算机科学与技术专业(本科)2010级1班授课时间:2011至2012学年三学期计划学时:72学时(其中:理论36,实验:36)任课教师:杜英国所属学院:数计学院课程管理部门(教研室):软件教研室大理学院教务处制大理学院课程教案(教学内容)第1页课程名称:C#面向对象程序设计教材:《C#程序设计实用教程》清华大学出版社,黄兴荣编著,2009年第1版讲授人:杜英国专业技术职务:讲师学历:研究生学位:硕士所属章节:第5章计划学时:6教学目的和要求:本讲主要讲述了c#语言的面向对象技术,包括面向对象的基本概念、面向对象的程序设计方法及c#中的类、包、对象、的特性。通过本讲的学习,同学们可以使用面向对象技术编写c#程序。应深刻理解各知识点的概念,使用上一讲的编程基础知识及面向对象技术,编写简单的c#类,由浅至深,养成风格良好的编程习惯。教学重点:1.仔细体会面向对象编程的思想,熟练理解类和对象的概念,理解面向对象的特性,会编写简单的类,逐渐掌握面向对象编程的方法。2.注意c#语言中,不允许多重继承,以及类变量和类方法的使用。教学难点:1.理解方法重载和方法重写,不要混淆了两者的使用。2.类变量和类方法的使用。教学方法:课堂讲授使用教具:多媒体系统思考题:1、c#的优点;参考资料:1.《thinkinc#》2.大理学院课程教案(教学内容)第2页5.1面向对象技术基础5.1.1面向对象的基本概念面向对象的基本思想面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。1.对象的基本概念对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作主动服务)。2.类的基本概念把众多的事物归纳、划分成一些类是人类在认识客观世界时经常采用的思维方法。分类的原则是抽象。类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。3.消息消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。5.1.2面向对象的基本特征1.封装性封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:◇把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。大理学院课程教案(教学内容)第3页◇信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的交叉感染,使软件错误能够局部化,大大减少查错和排错的难度。2.继承性特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。例如,轮船、客轮;人、大人。一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这称为多继承。例如,客轮是轮船和客运工具的特殊类。在c#语言中,通常我们称一般类为父类(superclass,超类),特殊类为子类(subclass)。3.多态性对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:几何图形的绘图方法,椭圆和多边形都是几何图的子类,其绘图方法功能不同。5.1.3面向对象程序设计方法OOA-ObjectOrientedAnalysis面向对象的分析OOD-ObjectOrientedDesign面向对象的设计OOI-ObjectOrientedImplementation面向对象的实现5.2C#语言的面向对象特性5.2.1类类是c#中的一种重要的复合数据类型,是组成c#程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的原形。一个类的实现包括两个部分:类声明和类体。1.类声明:[public][abstract|final]classclassName[extendssuperclassName][implementsinterfaceNameList]{……}其中,修饰符public,abstract,final说明了类的属性,className为类名,superclassName为类的父类的名字,interfaceNameList为类所实现的接口列表。大理学院课程教案(教学内容)第4页2.类体类体定义如下:classclassName{[public|protected|private][static][final][transient][volatile]typevariableName;//成员变量[public|protected|private][static][final|abstract][native][synchronized]returnTypemethodName([paramList])[throwsexceptionList]{statements}//成员方法}3.成员变量成员变量的声明方式如下:[public|protected|private][static][final][transient][volatile]typevariableName;//成员变量其中,static:静态变量(类变量);相对于实例变量final:常量transient:暂时性变量,用于对象存档volatile:贡献变量,用于并发线程的共享5.成员方法方法的实现包括两部分内容:方法声明和方法体。[public|protected|private][static][final|abstract][native][synchronized]大理学院课程教案(教学内容)第5页returnTypemethodName([paramList])[throwsexceptionList]//方法声明{statements}//方法体方法声明中的限定词的含义:static:类方法,可通过类名直接调用abstract:抽象方法,没有方法体final:方法不能被重写native:集成其它语言的代码synchronized:控制多个并发线程的访问◇方法声明方法声明包括方法名、返回类型和外部参数。其中参数的类型可以是简单数据类型,也可以是复合数据类型(又称引用数据类型)。对于简单数据类型来说,c#实现的是值传递,方法接收参数的值,但不能改变这些参数的值。如果要改变参数的值,则用引用数据类型,因为引用数据类型传递给方法的是数据在内存中的地址,方法中对数据的操作可以改变数据的值。例3-1说明了简单数据类型与引用数据的区别。【例3-1】importc#.io.*;publicclassPassTest{floatptValue;publicstaticvoidmain(Stringargs[]){intval;PassTestpt=newPassTest();val=11;Console.WriteLine(OriginalIntValueis:+val);pt.changeInt(val);//值参数大理学院课程教案(教学内容)第6页Console.WriteLine(IntValueafterChangeis:+val);/*值参数值的修改,没有影响值参数的值*/pt.ptValue=101f;Console.WriteLine(OriginalptValueis:+pt.ptValue);pt.changeObjValue(pt);//引用类型的参数Console.WriteLine(ptValueafterChangeis:+pt.ptValue);/*引用参数值的修改,改变了引用参数的值*/}publicvoidchangeInt(intvalue){value=55;//在方法内部对值参数进行了修改}publicvoidchangeObjValue(PassTestref){ref.ptValue=99f;//在方法内部对引用参数进行了修改}}查看运行结果◇方法体方法体是对方法的实现,它包括局部变量的声明以及所有合法的C#指令。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏。例3-2说明了局部变量z和类成员变量z的作用域是不同的。【例3-2】importc#.io.*;classVariable{intx=0,y=0,z=0;//类的成员变量voidinit(intx,inty){大理学院课程教案(教学内容)第7页this.x=x;this.y=y;intz=5;//局部变量Console.WriteLine(**ininit**);Console.WriteLine(x=+x+y=+y+z=+z);}}publicclassVariableTest{publicstaticvoidmain(Stringargs[]){Variablev=newVariable();Console.WriteLine(**beforeinit**);Console.WriteLine(x=+v.x+y=+v.y+z=+v.z);v.init(20,30);Console.WriteLine(**afterinit**);Console.WriteLine(x=+v.x+y=+v.y+z=+v.z);}}上例中我们用到了this,这是因为init()方法的参数名与类的成员变量x,y的名字相同,而参数名会隐藏成员变量,所以在方法中,为了区别参数和类的成员变量,我们必须使用this。this-----用在一个方法中引用当前对象,它的值是调用该方法的对象。返回值须与返回类型一致,或者完全相同,或是其子类。当返回类型是接口时,返回值必须实现该接口。5.方法重载方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如int与long。【例3-3】大理学院课程教案(教学内容)第8页importc#.io.*;classMethodOverloading{voidreceive(inti){Console.WriteLine(Receiveoneintdata);Console.WriteLine(i=+i);}voidreceive(intx,inty){Console.WriteLine(Receivetwointdatas);Console.WriteLine(x=+x+y=+y);}}publicclassMethodOverloadingTest{publicstaticvoidmain(Stringargs[]){Me
本文标题:c#教案-第5章(理论教学)
链接地址:https://www.777doc.com/doc-1840372 .html