20135208JAVA第二次试验
北京电子科技学院(BESTI)
实 验 报 告
课程:Java程序设计 班级:1352 姓名:贺邦 学号:20135208
成绩: 指导教师:娄嘉鹏 实验日期:2015.5.7
实验密级: 预习程度: 实验时间:15:50--20:50
仪器组次: 必修/选修: 选修 实验序号:2
实验名称:实验二 Java面向对象程序设计
实验目的与要求:
1. 初步掌握单元测试和TDD
2. 理解并掌握面向对象三要素:封装、继承、多态
3. 初步掌握UML建模
4. 熟悉S.O.L.I.D原则
5. 了解设计模式
实验仪器:
名称 |
型号 |
数量 |
PC |
LenovoY510P |
1 |
Eclipse |
/ |
1 |
一、实验内容及步骤
(一)单元测试
1、 三种代码
需求:我们要在一个MyUtil类中解决如果成绩小于60,转成“不及格” 如果成绩在60与70之间,转成“及格” 如果成绩在70与80之间,转成“中等” 如果成绩在80与90之间,转成“良好” 如果成绩在90与100之间,转成“优秀” 其他,转成“错误” 。
(1)伪代码
(2)产品代码
(3)测试代码
2.TDD(Test Driven Devlopment, 测试驱动开发)
(1)概念:先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。
(2)TDD的一般步骤如下:
• 明确当前要完成的功能,记录成一个测试列表
• 快速完成编写针对此功能的测试用例
• 测试代码编译不通过(没产品代码呢)
• 编写产品代码
• 测试通过
• 对代码进行重构,并保证测试通过(重构下次实验练习)
• 循环完成所有功能的开发
(3)优势:基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。
(4)将百分制转五分制改写成TDD
代码层次结构:
运行:
(5)TDD的编码节奏是:
• 增加测试代码,JUnit出现红条
• 修改产品代码
(二)面向对象三要素
1、抽象
(1)“去粗取精、化繁为简、由表及里、异中求同”的能力
(2)过程抽象、数据抽象
2、封装、继承与多态
(1)面向对象的三要素:封装、继承、多态。
(2)面向对象的思想涉及到软件开发的各个方面,如面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程实现(OOP)。OOA根据抽象关键的问题域来分解系统,关注是什么(what)。贯穿OOA、OOD和OOP的主线正是抽象。
OOD中建模会用图形化的建模语言UML(Unified Modeling Language),UML是一种通用的建模语言。
(3)封装
封装实际上使用方法(method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,从而带来模块化(Modularity)和信息隐藏(Information hiding)的好处;接口(interface)是封装的准确描述手段。
3、例
(1)我们可以用UML中的类图来描述类Dog:
• JUnit出现绿条,任务完成
(三)设计模式初步
(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,依赖倒置原则)
OCP是OOD中最重要的一个原则,OCP的内容是:
· software entities (class, modules, function, etc.) should open for extension,but closed for modification.
· 软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。
三、遇到的问题及解决方法
出现的问题:在单元测试的编写中,由于网络信号不稳定,经常出现断网、卡机等问题,只能等待网络恢复,或者重新开启虚拟机重新进行实验,因此也耽误了很多时间
另外一大问题就是,测试代码的编写过程中因为不太熟悉程序的编写,最后是自己对照着产品代码来写的测试代码,所以测试代码出现了很多问题,花费了很多时间去修改。有的编写代码最终还是无法顺利运行。
四、实验收获
这次实验尽管花了很多时间,但是我也收获了很多。首先,通过这次实验,我对虚拟机的使用更加熟悉,也更加适应这种实验模式。单元测试也帮助我提升了自己的能力,一步一步地引导我学会处理可能出现的种种问题,同时也教会我以后在编写程序的时候要考虑到各种可能性,以提高代码的安全性。
通过这次实验,我还接触到了很多以前没有听说过的知识,例如TDD,虽然陌生,处理起来比较吃力,但对我来说还是比较开眼界的。我觉得通过每一次的java实验,不仅提高了我的学习能力,更培养了持之以恒的意识,虽然有些困难,仍然尽力去做,可能最后还是没有结果,但是也会去努力一下。
五、练习题
//伪代码
//复数类
类有虚部实部
复数的加法运算
复数的减法运算
复数的乘法运算
复数的除法运算
//产品代码
public class ComplexDemo {
// main方法
public static void main(String[] a) {
Complex b = new Complex(2, 5);
Complex c = new Complex(3, -4);
System.out.println(b + "+" + c + "=" + b.add(c));
System.out.println(b + "-" + c + "=" + b.minus(c));
System.out.println(b + "*" + c + "=" + b.multiply(c));
System.out.println(b + "/" + c + "=" + b.divide(c));
}
}
// Complex类
class Complex {
private double m;// 实部
private double n;// 虚部
public Complex(double m, double n) {
this.m = m;
this.n = n;
}
// add
public Complex add(Complex c) {
return new Complex(m + c.m, n + c.n);
}
// minus
public Complex minus(Complex c) {
return new Complex(m - c.m, n - c.n);
}
// multiply
public Complex multiply(Complex c) {
return new Complex(m * c.m - n * c.n, m * c.n + n * c.m);
}
// divide
public Complex divide(Complex c) {
double d = Math.sqrt(c.m * c.m) + Math.sqrt(c.n * c.n);
return new Complex((m * c.m + n * c.n) / d, Math.round((m * c.n - n * c.m) / d));
}
public String toString() {
String rtr_str = "";
if (n > 0)
rtr_str = "(" + m + "+" + n + "i" + ")";
if (n == 0)
rtr_str = "(" + m + ")";
if (n < 0)
rtr_str = "(" + m + n + "i" + ")";
return rtr_str;
}
}
//测试代码
public static ComplexTest{
public static void main(String[] args){
class Complex {
private double m;// 实部
private double n;// 虚部
public Complex(double m, double n) {
this.m = m;
this.n = n;
}
public String toString() {
String rtr_str = "";
if (n > 0)
rtr_str = "(" + m + "+" + n + "i" + ")";
if (n == 0)
rtr_str = "(" + m + ")";
if (n < 0)
rtr_str = "(" + m + n + "i" + ")";
return rtr_str;
}
}
}
}
六、时间统计
步骤 |
耗时 |
百分比 |
需求分析 |
1h |
16.7% |
设计 |
1h |
16.7% |
代码实现 |
2h |
33.2% |
测试 |
1h |
16.7% |
转载于:https://www.cnblogs.com/L1nke/p/4485991.html
20135208JAVA第二次试验相关推荐
- 点亮两个发光管用c语言编辑,第二个试验:用单片机点亮一个闪烁的发光管-----51单片机汇编语言试验教程 - CSDN博客...
第二个试验:用单片机点亮一个闪烁的发光管 一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一个信号灯用了.怎样才能让灯不 ...
- Linux第二次试验:Linux下的进程通信实验
Linux第二次试验:Linux下的进程通信实验 前言 一.实验目的 二.实验工具与设备 三.实验预备知识 三.实验内容和步骤 五.实验代码及步骤截图 六.实验总结 前言 为了帮助同学们完成痛苦的实验 ...
- 计算机组成与体系结构第二次试验:存储器实验
计算机组成与体系结构第二次试验:存储器实验 前言 一.实验目的 二.实验环境 三.实验内容 四.实验步骤 五.实验结果 六.实验总结 前言 为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结 ...
- 欧盟发射伽利略计划第二颗试验卫星
中新网4月28日电 欧盟(EU)北京时间27日早上6点过后,从哈萨克斯坦境内的拜科努尔发射场,发射了伽利略计划的第二颗试验卫星. 据日本广播协会电视台报道,美国拥有的GPS全球卫星定位导航系统现在已经 ...
- 操作系统第二次试验:进程控制试验
操作系统第二次试验:进程控制试验 前言 实验目的 试验环境 实验内容及步骤 1:练习编写以下实例,来分析和理解Linux中进程的状态转换: 2.(选做)在Linux下,分析程序的功能与运行结果,熟悉L ...
- 信号与系统第二次试验:连续时间 LTI 系统的时域分析
信号与系统第二次试验:连续时间 LTI 系统的时域分析 前言 一.实验目的 二.实验原理 三.实验环境 四.实验内容和步骤及实验数据 五.实验结论 六.实验总结 前言 为了帮助同学们完成痛苦的实验课程 ...
- 第二次试验上机2循环结构
第一部分: 问题及代码 /* *文件名称:201703.cpp *作者:宋永智 *完成时间:2017年3月13日 *版本号:1.0 *任务求解描述部分 *输入描述:输入一个数字 *问题描述:要求编写输 ...
- 试验OSPF域内IP地址冲突会造成的安全问题
一.试验环境 1. 使用Dynamips模拟试验网络环境. 2. 路由器使用C3640,有4个10M的以太网接口 交换机使用C3640,有16个100M的以太网接口 3. 内网连接 路由器A的e0 ...
- 试验分析——正交设计
目前正在做一个试验分析软件,主要针对正交设计和均匀设计试验.先谈谈正交设计. 正交试验设计(orthogonal design简称正交设计(orthoplan),是利用正交表(orthogonal t ...
最新文章
- 阿里巴巴首部记录片问世:看哭所有创业者!
- 【网络流】解题报告:luogu P3376 【模板】网络最大流
- mysql5.7.14 配置文件_mysql 5.7.14 安装配置方法图文教程(转)
- 记录kafka踩坑:marking the coordinator (id rack null) dead for group
- python降维之时间类型数据的处理_Python学习数据降维方法
- vs创建的c#winform项目出现缺少根文件,无法读取项目文件*.csproj?
- 《MATLAB信号处理超级学习手册》——2.7 本章小结
- Oracle P6培训系列:12进度计算
- gui框架 java_现在选择哪个Java GUI框架
- 中国最伟大的现实主义诗人:杜甫的一生
- 秦九韶算法以及大数取余应用
- 网络与系统安全笔记------身份认证技术
- 最新十大透支健康行业(2019年版)
- Total Command快捷键大全
- 数组的定义与使用(一)
- vs2012 MFC连接及操作access(2007)数据库(ADO)
- 【CF718E】Matvey's Birthday BFS+动态规划
- 『深度学习项目四』基于ResNet101人脸特征点检测
- 西门子PLC与Unity3D通讯丨PROFINET通讯
- CSS设置高斯模糊效果
热门文章
- Err:12 http://old-releases.ubuntu.com/ubuntu xenial Release 404 Not Found [IP: 91.189.88.248 80]
- 温湿度传感器调研报告
- 瑞吉外卖(6)—手机验证码登录
- 物联网技术概论:第5章
- 《提高班,我的五瓣丁香》
- c语言大作业开题报告,c语言开题报告
- div文字超链接css样式,css超链接字体颜色
- 思科网络设备console,Telnet等设置
- Harbor2.2.4在CentOS7.9安装、部署
- ABBYY FineReader 和 ABBYY PDF Transformer+功能比对