实验二 Java面向对象程序设计

实验内容

  1. 初步掌握单元测试和TDD;
  2. 理解并掌握面向对象三要素;
  3. 初步掌握UML建模;
  4. 熟悉S.O.L.I.D原则;
  5. 了解设计模式;

实验要求

  1. 实现并体会例子中代码的单元测试;
  2. 自己编写一个复数类,并对其进行单元测试;
  3. 利用UML进行测试建模,实现代码图形的相互生成;

实验步骤

(一)单元测试

(1)三种代码

•伪代码

•产品代码

•测试代码

一般情况测试

出错情况测试

边界情况测试

完善产品代码

(2)TDD(测试驱动开发)

先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。

TDD的一般步骤如下:

明确当前要完成的功能;

记录成一个测试列表;

快速完成编写针对此功能的测试用例;

测试代码编译不通过;

编写并完善产品代码;

测试通过;

对代码进行重构,并保证测试通过;

循环完成所有功能的开发。

TDD的编码节奏是:

增加测试代码,JUnit出现红条;修改产品代码;JUnit出现绿条,任务完成。

在IDEA中设置使得IDEA具备单元测试功能

在实验楼中(即eclipse环境下)进行单元测试(按具体顺序)

开始测试(发现产品代码bug)

完善产品代码

(二)面向对象三要素

•抽象

(1)抽象就是抽出事物的本质特征而暂时不考虑他们的细节,对于复杂系统问题人们借助分层次抽象的方法进行问题求解。

(2)在抽象的最高层,可以使用问题环境的语言,以概括的方式叙述问题的解。在抽象的较低层,则采用过程化的方式进行描述。

(3)在描述问题解时,使用面向问题和面向实现的术语。

(4)程序设计中,抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象的结果是函数,数据抽象的结果是抽象数据类型。

使用UML建模

•封装、继承与多态

(1)面向对象(Object-Oriented)的三要素包括:封装、继承、多态。

