c#教案-第5章(理论教学)

更新时间:2024-05-27 02:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

大理学院课程教案

(理论教学)

课程名称:C#面向对象程序设计 课程类型:( 1 )1、必修;2、选修;3、其它

授课对象:计算机科学与技术 专业(本科) 2010 级 1 班 授课时间: 2011 至 2012 学年 三 学期 计划学时: 72学时(其中:理论 36 ,实验:36 )

任课教师: 杜英国 所属学院: 数计学院 课程管理部门(教研室): 软件教研室

大理学院教务处 制

大理学院课程教案(教学内容)

课程名称:C#面向对象程序设计

教 材:《C#程序设计实用教程》 清华大学出版社 ,黄兴荣 编著,2009年第1版

讲 授 人:杜英国 专业技术职务:讲师 学 历:研究生 学 位:硕士 所属章节:第5章 计划学时:6 教学目的和要求:

? 本讲主要讲述了c#语言的面向对象技术,包括面向对象的基本概念、面向对象的程序

设计方法及c#中的类、包、对象、的特性。通过本讲的学习,同学们可以使用面向对象技术编写c#程序。

? 应深刻理解各知识点的概念,使用上一讲的编程基础知识及面向对象技术,编写简单

的c#类,由浅至深,养成风格良好的编程习惯。

教学重点:

1. 仔细体会面向对象编程的思想,熟练理解类和对象的概念,理解面向对象的特性,会编写简单的类,逐渐掌握面向对象编程的方法。

2. 注意c#语言中,不允许多重继承,以及类变量和类方法的使用。

教学难点:

1.理解方法重载和方法重写,不要混淆了两者的使用。 2. 类变量和类方法的使用。

教学方法:课堂讲授 使用教具:多媒体系统 思 考 题: 1、c#的优点;

参考资料:

1. 《think in c#》 2. www.sun.com

第1页

大理学院课程教案(教学内容)

5.1 面向对象技术基础 5.1.1 面向对象的基本概念 面向对象的基本思想 面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。 1. 对象的基本概念 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。 主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作主动服务)。 2. 类的基本概念 把众多的事物归纳、划分成一些类是人类在认识客观世界时经常采用的思维方法。分类的原则是抽象。类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。 3. 消息 消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。 5.1.2 面向对象的基本特征 1.封装性 封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: ◇ 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。

第2页

大理学院课程教案(教学内容)

◇ 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。 封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的\交叉感染\,使软件错误能够局部化,大大减少查错和排错的难度。 2.继承性 特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。例如,轮船、客轮;人、大人。一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这称为多继承。例如,客轮是轮船和客运工具的特殊类。在c#语言中,通常我们称一般类为父类(superclass,超类),特殊类为子类(subclass)。 3.多态性 对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:\几何图形\的\绘图\方法,\椭圆\和\多边形\都是\几何图\的子类,其\绘图\方法功能不同。 5.1.3 面向对象程序设计方法 OOA-Object Oriented Analysis 面向对象的分析 OOD-Object Oriented Design 面向对象的设计 OOI-Object Oriented Implementation 面向对象的实现 5.2 C#语言的面向对象特性 5.2.1 类 类是c#中的一种重要的复合数据类型,是组成c#程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的原形。一个类的实现包括两个部分:类声明和类体。 1.类声明: [public][abstract|final] class className [extends superclassName] [implements interfaceNameList] {……} 其中,修饰符public,abstract,final 说明了类的属性,className为类名,superclassName为类的父类的名字,interfaceNameList为类所实现的接口列表。

第3页

大理学院课程教案(教学内容)

