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%

参考资料

《Java学习笔记(第8版)》学习指导
积极主动敲代码,使用JUnit学习Java

posted @ 2016-04-17 17:31  20145233韩昊辰  阅读(138)  评论(1编辑  收藏  举报