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 ...
随机推荐
- git提交报错
Error occurred computing Git commit diffsMissing unknown 0000000000000000000000000000000000000000 co ...
- java代码调用oracle存储过程
一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...
- java微信接口之二—获取用户组
一.微信获取用户组接口简介 1.请求 该请求也是GET方式请求.请求的url格式如下: https://api.weixin.qq.com/cgi-bin/groups/get?access_toke ...
- MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程
1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150: 330 ...
- HBase 高性能加入数据 - 按批多“粮仓”式解决办法
摘要:如何从HBase中的海量数据中,以很快的速度的获取大批量数据,这一议题已经在<HBase 高性能获取数据>(http://www.cnblogs.com/wgp13x/p/42451 ...
- centos7 + php7 lamp全套最新版本配置,还有mongodb和redis
我是个懒人,能yum就yum啦 所有软件的版本一直会升级,注意自己当时的版本是不是已经更新了. 首先装centos7 如果你忘了设置swap分区,下面的文章可以教你怎么补一个上去: http://ww ...
- 07_旅行商问题(TSP问题,货郎担问题,经典NPC难题)
问题来源:刘汝佳<算法竞赛入门经典--训练指南> P61 问题9: 问题描述:有n(n<=15)个城市,两两之间均有道路直接相连,给出每两个城市i和j之间的道路长度L[i][j],求 ...
- oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题
一个数据表基本上很难满足我们的查询要求,同时,将所有的数据都保存在一个表格中显然也不是一种好的数据库设计,为了避免数据的冗余,删除.更新异常,我们通常需要建立一张外键表,通过表连接,来获取我们自己想要 ...
- 解决在iOS8环境下,当用户关闭定位服务总开关时,无法将APP定位子选项加入定位权限列表的问题
关键点:- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizati ...
- [转]AngularJs 多语言的使用 angular-translate
本文转自:http://www.tuicool.com/articles/zeymimB 随着世界各地Web访问量的增加,作为开发者的我们也在不断让应用国际化.本地化.当用户访问我们的应用时,他应该能 ...