20145222黄亚奇《Java程序设计》实验二实验报告
20145222《Java程序设计》第2次实验报告
实验步骤与内容
一、实验内容
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 熟悉S.O.L.I.D原则
- 了解设计模式
二、实验步骤
1.单元测试
(1) 三种代码
伪代码、产品代码、测试代码
(2) TDD(Test Driven Devlopment, 测试驱动开发)
a.先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。TDD的一般步骤如下:
-明确当前要完成的功能,记录成一个测试列表
-快速完成编写针对此功能的测试用例
-测试代码编译不通过
-编写产品代码
-测试通过
-对代码进行重构,并保证测试通过
-循环完成所有功能的开发
b.基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。 Java中有单元测试工具JUnit来辅助进行TDD,红叉说明代码存在语法错误,原因很简单,MyUtil类还不存在,类中的percentage2fivegrade方法也不存在,我们在TDDDemo的src目录中新建一个MyUtil的类,并实现percentage2fivegrade方法
c.测试结果出现了一个绿条(green bar),说明测试通过了。

2.面向对象三要素
- 封装、继承、多态
- OO三要素的第一个要素是封装,封装就是将数据与相关行为包装在一起以实现信息就隐藏。Java中用类进行封装,比如一个Dog类:


3.设计模式初步
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,依赖倒置原则)
4.练习
使用TDD的方式设计关实现复数类Complex
打印一个复数,打印四则运算的语句
public class ComplexNumber {
public static void main(String[] args) {
Complex x = new Complex(1.0 , -2.0);
Complex y = new Complex(3.0 , 4.0);
Complex.printSentence(x, y);
}
}
class Complex
{
private double a,b;
Complex(double a,double b)
{
this.a = a;
this.b = b;
}
static Complex Add(Complex x,Complex y)
{
return new Complex(x.a+y.a, x.b+y.b);
}
static Complex Minus(Complex x,Complex y)
{
return new Complex(x.a-y.a, x.b-y.b);
}
static Complex Multiple(Complex x,Complex y)
{
return new Complex(x.a * y.a - x.b * y.b, x.a * y.b + x.b * y.a);
}
static Complex Divide(Complex x,Complex y)
{
Complex conjugate = new Complex(y.a, -y.b);
double mo = (y.a)*(y.a) + (y.b)*(y.b);
Complex t = Multiple(x,conjugate);
return new Complex(t.a/mo , t.b/mo);
}
static String print(Complex x)
{
if (x.b > 0)
return x.a + "+" + x.b + "i";
else
return x.a + "-" + (-x.b) + "i";
}
static void printSentence(Complex x, Complex y)
{
System.out.println("("+ print(x) + ")+("+ print(y) + ") =" +print(Add(x, y)));
System.out.println("("+ print(x) + ")-("+ print(y) + ") =" +print(Minus(x, y)));
System.out.println("("+ print(x) + ")*("+ print(y) + ") =" +print(Multiple(x, y)));
System.out.println("("+ print(x) + ")/("+ print(y) + ") =" +print(Divide(x, y)));
}
}
- 实验结果截图:

我的PSP时间
PSP时间
| 步骤 | 耗时 | 百分比 |
|---|---|---|
| 需求分析 | 20mi | 13.8% |
| 设计 | 30min | 20.7% |
| 代码实现 | 60min | 41.4% |
| 测试 | 15min | 10.3% |
| 分析总结 | 20min | 13.8% |
20145222黄亚奇《Java程序设计》实验二实验报告的更多相关文章
- 20145222黄亚奇《Java程序设计》课程总结
20145222黄亚奇<JAVA程序设计>课程总结 每周读书笔记链接汇总 第一周读书笔记 第二周读书笔记 第三周读书笔记 第四周读书笔记 第五周读书笔记 第六周读书笔记 第七周读书笔记 第 ...
- 20145222 黄亚奇 《网络对抗》Exp8 Web基础
20145222 黄亚奇 <网络对抗>Exp8 Web基础 实践具体要求 (1).Web前端HTML(1分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法 ...
- 20145222黄亚奇《网络对抗》- shellcode注入&Return-to-libc攻击深入
20145222黄亚奇<网络对抗>- shellcode注入&Return-to-libc攻击深入 shellcode注入实践过程
- 20145222黄亚奇《Java程序设计》实验五实验报告
20145222 <Java程序设计>实验五实验报告 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 本次实验我的结对编程对象是20 ...
- 20145222黄亚奇《Java程序设计》实验四实验报告
20145222<Java程序设计>第四次实验报告 实验四 Android环境搭建 实验内容 1.搭建Android环境 2.运行Android 3.修改代码,能输出学号 实验步骤 搭建A ...
- 20145222黄亚奇《Java程序设计》第10周学习总结
20145222 <Java程序设计>第10周学习总结 学习总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接 ...
- 20145222黄亚奇《Java程序设计》第9周学习总结
20145222第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...
- 20145222黄亚奇《Java程序设计》第3周学习总结
学号 <Java程序设计>第X周学习总结 教材学习内容总结 第四章: 类是对象的设计图,对象是类的实例. 参考名称与对象数据成员同名时,可以在数据成员前使用this区别. =是用在指定参考 ...
- 20145222黄亚奇《Java程序设计》实验一实验报告
实验一 Java开发环境的熟悉(Linux+Eclipse) 实验内容及步骤 使用JDK编译.运行简单的Java程序 在NetBeans IDEA中输入如下代码: package ljp; publi ...
随机推荐
- n&(n-1) n&(-n)
n&(n-1) n&(-n) n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子:n = 10100(二进制),则(n-1) = 10011 = ...
- Effective Java 41 Use overloading judiciously
The choice of which overloading to invoke is made at compile time. // Broken! - What does this progr ...
- SQL Server 2008 R2——学习/练习/错误/总结/搜集
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- python set集合简单使用
Python 提供了强大的集合操作方法,我们可以完成数学中集合的并集.交集.差集等操作,如下: >>> a = {1,2,3} >>> b = {3,4,5} &g ...
- cni 添加网络 流程分析
cnitool: Add or remove network interfaces from a network namespace cnitool add <net> <netns ...
- Hog SVM 车辆 行人检测
HOG SVM 车辆检测 近期需要对卡口车辆的车脸进行检测,首先选用一个常规的检测方法即是hog特征与SVM,Hog特征是由dalal在2005年提出的用于道路中行人检测的方法,并且取的了不错的识别效 ...
- Centos7开启防火墙并且使MYSQL外网访问开放3306端口
http://www.cnblogs.com/kreo/p/4368811.html CentOS7默认防火墙是firewalle,不是iptables #先检查是否安装了iptables servi ...
- HDU 3081 最大流+并查集
题意:有n个男生和n个女生,玩结婚游戏,由女生选择男生:女生可以选择不会和她吵架的男生以及不会和她闺蜜吵架的男生,闺蜜的闺蜜也是闺蜜.问你最多可以进行多少轮,每一轮每个女生只能选择一个之前她没选过的男 ...
- Android多线程----异步消息处理机制之Handler详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 第51课 C++对象模型分析(下)
1. 单继承对象模型 (1)单一继承 [编程实验]继承对象模型初探 #include <iostream> using namespace std; class Demo { protec ...