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 关系J
5、ava 接口字符串处理数组应用例外处理线程的基本控制线程的同步控制文件操作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;验证下列表达式的类型以及结果:
8、 a2 类型 结果 (byte)-7*-5 类型 结果 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注意:必须在原来位置修改,不得增加或删减程
10、序行。class Ddd byte a = 10;int 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,并包含以下两个方法
11、:public void set(int y); / 设置成员变量 year 的值。public boolean isLeap(); / 报告 year 表示的年份是否为闰年。然后再定义一个应该程序起始类 TestExercise0210 测试该类。闰年是指能被 400 整除、或者能被 4 整除但不能被 100 整除的年份。实验要求(1) 学生在实验前必须进行准备,提错改错方案和完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作;课后检查学生的实验报告。实验 4:Java
12、语句实验目的(1) 了解各类 Java 语句。知道空语句、表达式语句、块语句和标号语句。(2) 熟练掌握各种流程控制语句的使用。(3) 理解实例方法与静态方法(类方法)的区别。实验内容编写方法 static int daysInMonth(int y, int m),其功能是计算 y 年 m 月份包含的天数。然后在 main 方法中调用该方法并输出返回结果。注:闰年 2 月份包含 29 天,其他年的 2 月份包含 28 天。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的
13、实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 5:类的定义实验目的(1) 了解对象的引用,理解引用类型与基本类型的区别。(2) 了解各种类修饰符,了解类的各种语法成分。(3) 掌握变量定义的方法,深刻理解成员变量与局部变量的区别、实例变量与静态变量(类变量)的区别。(4) 掌握方法定义的方法,深刻理解实例方法与静态方法(类方法)的区别。实验内容定义一个 Point 类。该类用两个 int 型变量表示屏幕坐标系上的一个点,其软件接口如下:class Point public final static int EAST = 1; / 点
14、移动的方向public final static int SOUTH =2;public final static int WEST = 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
15、(int x, int y); / 计算两个点之间的距离public double distance(Point p); / 计算两个点之间的距离public int getX(); / 返回当前点的 X 坐标public int getY(); / 返回当前点的 Y 坐标public String toString(); / 以格式(x, y)返回当前点的字符串表示然后编写一个应用程序起始类测试该类。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题
16、,纠正学生的错误操作;课后检查学生的实验报告。实验 6:构造方法实验目的(1) 掌握构造方法的定义,理解实例创建和实例变量初始化的过程。深刻理解构造方法与实例方法的区别。(2) 理解方法重载的概念,熟练掌握方法重载的方法。实验内容定义一个日期类 MyDate,其软件接口如下:class MyDate public MyDate(MyDate date); /构造方法public MyDate(int y, int m, int d); / 构造方法public boolean equal(MyDate date); / 判断当前日期与参数日期是否相等public void incrementD
17、ay(); / 使当前日期增加 1 天public int getYear(); / 返回当前日期的年份public int getMonth(); / 返回当前日期的月份public int getDay(); / 返回当前日期当月的天数public String toString(); /以“年-月-日” 格式返回当前日期的字符串表示然后编写一个应用程序起始类测试该类。特别要测试进入下一个月、下一年的情况。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时
18、回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 7:has-a 关系实验目的(1) 熟练掌握以对象为单位的信息传递的方法。(2) 理解 “has-a”关系的概念,熟练掌握包含“has-a”关系的类的定义。实验内容利用 MyTime 类和 MyDate 类定义一个日期时间类 DateAndTime。DateAndTime类包含一个 MyDate 型实例变量和一个 MyTime 型实例变量,它们共同表示一个完整的日期时间。类的软件接口如下:class DateAndTime public DateAndTime(); / 构造方法public Date
19、AndTime(Date date, Time time); / 构造方法public DateAndTime(Time time, Date 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 秒publi
20、c String toString(); / 返回当前日期时间的字符串表示然后编写一个应用程序起始类测试该类。特别要测试进入下一分钟、下一小时、下一个月、下一天、下一年的情况。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 8:is-a 关系实验目的(1) 理解继承的概念,了解超类、子类、直接超类、直接子类的概念。(2) 理解 “is-a”关系的概念。(3) 掌握
21、Java 子类的定义方法。(4) 了解并掌握关键字 this 和 super 的含义及其在各种场合的使用方法。(5) 深入了解考虑继承特征情况下实例变量的初始化过程。实验内容在实验 7:has-a 关系中通过组合 MyDate 类和 MyTime 类定义了一个表示日期时间的 DateAndTime 类。现在请通过扩展 MyDate 类定义一个具有相同软件接口的日期时间类。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意
22、培养学生自主改错的能力;课后检查学生的实验报告。实验 9:Java 接口实验目的(1) 理解接口的概念、作用,熟练掌握接口定义、接口实现的方法以及接口作为引用类型的使用方法。(2) 熟练掌握引用类型转换的方法和规则。实验内容定义一个表示区域的接口 IRange,其中声明有一个用以测试指定点 p 是否落在区域内的方法:boolean contains(Point p);然后定义定义一个表示屏幕坐标系上的圆形区域的 R_Circle 类。该类扩展 Circle 类并实现接口 IRangle。该类包含一个 Point 型实例变量,表示圆区域的圆心在屏幕坐标系上的位置。最后完成下面类中的 go 方法。
23、该类包含两个实例变量 r 和 p。方法 go 的功能是:若点 p 在区域 r 内,就按指定的方向 way(东、南、西、北)不断移动,直至该点落在区域外。随后输出点 p 的坐标。class Test IRange r;Point 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
24、p1 = new Point(90, 90);new Test(r, p1).go(Point.EAST); 选做内容通过扩展 Rectangle 类并实现接口 IRangle 定义一个表示屏幕坐标系上的矩形区域的R_Rectangle 类。该类包含一个 Point 型实例变量,表示矩形区域的左上角在屏幕坐标系上的位置。该类的软件接口如下:class R_Rectangle extends Rectangle public R_Rectangle(); / 构造方法public R_Rectangle(Rectangle r, Point p); / 构造方法public R_Rectangl
25、e(int x, int y, int width, int height); / 构造方法public boolean contains(Point p); / 测试参数点 p 是否落在区域内public void moveTo(int x, int y); / 将区域移至指定位置public Point getWhere(); / 返回区域的当前位置然后再修改上述 main 方法,使其能模拟一个点再的矩形区域内移动的情况。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生
26、的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 10:字符串处理实验目的(1) 理解 String 型字符串对象与 StringBuffer 型字符串对象的区别。(2) 熟练掌握 String 类和 StringBuffer 类的使用。(3) 了解系统对字符串文字、字符串连接运算+的处理过程。实验内容定义一个 FileSpec 类,该类实现对一个文件标识符(含盘符、路径和文件名)的包装,其软件接口如下:public class FileSpec public FileSpec(String filespec); / 构造方法publ
27、ic String getName();public String getExtension();public String getPath();实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 11:数组应用实验目的(1) 理解数组对象的概念, 熟练掌握数组类型的表示与数组变量的定义。(2) 熟练掌握数组的创建和使用。实验内容编写并测试方法 static Objec
28、t counting(String str),方法计算并返回参数字符串str 中每个字符出现的次数。返回的 Object型二维数组的长度应该为 str 中不同字符的个数。二维数组的第 1 列存放各字符的 Character 实例;第 2 列存放各字符对应次数的Integer 实例。实验要求(1) 学生在实验前必须进行准备,应提出相应的算法、完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 12:例外处理实验目
29、的(1) 熟练掌握 throw 语句和 throws 子句的用法。(2) 熟练掌握 try 语句的使用。理解并熟练掌握 catch 和 finally 子句的作用的用法。(3) 熟练掌握定义和使用自定义例外类型的方法。实验内容char 型值能够赋值转换成 int 型或 long 型,反之则不行。int 型或 long 型能够强制转换成 char 型,这种转换不会抛出任何例外,但可能改变值的大小和符号。现在请定义一个 Conversion 类,其软件接口如下:class Conversion static char intToChar(int n) throws DataException;st
30、ativ char longToChar(long n) throws DataException;intToChar(int n)方法和 longToChar(long n)方法分别将 int 型 n 和 long 型 n 转换成 char 型。如果转换能保证不改变值的大小和符号,比如执行下列代码后,变量 x 和 y的值应该相等:int x = 10;char c = Conversion.intToChar(x);int y = c;那么方法正常执行;否则方法抛出一个受检查的 DataException 型例外。DataException 类需提供一个能够接收并保存 n 值和一个文本信息(
31、描述 n 值的类型)的构造方法,以及一个能够返回例外对象状态信息的 toString()方法。请实现 Conversion类和 DataException 类,并编写应用程序测试它们。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 13:线程的基本控制实验目的(1) 熟练掌握创建线程的两种方法,深刻理解其中的异同点。(2) 理解线程状态、精灵线程与用户线程、线程优先
32、级等的概念,并掌握相关的设置方法。(3) 掌握线程控制的基本方法。实验内容创建一个包含实例变量 i 的线程。该线程启动后,首先创建并启动一个精灵线程,然后对变量 i 循环累加 1,直至 i 的值等于 Integer.MAX_VALUE。精灵线程每隔约 1 秒种输出一次变量 i 的值。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 14:线程的同步控制实验目的(1)
33、理解临界区与互斥的概念,熟练掌握使用 synchronized 关键字实现互斥的方法。(2) 理解线程同步的概念,熟练掌握使用 wait、notify、notifyAll 方法实现线程同步的方法。实验内容模拟 3 个人排队买票。张某、李某和赵某买电影票,售票员只有 3 张 5 元的钱,电影票 5 元钱一张。张某拿着一张 20 元的人民币排在李的前面买票,李某拿着一张 10 元的人民币排在赵的前面买票,赵某拿着一张 5 元的人民币买票。实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,
34、检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。实验 15:文件操作实验目的(1) 能够利用 File 对象实现对一个文件(或目录)的创建、删除以及属性访问。(2) 熟练掌握利用文件流读、写和更新文件的方法。实验内容创建一个基于 FileInputStream 流的 DataInputStream 流,并通过该流从由例 10-6中的程序建立的 student.dat 文件读入学生数据,然后按下面格式显示输出:Number:00102101Name:LiMingEnglish:91Computer:80Total:171Number:00102102实验要求(1) 学生在实验前必须进行准备,完成初步的程序设计。实验要求在规定时间内独立完成,并完成实验报告。(2) 老师要提前预做实验,实验时应在实验室进行巡视,检查学生的实验准备、及时回答问题,纠正学生的错误操作,同时要注意培养学生自主改错的能力;课后检查学生的实验报告。