2.类体 类体定义如下: class className {[public | protected | private ] [static] [final] [transient] [volatile] type variableName; //成员变量 [public | protected | private ] [static] [final | abstract] [native] [synchronized] returnType methodName([paramList]) [throws exceptionList] {statements} //成员方法 } 3.成员变量 成员变量的声明方式如下: [public | protected | private ] [static] [final] [transient] [volatile] type variableName; //成员变量 其中, static: 静态变量(类变量);相对于实例变量 final: 常量 transient: 暂时性变量,用于对象存档 volatile: 贡献变量,用于并发线程的共享 5.成员方法 方法的实现包括两部分内容:方法声明和方法体。 [public | protected | private ] [static] [final | abstract] [native] [synchronized]

第4页

大理学院课程教案(教学内容)

2. 对象的使用 通过运算符\可以实现对变量的访问和方法的调用。变量和方法可以通过设定访问权限来限制其它对象对它的访问。 ◇调用对象的变量 格式:objectReference.variable objectReference是一个已生成的对象,也可以是能生成对象的表达式 例: p.x= 10; tx=new Point( ).x; ◇调用对象的方法 格式:objectReference.methodName([paramlist]); 例如:p.move(30,20); new Point( ).move(30,20); 3. 对象的清除 当不存在对一个对象的引用时,该对象成为一个无用对象。C#的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。 System.gc( ); 当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。 5.2.3 面向对象特性 c#语言中有三个典型的面向对象的特性:封装性、继承性和多态性,下面将详细阐述。 1. 封装性 c#语言中,对象就是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏。通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。 ◇ 类体定义的一般格式: class className { [public | protected | private ] [static] [final] [transient] [volatile] type

第10页

大理学院课程教案(教学内容)

variableName; //成员变量 [public | protected | private ] [static] [final | abstract] [native] [synchronized] returnType methodName([paramList]) [throws exceptionList] {statements} //成员方法 } ◇ c#类中的限定词 c#语言中有四种不同的限定词,提供了四种不同的访问权限。 1) private 类中限定为private的成员,只能被这个类本身访问。 如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。 2) default 类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。 3) protected 类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。 4) public 类中限定为public的成员,可以被所有的类访问。 表3-1列出了这些限定词的作用范围。 【表3-1】 c#中类的限定词的作用范围比较 private default protected public 2. 继承性

同一个类 同一个包 * * * * * * * 不同包的子类 不同包非子类 * * * 第11页

大理学院课程教案(教学内容)

通过继承实现代码复用。C#中所有的类都是通过直接或间接地继承c#.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但C#不支持多重继承,即一个类从多个超类派生的能力。 ◇ 创建子类 格式: class SubClass extends SuperClass { … } ◇ 成员变量的隐藏和方法的重写 子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为。 例如: class SuperClass{ int x; … void setX( ){ x=0; } … } class SubClass extends SuperClass{ int x; //隐藏了父类的变量x … void setX( ) { //重写了父类的方法 setX() x=5; } …. } 注意:子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同。 ◇ super c#中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super 的使用有三种情况:

第12页

大理学院课程教案(教学内容)

1)访问父类被隐藏的成员变量,如: super.variable; 2)调用父类中被重写的方法,如: super.Method([paramlist]); 3)调用父类的构造函数,如: super([paramlist]); 【例3-5】 import c#.io.*; class SuperClass{ int x; SuperClass( ) { x=3; Console.WriteLine(\ } void doSomething( ) { Console.WriteLine(\ } } class SubClass extends SuperClass { int x; SubClass( ) { super( ); //调用父类的构造方法 x=5; //super( ) 要放在方法中的第一句 Console.WriteLine(\

第13页

