20145233韩昊辰 第二次实验报告
20145233 《Java程序设计》实验报告二:Java面向对象程序设计
实验要求
1.初步掌握单元测试和TDD
2.理解并掌握面向对象三要素:封装、继承、多态
3.初步掌握UML建模
4.熟悉S.O.L.I.D原则
5.了解设计模式
实验内容
一、单元测试
1.三种代码
伪代码:以简洁的自然语言表明设计步骤
百分制转五分制:
如果成绩小于60,转成“不及格”
如果成绩在60与70之间,转成“及格”
如果成绩在70与80之间,转成“中等”
如果成绩在80与90之间,转成“良好”
如果成绩在90与100之间,转成“优秀”
其他,转成“错误”
产品代码:用以实现特定功能的程序或机器语言;
package exp1;
public class MyUtil{
public static String percentage2fivegrade(int grade){
//如果成绩小于60,转成“不及格”
if (grade < 60)
return "不及格";
//如果成绩在60与70之间,转成“及格”
else if (grade < 70)
return "及格";
//如果成绩在70与80之间,转成“中等”
else if (grade < 80)
return "中等";
//如果成绩在80与90之间,转成“良好”
else if (grade < 90)
return "良好";
//如果成绩在90与100之间,转成“优秀”
else if (grade < 100)
return "优秀";
//其他,转成“错误”
else
return "错误";
}
}
测试代码:用以对产品代码进行测试的代码;
(这里就不贴老师的例子了,因为在后面的练习里面,有自己的测试代码)
二、复数的四则运算
这里先贴上我的代码:
import java.util.Scanner;
public class Complex { // 复数类
double real; // 实部
double image; // 虚部
Complex() { // 不带参数的构造方法
Scanner input = new Scanner(System.in);
double real = input.nextDouble();
double image = input.nextDouble();
Complex(real, image);
}
private void Complex(double real, double image) { // 供不带参数的构造方法调用
this.real = real;
this.image = image;
}
Complex(double real, double image) { // 带参数的构造方法
this.real = real;
this.image = image;
}
public double getReal() {
return real;
}
public void setReal(double real) {
this.real = real;
}
public double getImage() {
return image;
}
public void setImage(double image) {
this.image = image;
}
public Complex add(Complex a) { // 复数相加
double real2 = a.getReal();
double image2 = a.getImage();
double newReal = real + real2;
double newImage = image + image2;
Complex result = new Complex(newReal, newImage);
return result;
}
Complex sub(Complex a) { // 复数相减
double real2 = a.getReal();
double image2 = a.getImage();
double newReal = real - real2;
double newImage = image - image2;
Complex result = new Complex(newReal, newImage);
return result;
}
Complex mul(Complex a) { // 复数相乘
double real2 = a.getReal();
double image2 = a.getImage();
double newReal = real * real2 - image * image2;
double newImage = image * real2 + real * image2;
Complex result = new Complex(newReal, newImage);
return result;
}
Complex div(Complex a) { // 复数相除
double real2 = a.getReal();
double image2 = a.getImage();
double newReal = (real * real2 + image * image2) / (real2 * real2 + image2 * image2);
double newImage = (image * real2 - real * image2) / (real2 * real2 + image2 * image2);
Complex result = new Complex(newReal, newImage);
return result;
}
public String toString() { // 输出
String fin = "";
if (image > 0) {
fin = real + " + " + image + "i";
} else if (image < 0) {
fin = real + "" + image + "i";
} else {
fin = fin;
}
return fin;
}
}
代码是可以运行的接下来要进行的是Test的步骤了。
在完成这一系列的步骤后,要选择Junit4,因为我的已经设置过了,不会再出现以前的情况,所以没有办法截图了。
最后会生成一个xxxtest的文件,完成以后,只需要输入你的测试代码就可以运行。
实验步骤
前期准备
1.预先安装好JDK,并配置好环境变量,相关操作在第一篇博客环境变量的配置中已经进行了说明。
2.接下来下载idea,这里我使用的老师共享的idea资源。
需求分析
设计一个可以进行复数的简单四则运算的程序。
设计
主类的设计:
首先要定义接口:java.util.Scanner;,提供用户输入的功能;并且要定义double类,完了以后还需要对于复数的四则运算了解,不然不知道怎么样做,肯定写不出来,知道计算方法才可以写出程序代码。
测试类的设计:
对一些易错的输入实例进行测试,需要调用主类;
修改错误,完成测试。
代码实现&调试
1.打开idea,穿件一个名为shiyan2的文件夹,将所有的.java文件都放在里面,便于调试和运行。
2.调试
这里使用了Test来进行测试,在上面已经详细的说过了。
IDEA中调试很简单,Ctrl+Shift+F10
,也可以直接鼠标点击run进行选择,即可编译运行;
IDEA可以边编译边纠错,所以编译运行时没有发现什么错误;
建模
面向对象(Object-Oriented)的三要素包括:封装、继承、多态。面向对象的思想涉及到软件开发的各个方面,如面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程实现(OOP)。OOA根据抽象关键的问题域来分解系统,关注是什么(what)。OOD是一种提供符号设计系统的面向对象的实现过程,用非常接近问题域术语的方法把系统构造成“现实世界”的对象,关注怎么做(how),通过模型来实现功能规范。OOP则在设计的基础上用编程语言(如Java)编码。贯穿OOA、OOD和OOP的主线正是抽象。
封装:将与某一将数据与相关行为包装在一起以实现信息就隐藏,核心内容是模块化和信息隐藏,与此相伴的是接口的使用。
idea中的执行结果
分析总结
这次的实验虽然没有第一次那么复杂,但是在学习的过程中,还是有很多问题。比如:
这个问题是我的输入有点问题,修改之后可以添加。并用线将他们连在一起就可以生成。
最后我还将自己以前的代码有关于继承的,利用此软件将他们转换成下面这个图:
还学会了单元测试,可以更好地编译代码,以及检验代码,而且在这段时间内,真的是对之前的所有的东西有了检验,但是在这之间的问题还是很多,有的代码会不知道如何用,并且复数的计算真的是高中的内容了,我早已忘记,所以还在网上找了以前的知识,才搞明白如何编译,并且在使用建模的时候,因为我的和老师的例子不一样,所以没有办法,按照老师的要求步骤中来完成,这也就表明,看别人的代码觉得简单,自己来完成的时候,总是漏洞百出,我的建模总是提醒一个问题,我没有办法解决,最后还是咨询了同学来解决了这个问题(就是上面提到的问题)这也就是说我还是需要很多努力。
PSP时间:
步骤 | 时间 | 百分比 |
---|---|---|
需求设计 | 20min | 11.1% |
设计 | 80min | 44.4% |
代码实现 | 50min | 27.8% |
测试 | 15min | 8.3% |
分析总结 | 15min | 8.3% |