1、附件2:面向对象程序设计课程实验实验大纲1. 基本情况【适用范围】计算机科学与技术、信息管理与信息系统专业【实验学时】32【考核方式】课程实验着重考查学生对每个实验的准备和完成情况,其成绩纳入课程的平时成绩。实验成绩占课程平时成绩的70;每个实验的评分包括:准备情况,实际操作,实验报告,实验结果(程序)。2. 实验目的面向对象程序设计是一门应用性、实践性很强的技能课,不仅要求学生熟知程序设计语言的语法和特性,还要求其能够将相关知识应用于具体的程序开发中;不仅要求学生熟练掌握面向对象的编程风格、编程技巧和技能,而且需要其建立一种面向对象的分析问题、抽象问题和解决问题的基本思想和方法。要实现上述教
2、学目标,离不开大量的上机实验练习。课程实验的总体目标是:(1) 加深学生对类和对象概念的理解、帮助学生建立面向对象的思维方式,在程序设计中要贯彻和体现面向对象的基本思想。(2) 通过上机实践,提高学生对计算机软件开发环境和运行环境的了解和使用能力。(3) 加深学生对课堂讲授内容的理解和掌握,从Java语言的语法及特性到基本的编程方法和技能,打好面向对象程序设计、软件开发的良好基础。(4) 在对Java 程序的调试过程中,提高学生分析程序中出现的错误和排除这些错误的能力。(5) 通过上机实验,提高学生对Java 语言各部分内容的综合使用能力,逐步掌握Java语言程序设计的规律与技巧。3. 实验要
3、求课程实验与面向对象程序设计理论课相互配套,由若干个独立的实验项目组成。通过实验训练,要求学生能运用所学理论知识进行基本的面向对象程序设计,培养其严谨、规范的编程习惯,掌握基本的操作技能和编程思想。同时要注意培养学生实事求是的科学态度,为学习后续课程,参加实际工作和开展科学研究打下良好的基础。课程实验的基本要求是:(1) 任课教师需向学生讲清课程实验的性质,任务,要求,实验项目安排和进度,考核内容和方式,实验守则及实验室安全制度等。(2) 本课程若干个独立的实验项目组成,每个实验项目包括课前准备,实验操作,实验报告等环节。(3) 学生在实验前必须进行准备,提出解决问题的算法、完成初步的程序设计
4、。根据实验项目的具体情况,教师应对学生的准备情况进行必要的检查。(4) 学生应在规定时间内独立完成每个实验的任务,包括程序的输入、调试,以及实验报告的誊写和提交。实验过程中,老师应在实验室进行巡视,及时回答问题,纠正学生的错误操作,同时也要培养学生自主发现问题和解决问题的能力。(5) 任课教师要认真备课,提前预做实验,上好每一堂课。实验前清点学生人数。实验后要检查学生的实验报告。4. 实验项目及学时分配序号项目名称内容摘要实验类型学时实验要求123456789101112131415Java程序初步类型转换数据运算Java语句类的定义构造方法has-a关系is-a关系Java接口字符串处理数组
5、应用例外处理线程的基本控制线程的同步控制文件操作Java程序的基本结构自动、强制类型转换运算符与表达式程序流程变量与方法构造方法的定义对象之间的相互作用继承接口及其应用String、StringBuffer引用型数组例外处理的编程方法Thread类wait、notify输入、输出流验证性验证性设计性设计性设计性验证性设计性设计性设计性设计性设计性设计性设计性设计性设计性222222224222222必做必做必做必做必做必做必做必做必做必做必做必做必做必做必做实验1:Java程序初步【实验目的】 (1) 了解Java应用程序的基本结构,以及main方法的格式。能够模仿地定义一些简单的类、创建类的
6、实例对象。(2) 了解Java开发工具包的组成,熟练掌握编译、运行Java应用程序的过程。(3) 对类和对象的概念有更好的感性认识。【实验内容】定义一个表示圆的名为Circle的类,其软件接口如下:class Circle public void setRadius(int r); / 设置圆的半径 public int getArea(); / 计算圆的面积 public int getPerimeter(); / 计算圆的周长 public int getRadius(); / 返回圆的半径【实验要求】(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完
7、成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作;课后检查学生的实验报告。实验2:类型转换【实验目的】(1) 了解Java语言支持的两类数据类型:基本类型和复合类型。(2) 了解各种基本类型的特性,掌握各种类型文字的表示。(3) 理解变量的概念,掌握变量定义的基本方法,了解变量的分类、局部变量的作用域。(4) 理解基本类型转换的含义、方法和规则。【实验内容】1. 假设已经定义和以下变量:short a=5,b=7;byte i=2,j=11;验证下列表达式的类型以及结果: a2 类型 结果 (byte)-7*-5 类型 结果
8、 true ? 12 : i 类型 结果 a = i 类型 结果 2. 下面程序有一行错误代码(在/*found*/下)。请改正并调试程序,使之正确运行,并使程序的运行结果为:k=7 i=-1。必须在原来位置修改,不得增加或删减程序行。class Aaa public static void main(String args) /*found*/ long l = 0x7ffffffff; long k = l 32; int i = (int)l; System.out.println(k= + k + i= + i); 实验要求(1) 学生在实验前必须进行准备,完成初步的验证程序的设计和改
9、正方案。实验时再通过调试完成最终的验证和改错,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作;课后检查学生的实验报告。实验3:数据运算实验目的(1) 熟练掌握各种运算符的使用。(2) 知道运算符的优先级、结合性和计算次序。理解表达式的的结果和类型。实验内容1. 下面程序有一行错误代码(在/*found*/下)。请改正并调试程序,使之正确运行,并使程序的运行结果为:x=10 a=11 b=20x=20 a=11 b=21注意:必须在原来位置修改,不得增加或删减程序行。class Ddd byte a = 10; int
10、b = 20; public void method(int i) byte x; /*found*/ x = i=0 ? +a : +b; System.out.println(x= + x + a= + a + b= + b); class TestDdd public static void main(String args) Ddd o = new Ddd(); o.method(0); o.method(1); 2. 定义一个类Exercise0210。该类有一个表示年份的int型成员变量year,并包含以下两个方法:public void set(int y); / 设置成员变量y
11、ear的值。public boolean isLeap(); / 报告year表示的年份是否为闰年。然后再定义一个应该程序起始类TestExercise0210测试该类。闰年是指能被400整除、或者能被4整除但不能被100整除的年份。实验要求(1) 学生在实验前必须进行准备,提错改错方案和完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作;课后检查学生的实验报告。实验4:Java语句实验目的(1) 了解各类Java语句。知道空语句、表达式语句、块语句和标号语句。(2) 熟练
12、掌握各种流程控制语句的使用。(3) 理解实例方法与静态方法(类方法)的区别。实验内容编写方法static int daysInMonth(int y, int m),其功能是计算y年m月份包含的天数。然后在main方法中调用该方法并输出返回结果。注:闰年2月份包含29天,其他年的2月份包含28天。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验5:类的定义实验目的(1
13、) 了解对象的引用,理解引用类型与基本类型的区别。(2) 了解各种类修饰符,了解类的各种语法成分。(3) 掌握变量定义的方法,深刻理解成员变量与局部变量的区别、实例变量与静态变量(类变量)的区别。(4) 掌握方法定义的方法,深刻理解实例方法与静态方法(类方法)的区别。实验内容定义一个Point类。该类用两个int型变量表示屏幕坐标系上的一个点,其软件接口如下:class Point public final static int EAST = 1; / 点移动的方向 public final static int SOUTH =2; public final static int WEST =
14、 3; public final static int NORTH =4; public Point(int x,int y); / 构造方法 public Point(); / 构造方法 public Point(Point p); / 构造方法 public void move(int x, int y); / 当前点移至指定位置 public void move(int way); / 按指定的方向将当前点移动1个像素 public double distance(int x, int y); / 计算两个点之间的距离 public double distance(Point p); /
15、 计算两个点之间的距离 public int getX(); / 返回当前点的X坐标 public int getY(); / 返回当前点的Y坐标 public String toString(); / 以格式(x, y)返回当前点的字符串表示然后编写一个应用程序起始类测试该类。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作;课后检查学生的实验报告。实验6:构造方法实验目的(1) 掌握构造方法的定义,理解实例创建和实例变量初始化
16、的过程。深刻理解构造方法与实例方法的区别。(2) 理解方法重载的概念,熟练掌握方法重载的方法。实验内容定义一个日期类MyDate,其软件接口如下:class MyDate public MyDate(MyDate date); /构造方法 public MyDate(int y, int m, int d); / 构造方法 public boolean equal(MyDate date); / 判断当前日期与参数日期是否相等 public void incrementDay(); / 使当前日期增加1天 public int getYear(); / 返回当前日期的年份 public int
17、 getMonth(); / 返回当前日期的月份 public int getDay(); / 返回当前日期当月的天数 public String toString(); /以“年-月-日”格式返回当前日期的字符串表示然后编写一个应用程序起始类测试该类。特别要测试进入下一个月、下一年的情况。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验7:has-a关系实验目的(1
18、) 熟练掌握以对象为单位的信息传递的方法。(2) 理解“has-a”关系的概念,熟练掌握包含“has-a”关系的类的定义。实验内容利用MyTime类和MyDate类定义一个日期时间类DateAndTime。DateAndTime类包含一个MyDate型实例变量和一个MyTime型实例变量,它们共同表示一个完整的日期时间。类的软件接口如下:class DateAndTime public DateAndTime(); / 构造方法 public DateAndTime(Date date, Time time); / 构造方法 public DateAndTime(Time time, Date
19、 date); / 构造方法 public DateAndTime(int y, int mo, int d, int h, int mi, int s); / 构造方法 public boolean equal(DateAndTime dt);/ 判断两个日期时间是否相等 public void incrementDay(); / 使当前日期时间增加1天 public void incrementSecond(); / 使当前日期时间增加1秒 public String toString(); / 返回当前日期时间的字符串表示然后编写一个应用程序起始类测试该类。特别要测试进入下一分钟、下一小
20、时、下一个月、下一天、下一年的情况。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验8:is-a关系实验目的(1) 理解继承的概念,了解超类、子类、直接超类、直接子类的概念。(2) 理解“is-a”关系的概念。(3) 掌握Java子类的定义方法。(4) 了解并掌握关键字this和super的含义及其在各种场合的使用方法。(5) 深入了解考虑继承特征情况下实例变量的初始
21、化过程。实验内容在实验7:has-a关系中通过组合MyDate类和MyTime类定义了一个表示日期时间的DateAndTime类。现在请通过扩展MyDate类定义一个具有相同软件接口的日期时间类。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验9:Java接口实验目的(1) 理解接口的概念、作用,熟练掌握接口定义、接口实现的方法以及接口作为引用类型的使用方法。(2)
22、熟练掌握引用类型转换的方法和规则。实验内容定义一个表示区域的接口IRange,其中声明有一个用以测试指定点p是否落在区域内的方法:boolean contains(Point p);然后定义定义一个表示屏幕坐标系上的圆形区域的R_Circle类。该类扩展Circle类并实现接口IRangle。该类包含一个Point型实例变量,表示圆区域的圆心在屏幕坐标系上的位置。最后完成下面类中的go方法。该类包含两个实例变量r和p。方法go的功能是:若点p在区域r内,就按指定的方向way(东、南、西、北)不断移动,直至该点落在区域外。随后输出点p的坐标。class Test IRange r; Point
23、p; Test (IRange r1, Point p1) r = r1; p = p1; public void go(int way) public static void main(String args) Point p = new Point(90, 90); IRange r = new R_Circle(50, p); / 50为半径,p为圆心位置 Point p1 = new Point(90, 90); new Test(r, p1).go(Point.EAST); 选做内容通过扩展Rectangle类并实现接口IRangle定义一个表示屏幕坐标系上的矩形区域的R_Recta
24、ngle类。该类包含一个Point型实例变量,表示矩形区域的左上角在屏幕坐标系上的位置。该类的软件接口如下:class R_Rectangle extends Rectangle public R_Rectangle(); / 构造方法 public R_Rectangle(Rectangle r, Point p); / 构造方法 public R_Rectangle(int x, int y, int width, int height); / 构造方法 public boolean contains(Point p); / 测试参数点p是否落在区域内 public void moveTo
25、(int x, int y); / 将区域移至指定位置 public Point getWhere(); / 返回区域的当前位置然后再修改上述main方法,使其能模拟一个点再的矩形区域内移动的情况。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验10:字符串处理实验目的(1) 理解String型字符串对象与StringBuffer型字符串对象的区别。(2) 熟练掌握S
26、tring类和StringBuffer类的使用。(3) 了解系统对字符串文字、字符串连接运算+的处理过程。实验内容定义一个FileSpec类,该类实现对一个文件标识符(含盘符、路径和文件名)的包装,其软件接口如下:public class FileSpec public FileSpec(String filespec); / 构造方法 public String getName(); public String getExtension(); public String getPath();实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验
27、报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验11:数组应用实验目的(1) 理解数组对象的概念, 熟练掌握数组类型的表示与数组变量的定义。(2) 熟练掌握数组的创建和使用。实验内容编写并测试方法static Object counting(String str),方法计算并返回参数字符串str中每个字符出现的次数。返回的Object型二维数组的长度应该为str中不同字符的个数。二维数组的第1列存放各字符的Character实例;第2列存放各字符对应次数的Intege
28、r实例。实验要求(1) 学生在实验前必须进行准备,应提出相应的算法、完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验12:例外处理实验目的(1) 熟练掌握throw语句和throws子句的用法。(2) 熟练掌握try语句的使用。理解并熟练掌握catch和finally子句的作用的用法。(3) 熟练掌握定义和使用自定义例外类型的方法。实验内容char型值能够赋值转换成int型或long型,反之则不行。int型或
29、long型能够强制转换成char型,这种转换不会抛出任何例外,但可能改变值的大小和符号。现在请定义一个Conversion类,其软件接口如下:class Conversion static char intToChar(int n) throws DataException; stativ char longToChar(long n) throws DataException;intToChar(int n)方法和longToChar(long n)方法分别将int型n和long型n转换成char型。如果转换能保证不改变值的大小和符号,比如执行下列代码后,变量x和y的值应该相等:int x
30、= 10;char c = Conversion.intToChar(x);int y = c;那么方法正常执行;否则方法抛出一个受检查的DataException型例外。DataException类需提供一个能够接收并保存n值和一个文本信息(描述n值的类型)的构造方法,以及一个能够返回例外对象状态信息的toString()方法。请实现Conversion类和DataException类,并编写应用程序测试它们。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及
31、时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验13:线程的基本控制实验目的(1) 熟练掌握创建线程的两种方法,深刻理解其中的异同点。(2) 理解线程状态、精灵线程与用户线程、线程优先级等的概念,并掌握相关的设置方法。(3) 掌握线程控制的基本方法。实验内容创建一个包含实例变量i的线程。该线程启动后,首先创建并启动一个精灵线程,然后对变量i循环累加1,直至i的值等于Integer.MAX_VALUE。精灵线程每隔约1秒种输出一次变量i的值。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(
32、2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验14:线程的同步控制实验目的(1) 理解临界区与互斥的概念,熟练掌握使用synchronized关键字实现互斥的方法。(2) 理解线程同步的概念,熟练掌握使用wait、notify、notifyAll方法实现线程同步的方法。实验内容模拟3个人排队买票。张某、李某和赵某买电影票,售票员只有3张5元的钱,电影票5元钱一张。张某拿着一张20元的人民币排在李的前面买票,李某拿着一张10元的人民币排在赵的前面买票,赵某拿着一张5元的人民币
33、买票。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验15:文件操作实验目的(1) 能够利用File对象实现对一个文件(或目录)的创建、删除以及属性访问。(2) 熟练掌握利用文件流读、写和更新文件的方法。实验内容创建一个基于FileInputStream流的DataInputStream流,并通过该流从由例10-6中的程序建立的student.dat文件读入学生数据,然后按下面格式显示输出:Number:00102101 Name:LiMing English:91 Computer:80 Total:171Number:00102102 实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。