(2)封装实际上使用方法(method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,从而带来模块化和信息隐藏的好处。

(3)接口是封装的准确描述手段。

实例代码如下:

•封装

public class Dog {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String bark(){
return "汪汪";
}
public String toString(){
return "The Dog's color is " + this.getColor() +", and it shouts "+ this.bark() + "!";
}
}

•继承

public abstract class Animal {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public abstract String shout();
}
public class Dog extends Animal{
public String shout(){
return "汪汪";
}
public String toString(){
return "The Dog's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";
}
}
public class Cat extends Animal{
public String shout(){
return "喵喵";
}
public String toString(){
return "The Cat's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";
}
}

运行结果如图:

•设计模式初步

(1)S.O.L.I.D原则

•SRP(Single Responsibility Principle,单一职责原则)

•OCP(Open-Closed Principle,开放-封闭原则)

•LSP(Liskov Substitusion Principle,Liskov替换原则)

•ISP(Interface Segregation Principle,接口分离原则)

•DIP(Dependency Inversion Principle,依赖倒置原则)

(三)练习

使用TDD的方式设计关实现复数类Complex。

实验代码

•伪代码

•产品代码

class complex
{
double re,im;
complex()
{
this.re=0;
this.im=0;
}
complex(double re)
{
this.re=re;
this.im=0;
}
complex(double re,double im)
{
this.re=re;
this.im=im;
}
complex add(complex p1,complex p2)
{
complex p=new complex(p1.re+p2.re,p1.im+p2.im);
return p;
}
complex minus(complex p1,complex p2)
{
complex p=new complex(p1.re-p2.re,p1.im-p2.im);
return p;
}
void print()
{
System.out.println("复数的值为:");
if(this.im!=0)
System.out.println(this.re+"+"+this.im+"i");
else
System.out.println(this.re);
}
}
public class Song
{
public static void main(String[] args)
{
complex c=new complex();
complex c1=new complex(2,7);
complex c2=new complex(5,2);
c1.print();
c2.print();
System.out.println("这两个复数的和为:");
System.out.println((c.add(c1,c2).re+"+"+
c.add(c1, c2).im+"i").toString()); System.out.println("这两个复数的差为:");
System.out.println((c.minus(c1,c2).re+"+"+
c.minus(c1, c2).im+"i").toString());
}
}

测试运行结果如图

遇到的问题及解决方法

使用IDEA进行单元测试时花了很长时间,完全按照步骤执行,查了很多资料试了很久,还是无法顺利完成,junit4以后出来的@Test都是报错的,不明白到底为什么。然后想通过实验楼来完成,好不容易找到了老师的课程结果是私有课,没有邀请码无法在该环境下实验,跟我一起的同学就可以直接进入实验环境中做,我很不解啊。事先编好的代码无法通过单元测试进行完善,最终还是借用了同学的电脑勉强完成,不容易。

出错如图:

体会单元测试的好处:

1.帮助开发人员编写代码,提升质量、减少bug。

2.提升反馈速度,减少重复工作,提高开发效率。

3.保证最后的代码修改不会破坏之前代码的功能。

4.使代码更容易维护。

(以上实验除单元测试部分均在IDEA中完成)

Personal Software Process Time

步骤 耗时 百分比
需求分析 30min 12%
设计代码实现 2hours 46%
测试 50min 19%
分析总结 1hours 23%

20145231《Java程序设计》第二次实验报告的更多相关文章

  1. java程序设计第二次实验报告

    北京电子科技学院(BESTI) 实验报告 课程:数据结构    班级:1352    姓名:何伟钦     学号:20135223 成绩:            指导教师:娄嘉鹏      实验日期: ...

  2. 20155339《java程序设计》第一次实验报告

    20155339<java程序设计>第一次实验报告 实验一 java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序: 2.使用IDEA编辑.编译.运行.调试java程 ...

  3. 20145330《Java程序设计》第一次实验报告

    20145330<Java程序设计>第一次实验报告 实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Ja ...

  4. 20145320《Java程序设计》第一次实验报告

    20145320<Java程序设计>第一次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 18: ...

  5. 20145240 《Java程序设计》第一次实验报告

    20145240 <Java程序设计>第一次实验报告 实验内容 一.命令行下java程序开发 1.建立Code目录,输入mkdir 20145240命令建立实验目录,并使用dir命令查看目 ...

  6. 学号20155311 2016-2017-2 《Java程序设计》第一次实验报告

    课程:Java程序设计 实验名称:Java开发环境的熟悉 实验目的与要求: 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验. ...

  7. 20145216史婧瑶《Java程序设计》第一次实验报告

    实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没 ...

  8. 20145238-荆玉茗 《Java程序设计》第一次实验报告

    实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没 ...

  9. 20145235 《Java程序设计》第一次实验报告

    实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 1.JVM.JRE.JDK的安装位置与区 ...

  10. 20145330《Java程序设计》第二次实验报告

    20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...

随机推荐

  1. JAVA 虚拟机内存

    1.普通java应用程序,使用java命令运行, java -Xms1024m -Xmx1024m -XX:MaxNewSize=256m  -XX:MaxPermSize=256m -jar 2.t ...

  2. HTML学习笔记——常用元素及其属性(一)

    1.img 标签 -- 代表HTML图像 img标签是单独出现的,<img /> 语法: <img src="URI" alt="alttext&quo ...

  3. 《从零开始学Swift》学习笔记(Day48)——类型检查与转换

    原创文章,欢迎转载.转载请注明:关东升的博客 继承会发生在子类和父类之间,是一系列类的继承关系. 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Pers ...

  4. IIPP迷你项目(一)“Rock-paper-scissor-lizard-Spock”

    0 前言——关于IIPP 本系列博客的内容均来自<An Introduction to Interactive Programming in Python (Part 1)>(在此我简称为 ...

  5. jQuery之获取checkbox选中的值

    <mce:script src="jquery.js" mce_src="jquery.js"></mce:script><!-- ...

  6. CSS3随意记录

    1.注释 注释语法:/* 注解注释内容 */ 2.带有透明度 rgba(255,0,0,0.5);rgba(0,255,0,0.5);rgba(0,0,255,0.5); 0.5就带有透明的,介于0和 ...

  7. Python星号*与**用法分析 What does ** (double star/asterisk) and * (star/asterisk) do for parameters? 必选参数 默认参数 可变参数 关键字参数

    python中*号**的区别 - CSDN博客 https://blog.csdn.net/qq_26815677/article/details/78091452 定义可变参数和定义 list 或 ...

  8. php自定义函数: 文件大小转换成智能形式

    function format_byte($filesize) { if($filesize >= 1073741824) { $filesize = round($filesize / 107 ...

  9. JSP页面中的tab页

    首先下载bootstrap-tab.js和bootstrap.min.css <script type="text/javascript">$('#myTab a'). ...

  10. 安装mysql以及修改初始密码

    我们可以采用类似安全模式的方法修改初始密码 先执行命令  mysqld_safe --skip-grant-tables &   (设置成安全模式) &,表示在后台运行,不再后台运行的 ...