大理学院课程教案(教学内容)

} void doSomething( ) { super.doSomething( ); //调用父类的方法 Console.WriteLine(\ Console.WriteLine(\ } } public class Inheritance { public static void main(String args[]) { SubClass subC=new SubClass(); subC.doSomething(); } } 3. 多态性 在c#语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。 1) 编译时多态 在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。 2) 运行时多态 由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。 ◇ 重写方法的调用原则:c#运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。 在例3-6中,父类对象a引用的是子类的实例,所以,c#运行时调用子类B的callme方法。

第14页

大理学院课程教案(教学内容)

【例3-6】 import c#.io.*; class A{ void callme( ) { Console.WriteLine(\ } } class B extends A{ void callme( ) { Console.WriteLine(\ } } public class Dispatch{ public static void main(String args[]) { A a=new B(); a.callme( ); } } ◇ 方法重写时应遵循的原则: 1)改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。 2)改写后的方法不能比重写的方法产生更多的例外。 5. 其它 ◇ final 关键字 final 关键字可以修饰类、类的成员变量和成员方法,但final 的作用不同。

第15页

大理学院课程教案(教学内容)

1) final 修饰成员变量: final修饰变量,则成为常量,例如 final type variableName; 修饰成员变量时,定义时同时给出初始值,而修饰局部变量时不做要求。 2) final 修饰成员方法: final修饰方法,则该方法不能被子类重写 final returnType methodName(paramList){ … } 3) final 类: final修饰类,则类不能被继承 final class finalClassName{ … } ◇ 实例成员和类成员 用static 关键字可以声明类变量和类方法,其格式如下: static type classVar; static returnType classMethod({paramlist}) { … } 如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。 1) 实例变量和类变量 每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。 类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问,无需先生成一

第16页

大理学院课程教案(教学内容)

个实例对象,也可以通过实例对象访问类变量。 2) 实例方法和类方法 实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。 但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。 例3-7 是关于实例成员和类成员的例子。 【例3-7】 class Member { static int classVar; int instanceVar; static void setClassVar(int i) { classVar=i; // instanceVar=i; // 类方法不能访问实例变量 } static int getClassVar() { return classVar; } void setInstanceVar(int i) { classVar=i; //实例方法不但可以访问类变量,也可以实例变量 instanceVar=i; } int getInstanceVar( ) { return instanceVar; } } public class MemberTest{ public static void main(String args[]) {

第17页

大理学院课程教案(教学内容)

Member m1=new member(); Member m2=new member(); m1.setClassVar(1); m2.setClassVar(2); Console.WriteLine(\ m2.ClassVar=\ m1.setInstanceVar(11); m2.setInstanceVar(22); Console.WriteLine(\ ()+\ } } ◇ 类c#.lang.Object 类c#.lang.Object处于c#开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。下面,我们介绍一些常用的方法。 equals() :比较两个对象(引用)是否相同。 getClass():返回对象运行时所对应的类的表示,从而可得到相应的信息。 toString():用来返回对象的字符串表示。 finalize():用于在垃圾收集前清除对象。 notify(),notifyAll(),wait():用于多线程处理中的同步。 抽象类 c#语言中,用abstract 关键字来修饰一个类时,这个类叫做抽象类,用abstract 关键字来修饰一个方法时,这个方法叫做抽象方法。格式如下: abstract class abstractClass{ …} //抽象类 abstract returnType abstractMethod([paramlist]) //抽象方法 抽象类必须被继承,抽象方法必须被重写。抽象方法只需声明,无需实现;抽象类不能

第18页

大理学院课程教案(教学内容)

被实例化,抽象类不一定要包含抽象方法。若类中包含了抽象方法,则该类必须被定义为抽象类。 接口 接口是抽象类的一种,只包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。它的用处体现在下面几个方面: ◇ 通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。 ◇ 通过接口指明多个类需要实现的方法。 ◇ 通过接口了解对象的交互界面,而无需了解对象所对应的类。 1)接口的定义 接口的定义包括接口声明和接口体。 接口声明的格式如下: [public] interface interfaceName[extends listOfSuperInterface] { … } extends 子句与类声明的extends子句基本相同,不同的是一个接口可有多个父接口,用逗号隔开,而一个类只能有一个父类。 接口体包括常量定义和方法定义 常量定义格式为:type NAME=value; 该常量被实现该接口的多个类共享; 具有public ,final, static的属性。 方法体定义格式为:(具有 public和abstract属性) returnType methodName([paramlist]); 2)接口的实现 在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分开。 3) 接口类型的使用 接口作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。

第19页

本文来源:https://www.bwwdw.com/article/0rp7.html

Top