20162329 张旭升 实验二:实验报告
实验报告
课程:程序设计与数据结构
班级: 1623
姓名: 张旭升
学号:20162329
指导教师:娄嘉鹏 王志强
实验日期:4月14日
实验密级: 非密级
预习程度: 已预习
必修/选修: 必修
实验序号: cs_29
实验名称: Java面向对象程序设计
实验要求:
-
没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
-
完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
-
严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
-
请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。
实验内容
-
初步掌握单元测试和TDD
-
理解并掌握面向对象三要素:封装、继承、多态
-
初步掌握UML建模
-
熟悉S.O.L.I.D原则
-
了解设计模式
实验过程
一.单元测试
1. 书写三种代码
- 伪代码
- 产品代码
- 测试代码
2.IDEA上进行驱动开发
- 由之前已写好的自定义类通过驱动自动生成测试代码,帮助我们节省时间精力。
二.面向对象三要素
1. 三种要素
- 封装
- 继承
- 多态
2. 熟悉三要素的使用
- 通过实验练习类的书写和测试来熟悉面向对象三要素。
三.实验练习
1. 练习代码
public class ComplexNumber {
private int i;
private double a, b;
static private double W, X, Y;
static private String Z,z;
public ComplexNumber(){
}
public ComplexNumber(double A, double B){
this.a = A;
this.b = B;
}
public void Show(){
System.out.println("Show a complex number: z=a+bi" );
}
public static void Count(ComplexNumber C1,char C2,ComplexNumber C3){
switch (C2){
case '+' :
X = C1.a + C3.a;
Y = C1.b + C3.b;
Z = "("+X+")" + "+" + "("+Y+")" + "i";
break;
case '-' :
X = C1.a - C3.a;
Y = C1.b - C3.b;
Z = "("+X+")" + "+" + "("+Y+")" + "i";
break;
case '*' :
X = C1.a * C3.a - C1.b * C3.b;
Y = C1.b * C3.a + C1.a * C3.b;
Z = "("+X+")" + "+" + "("+Y+")" + "i";
break;
case '/' :
W = Math.pow(C3.a,2)+Math.pow(C3.b,2);
X = (C1.a * C3.a + C1.b * C3.b)/W;
Y = (C1.b * C3.a - C1.a * C3.b)/W;
Z = "("+X+")" + "+" + "("+Y+")" + "i";
break;
default:
System.out.println("The input is not a valid operator!");
}
}
public void Length(){
double m;
if (b != 0){
double s = (int)Math.pow(a, 2)+Math.pow(b, 2);
m = Math.sqrt(s);
}
else
if(a>=0)
m = this.a;
else
m = this.a * -1;
System.out.println("This complex number length is: " + m);
}
public static String getCount(){
return Z;
}
public String toString(){
z = "("+a+")" + "+" + "("+b+")" + "i";
return z;
}
}
2. 实验练习测试
实验中遇到的问题
-
问题:
开始我是想先建立一个
Number
的接口,用来设置所有数都有的表示功能(Show)
和计算(count)
功能,后来在做复数的类(ComplexNumber)
时发现计算是无法实现的。 -
原因和解决办法:
因为计算这个方法在每类数中表达方式都是不同的,所传入参数也是不同的,最终我还是把接口中的
count
方法去掉了,导致我的接口实际意义也变得非常小,就也被我取缔了,最终虽然是完成了但是这些都还是不足,希望在今后的学习中能改进。
实验不足
本次实验练习中还是没有太多的体现出多态,虽然我对相关的概念感觉是理解了,但是到了要做这个程序的时候发现好多想的却有些难以实现,时间紧迫也就都简化了,这些还要慢慢改进。
实验心得
- 在设计代码时先写出伪代码是一个非常节省时间的办法,伪代码可以帮你理清思路,减少思想逻辑上花费的时间。