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

实验内容

  1. 初步掌握单元测试和TDD

  2. 理解并掌握面向对象三要素:封装、继承、多态

  3. 初步掌握UML建模

  4. 熟悉S.O.L.I.D原则

  5. 了解设计模式

实验要求

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

  1. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

  2. 请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。

实验步骤

(一)单元测试

(1) 三种代码

·伪代码可以是中文,自己程序的架构理解
·产品代码

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 "错误";}
}

·编写MyUtilTest的测试模块

public class MyUtilTest {
public static void main(String[] args) {// 百分制成绩是50时应该返回五级制的“不及格”if(MyUtil.percentage2fivegrade(50) != "不及格")System.out.println("test failed!");else System.out.println("test passed!");}
}

编译结果如下:

·只有一组输入的测试是不充分的,我们把一般情况都测试一下,代码如下:

 public class MyUtilTest {public static void main(String[] args) {//测试正常情况if(MyUtil.percentage2fivegrade(55) != "不及格")System.out.println("test failed!");else if(MyUtil.percentage2fivegrade(65) != "及格")System.out.println("test failed!");else if(MyUtil.percentage2fivegrade(75) != "中等")System.out.println("test failed!");else if(MyUtil.percentage2fivegrade(85) != "良好")System.out.println("test failed!");else if(MyUtil.percentage2fivegrade(95) != "优秀")System.out.println("test failed!");else System.out.println("test passed!");}
}

·代码运行结果如下:

(2) TDD(Test Driven Devlopment, 测试驱动开发)

(1)a.先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。
TDD的一般步骤如下:
·明确当前要完成的功能,记录成一个测试列表
·快速完成编写针对此功能的测试用例
·测试代码编译不通过(没产品代码呢)
·编写产品代码
·测试通过
·对代码进行重构,并保证测试通过(重构下次实验练习)
·循环完成所有功能的开发
b.基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。 Java中有单元测试工具JUnit来辅助进行TDD, 红叉说明代码存在语法错误,原因很简单,MyUtil类还不存在,类中的percentage2fivegrade方法也不存在,我们在TDDDemo的src目录中新建一个MyUtil的类,并实现percentage2fivegrade方法
c.测试结果出现了一个绿条(green bar),说明测试通过了。

(2)TDD的编码节奏是:
增加测试代码、JUnit出现红条、修改产品代码、JUnit出现绿条,任务完成。

(二)面向对象三要素

(1)抽象

(2)封装、继承与多态

(三)设计模式初步

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

面向对象三要素是“封装、继承、多态”,任何面向对象编程语言都会在语法上支持这三要素。如何借助抽象思维用好三要素特别是多态还是非常困难的,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,依赖倒置原则)

·范例代码如下

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() + "!";}
}

(四)练习

练习内容:

写一个类测试编写的复数类的方法
构造函数,将实部,虚部都置为0
构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
设置实部,设置虚部:复数相加、复数相减、复数相乘

产品代码:

public class Complex {

protected int a;protected int b;public Complex(int a, int b) {this.a = a;this.b = b;
}public String toString() {return this.a + " + " + this.b + "i";
}public static Complex addition(Complex complex1, Complex complex2) {int a = complex1.a + complex2.a;int b = complex1.b + complex2.b;return new Complex(a, b);
}public static Complex subtract(Complex complex1, Complex complex2) {int a = complex1.a - complex2.a;int b = complex1.b - complex2.b;return new Complex(a, b);
}public static Complex multiplication(Complex complex1, Complex complex2) {int a = complex1.a * complex2.a - complex1.b * complex2.b;int b = complex1.b * complex2.a + complex1.a * complex2.b;return new Complex(a, b);
}

}

import java.util.Scanner;

