20135337朱荟潼Java实验报告二
20135337朱荟潼
实验二 Java面向对象程序设计
一、实验内容
1. 初步掌握单元测试和TDD
2. 理解并掌握面向对象三要素:封装、继承、多态
3. 初步掌握UML建模
4. 熟悉S.O.L.I.D原则
5. 了解设计模式
二、实验要求
1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
4. 请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。
三、实验步骤
(一)单元测试
(1) 三种代码
伪代码、产品代码、测试代码
(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,依赖倒置原则)
(四)练习
1使用TDD的方式设计关实现复数类Complex。
2.实验报告中统计自己的PSP(Personal Software Process)时间
四、具体实现的步骤截图
(1)


(2)


(3)


a.


b.

(3)

(4)
(4)实现复数
伪代码:
复数的加减运算:
定义一个整型a作为实部;
定义一个整型b作为虚部;
运算后定义newA作为实部;
运算后定义newB作为虚部;
加法运算返回p1;
减法运算返回p2;
输出加、减运算结果;
产品代码:
//实现复数的加减
class complex
{
int a,b; //a表示实部,b表示虚部
void complex(int a,int b){
this.a=a;
this.b=b;
}
int Shi(){
return a;
}
int Xu(){
return b;
}
complex add(complex p){
int aa=p.Shi();
int bb=p.Xu();
int newA=aa+a;
int newB=bb+b;
complex p1=new complex();
p1.complex(newA, newB);
return p1;
}
complex sub(complex p){
int aa=p.Shi();
int bb=p.Xu();
int newA=aa-a;
int newB=bb-b;
complex p2=new complex();
p2.complex(newA, newB);
return p2;
}
}
public class Comp5337{
public static void main(String[] args){
complex c1=new complex();
complex c2=new complex();
c1.complex(1, 2);
c2.complex(3, 1);
complex p1=c1.add(c2);
int p1a=p1.Shi();
int p1b=p1.Xu();
System.out.println("a="+p1a+",bi="+p1b+"i");
System.out.printf("和=%d+%di",p1a,p1b);
System.out.println();
complex p2=c1.sub(c2);
int p2a=p2.Shi();
int p2b=p2.Xu();
System.out.printf("差=%d-%di",p1a,p1b);
}
}
测试代码:

五、PSP时间分析
|
步骤 |
耗时 |
百分比 |
|
需求分析 |
1小时 |
12.5% |
|
设计 |
2小时 |
25% |
|
代码实现 |
2小时 |
25% |
|
测试 |
2小时 |
25% |
|
分析总结 |
1小时 |
12.5% |
六、遇到的问题及解决方法
1,由于win8系统,虚拟机一直出现问题,无法正常工作。因此,使用了电脑上的Ecliose软件。2,测试代码的编写过程中由于对知识的不完全熟悉,花费了许多时间,对代码的修改也是反复进行。3,在UML画图,第一次画时,忘记了画箭头,随后补上了。
七、总结及体会
这次实验相比较第一次实验还是很有难度的,首先,知识点远比上一次的多,这就要求我课下还需对理论知识进行梳理巩固。其次,由于电脑系统原因,没能够在这次实验中全程使用虚拟机,比较遗憾,我会尽快处理好虚拟机的问题。然后,对于单元测试,我认为是有利于学习的,在动手编代码的过程中巩固了课本上的理论知识,让知识付诸实践,虽然在设计、编写代码时仍不太顺利,但是java面向对象的思想有助于整理思路。通过这次实验,我在代码设计及编写方面欠缺很多,今后还需努力学习。
20135337朱荟潼Java实验报告二的更多相关文章
- 5337朱荟潼Java实验报告一
一.实验内容 1.内容一输出“Hello 名”. import java.util.Scanner;public class Hello{public static void main(String[ ...
- Java实验报告二:Java面向对象程序设计
Java实验报告二:Java面向对象程序设计 ...
- 20145203盖泽双:Java实验报告二
Java实验报告二:Java面向对象程序设计 实验要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容 ...
- 20135337朱荟潼 Linux第五周学习总结——扒开系统调用的三层皮(下)
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 一.学习内容 (一 ...
- 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...
- 20135337朱荟潼 Linux第三周学习总结 ——Linux内核源代码简介
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识笔记 1.ar ...
- 20135337朱荟潼 Linux第四周学习总结——扒开系统调用的三层皮(上)
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识点梳理 一.用 ...
- 20135337朱荟潼 Linux第六周学习总结——进程的描述和进程的创建
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 第六周 进程的描述 ...
- 20135337朱荟潼 Linux第七周学习总结——可执行程序的装载
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linu ...
随机推荐
- sencha 2.3中自己定义PullRefreshFn给PullRefresh加入下拉刷新事件
Sencha removed the refreshFn from the pullrefresh plugin in ST 2.2. Here is an user extension with g ...
- java_继承、实现、依赖、关联、聚合、组合的代码表示
一.继承.实现.依赖.关联.聚合.组合的简单代码表示 1.继承关系 1).文字描述 一个类或者接口继承了另一个类或者接口,增加了在原有的方法和属性上增加了新的方法和属性. 2).代码表示 class ...
- #leetcode刷题之路50-Pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数.示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100 #inclu ...
- 修复Gradle CreateProcess error=206
插件地址:https://plugins.gradle.org/plugin/ua.eshepelyuk.ManifestClasspath 修复Window系统中Gradle 路径太长问题, Fix ...
- 2017-2018-1 20155336 《信息安全系统设计基础》加分作业:实现mypwd
2017-2018-1 20155336 <信息安全系统设计基础>加分作业:实现mypwd 什么是PWD? 用man pwd查看: 用于打印当前工作目录的工作路径 1.命令格式:pwd[选 ...
- python基础学习1-内置函数
#!/usr/bin/env python # -*- coding:utf-8 -*- 系统内置函数 n =abs(-1) #绝对值 print(n) #bytes()函数 s="离开&q ...
- 【HAOI2016】放棋子
题面 题解 任意两个障碍不在同一列 要求你放$N$个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制. 这™不就是个错排吗??? $$ h_i=(n-1)(h_{i-1}+h_{i-2}),h_1= ...
- P3702 [SDOI2017]序列计数
P3702 [SDOI2017]序列计数 链接 分析: 首先可以容斥掉,用总的减去一个质数也没有的. 然后可以dp了,f[i][j]表示到第i个数,和在模p下是j的方案数,矩阵快速幂即可. 另一种方法 ...
- Performance Monitor2:性能计数器
性能计数器(Performance Counter)是量化系统状态或活动的一个数值,Windows Performance Monitor在一定时间间隔内(默认的取样间隔是15s)获取Performa ...
- Linux学习之常用命令(二)
1.上次介绍了一些常用的系统命令,这次又总结了一些小命令,故分享一下: 网卡地址查询的命令: ifconfig #不同于Windows系统,它的是ifconfig而不是ipconfig ip -a # ...