public class ComplexMain {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入两个复数的实部和虚部:(a+bi、c+di)");
System.out.printf("a =");
int a=scanner.nextInt();
System.out.printf("b =");
int b=scanner.nextInt();
System.out.printf("c =");
int c=scanner.nextInt();
System.out.printf("d =");
int d=scanner.nextInt();
Complex fushu1=new Complex(a,b);
Complex fushu2=new Complex(c,d);
while(true) {
System.out.println("请输入需要进行的运算:1、ADD 2、SUBTRACT 3、MULTIPLY ");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println(Complex.addition(fushu1, fushu2));
break;
case 2:
System.out.println(Complex.subtract(fushu1, fushu2));
break;
case 3:
System.out.println(Complex.multiplication(fushu1, fushu2));
break;

            default:System.out.println("ERROR!!!");}}
}

}
```



PSP(Personal Software Process)

步骤 耗时 百分比
需求分析 2 mins 10%
设计 4 mins 20%
代码实现 8 mins 40%
测试 6 mins 30%
分析总结 10 mins 50%

转载于:https://www.cnblogs.com/20145224kevs/p/5392292.html

《Java程序设计》实验二 实验报告相关推荐

  1. java上机实验实验报告_Java实验二实验报告.doc

    Java实验二实验报告 本科学生实验报告 ( 二 ) 姓名 学院 计算机科学学院 专业 计算机科学与技术 班级 实验课程名称 Java面向对象设计 试验时间 2012 年 10 月 14 日 指导教师 ...

  2. 20135333苏正生实验二实验报告

    实验报告 课程: Java程序设计 班级: 1353 姓名: 苏正生 学号: 2015333 成绩: 指导教师: 娄家鹏 实验日期: 2015.5.6 实验密级: 预习程度: 实验时间: 3:20~5 ...

  3. java编写程序上机实验,《Java程序设计》上机实验

    <<Java程序设计>上机实验>由会员分享,可在线阅读,更多相关<<Java程序设计>上机实验(19页珍藏版)>请在技术文库上搜索. 1.tor的安装及 ...

  4. #《JAVA程序设计》 20155214 实验五 网络编程与安全

    <JAVA程序设计> 20155214 实验五 网络编程与安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验要求 要求一 结对实现中缀表达式转后缀 ...

  5. python编程图书批发商店的某本书的零售价是26.5_根据实验指导书,完成实验2的任务一与任务三,使用 实验二(实验报告).docx 完成报告并提交。_学小易找答案...

    [简答题]从键盘输入 n(0 [简答题]完成课本P89,查询学生成绩,提交源代码 [单选题]企业本期生产产品直接耗用原材料 3000 元,生产车间管理方面耗用原材料 2000 元,正确的会计分录是( ...

  6. python语言程序设计实践教程实验八答案_清华大学出版社-图书详情-《Java程序设计教程及实验指导》...

    前言 Java程序设计教程及实验指导Java是一门主流的面向对象的程序设计语言,是面向对象程序设计教学的主流语言.本书由有多年教学经验的专业教师编写,分为教程以及实验与课程设计两部分.教程部分从Jav ...

  7. 大学计算机实验二报告表答案,北理大学计算机实验基础实验二实验报告表答案...

    <北理大学计算机实验基础实验二实验报告表答案>由会员分享,可在线阅读,更多相关<北理大学计算机实验基础实验二实验报告表答案(4页珍藏版)>请在人人文库网上搜索. 1.实验二实验 ...

  8. 大学计算机实验二报告表答案,北理大学计算机实验基础实验二实验报告表答案(1页)-原创力文档...

    实验二实验报告表 实验名称: 学号姓名:班级:实验时间: 实验报告表 2-1 数值型数据在计算机中的二进制实验记录表 十进制整数分 输入十进制整数 内存整型数据 内存地址号 类 任意正整数 7 000 ...

  9. 20202413 2021-2022-2 《网络与系统攻防技术》实验二实验报告

    20202413 2021-2022-2 <网络与系统攻防技术>实验二实验报告 文章目录 20202413 2021-2022-2 <网络与系统攻防技术>实验二实验报告 1.实 ...

  10. Java程序设计(二)

    类与对象 实验编号: 实验二 实验主题: 类与对象 实验目的: (1)理解面向对象程序设计与过程化程序设计的区别,理解类和对象的概念,掌握如何编写和使用类: (2)理解数据成员.方法和构造方法的概念, ...

最新文章

  1. linux dhclient 与 service network restart
  2. mac 安装 nginx
  3. 如何使用Twitter Bootstrap获得中心内容?
  4. python培训Day1 随笔
  5. vue-cli构建的vue项目中引入stylus文件
  6. linux ubuntu deepin apache2 rewrite
  7. Hibernate ‍java.lang.ClassCastException ERROR解决方法
  8. 【IDEA】IDEA 设置 字体 可以滚轮 改变大小
  9. 最新“母马”病毒反杀主流杀毒软件
  10. 函数计算如何粘合云服务,提供端到端解决方案
  11. Linux中特殊字符
  12. 华为盒子 原生android,华为悦盒/各种安卓盒子找回原生设置以及适配蓝牙遥控器...
  13. 基于物理的体积光实现
  14. 计算机nie,聂眉宁-西南石油大学 - 计算机科学学院
  15. GCJ-02转WGS84
  16. 游戏服务端究竟解决了什么问题
  17. 相似度系列-5:语义方法:BERTSCORE: EVALUATING TEXT GENERATION WITH BERT
  18. 如何使用自动化测试进行Android UI测试
  19. 终端模拟器 java_程序员必备之终端模拟器,让你的终端世界多一抹“颜色”
  20. android 6.0 大神f2,酷派大神F2刷机包 64位1080p 全高清版 MIUI8安卓6.0 插桩适配ROM 锁屏画报 极致体验...

热门文章

  1. CONTEST1001 题解
  2. 无旋treap的简单思想以及模板
  3. 梯度下降法与牛顿法的比较
  4. cmd下常用的一些命令
  5. 一个SQL的几种写法
  6. .NET : 动态生成工作流定义文件并且进行编译
  7. Gamma阶段测试报告
  8. HTTP1.0,HTTP1.1,HTTPS和HTTP2.0的区别
  9. hadoop(9)--MapReduce入门WordCount
  10. 特征点的基本概念和如何找到它们