Java实验二
北京电子科技学院(BESTI)
实 验 报 告
课程:Java程序设计 班级:1351 姓名:黄君如 学号:20135117
成绩: 指导教师:娄嘉鹏 实验日期:2015.5.7
实验密级: 预习程度: 实验时间:16:30-18:30
仪器组次: 必修/选修:选修 实验序号:2
实验名称: Java面向对象程序设计
实验目的与要求:1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》课程
2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获、教训等)
3.严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
4.请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。
实验仪器:
|
名称 |
型号 |
数量 |
|
PC |
MacBookAir |
1 |
一、实验内容
1.初步掌握单元测试和TDD
2.理解并掌握面向对象三要素:封装、继承、多态
3.初步掌握UML建模
4.熟悉S.O.L.I.D原则
5.了解设计模式
二、实验步骤
(一)单元测试
1. 三种代码:伪代码、产品代码、测试代码
(1)测试正常情况


(2)测试出错情况


(3)测试边界情况


2. TDD(Test Driven Development,驱动测试开发)
TDD一般步骤
- 明确当前要完成的功能,记录成一个测试列表
- 快速完成编写针对此功能的测试用例
- 测试代码编译不通过(没产品代码呢)
- 编写产品代码
- 测试通过
- 对代码进行重构,并保证测试通过(重构下次实验练习)
- 循环完成所有功能的开发
(1)JUnit出现红条,测试没有通过

(2)修改后出现绿条,测试通过

TDD编码节奏:
1.增加测试代码,JUnit出现红条
2.修改产品代码
3.JUnit出现绿条,任务完成
(3)自行测试


(二)面向对象三要素
1. 抽象
2. 封装、继承和多态
封装实际上使用方法(method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,从而带来模块化(Modularity)和信息隐藏(Information hiding)的好处;接口(interface)是封装的准确描述手段。

- +表示public
- #表示 protected
- -表示 private




(三)设计模式初步
1.S.O.L.I.D原则
(1)
SRP(Single Responsibility Principle,单一职责原则)
OCP(Open-Closed Principle,开放-封闭原则)
LSP(Liskov Substitusion Principle,Liskov替换原则)
ISP(Interface Segregation Principle,接口分离原则)
DIP(Dependency Inversion Principle,依赖倒置原则)
(2)OCP是OOD中最重要的一个原则,OCP的内容是:
software entities (class, modules, function, etc.) should open for extension,but closed for modification.
软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。
(3)OCP可以用以下手段实现
抽象和继承 b.面向接口编程。
(4)SRP的内容是:
There should never be more than one reason for a class to change
决不要有一个以上的理由修改一个类
(5)LSP的内容是:
Subtypes must be substitutable for their base types
Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it
子类必须可以被其基类所代
使用指向基类的指针或引用的函数,必须能够在不知道具体派生类对象类型的情况下使用它
(6)ISP的内容是:
Clients should not be forced to depend upon interfaces that they do not use
客户不应该依赖他们并未使用的接口
(7)DIP的内容是:
High level modules should not depend upon low level modules. Both should depend upon abstractions
Abstractions should not depend upon details. Details should depend upon abstractions
高层模块不应该依赖于低层模块。二者都应该依赖于抽象
抽象不应该依赖于细节。细节应该依赖于抽象
2.模式与设计模式
GRASP模式
分析模式
软件体系结构模式
设计模式:创建型,结构型,行为型
管理模式: The Manager Pool 实现模式
界面设计交互模式
…
3.设计模式实例
设计模式有四个基本要素:
Pattern name:描述模式,便于交流,存档
Problem:描述何处应用该模式
Solution:描述一个设计的组成元素,不针对特例
Consequence:应用该模式的结果和权衡(trade-offs)


(四)练习
1.使用TDD的方式设计实现复数类Complex
(1)伪代码

(2)产品代码及测试代码



2.PSP时间
|
步骤 |
耗时 |
百分比 |
|
需求分析 |
24min |
20% |
|
设计 |
36min |
30% |
|
代码实现 |
24min |
20% |
|
测试 |
12min |
10% |
|
分析总结 |
24min |
20% |
三、总结
1.实验体会
这次实验主要内容是面向对象程序的设计、代码的设计、测试方法,真正让我们编程的只有最后一项内容。这次实验在设计上花的时间明显比上次实验要多,我发现设计程序是十分重要的,如果在每次编程前写一些伪代码,有了清晰的思路,编写程序就会快许多。这次实验的测试时间和上次差不多,但是我认为今后应该增加测试的时间,多用一些程序不希望的参数来测试程序可以更好地优化程序。通过这次实验,我初步了解了JAVA程序设计和测试的重要性,今后一定要继续加强训练。
2.单元测试的好处
减少问题出现,提高程序质量
更快地定位问题出现在哪个模块,提高效率,减少成本
优化程序的设计
可以放心修改部分代码
Java实验二的更多相关文章
- 20175212童皓桢 Java实验二-面向对象程序设计实验报告
20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...
- Java实验二实验报告:java面向对象程序设计
java实验二实验报告 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验 ...
- Java实验二20135104
课程:Java程序设计 班级: 1351 姓名:刘帅 学号:20135104 成绩: 指导教师:娄嘉鹏 实验日期:2 ...
- 20165326 java实验二
2017-2018-2 20165326实验二<Java面向对象程序设计>实验报告 课程:Java程序设计 班级:1653班 姓名:陈卓 学号:20165326 成绩:指导教师:娄嘉鹏 实 ...
- java实验二——输出一个指定整数的所有质因数
import java.util.Scanner; public class 实验二 { /** * @param args */ public static void main(String[] a ...
- 20145106 java实验二
1)复数类ComplexNumber的属性 m_dRealPart: 实部,代表复数的实数部分 m_dImaginPart: 虚部,代表复数的虚数部分 public class ComplexNumb ...
- 20145324 Java实验二
实验1: 先建立.java 在建立test 测试正常情况 测试出错情况 错误 修改后的代码 正确 测试边界情况 100时出错 修改后的代码 测试 实验2: 先建test在写,java 实验3:建模 练 ...
- java实验二实验报告
一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 二.实验过程(本次试验都 ...
- 20165329 Java实验二:面向对象编程
实验内容: 面向对象程序设计-1 实验要求: 提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图 实验步骤: 1.按照老师博客的要求新建一个MyUtil项目 在src内新建ja ...
随机推荐
- VM虚拟机打不开,没有反应,解决方法。
最近的项目开发,需要用到虚拟机,但是打开虚拟机VM8却发现,以前创建的虚拟机都用不了,点击左侧[我的计算机]中的虚拟机列表,没有任何反应,也没有任何错误提示,服务中所有的虚拟机服务都开启了,网上百度没 ...
- STL set简单用法
set的常见用法详解 set翻译为集合,是一个内部自动有序并且不含重复元素的容器. 可以用于去掉重复元素,或者元素过大,或者不能散列的情况,set只保留元素本身而不考虑它的个数. 头文件:#inclu ...
- SAP SD模块功能构成
- 用PHP的curl实现并发请求远程文件(并发抓取远程网页)
PHP的curl功能确实强大了.里面有个curl_multi_init功能,就是批量处理任务.可以利用此,实现多进程同步抓取多条记录,优化普通的网页抓取程序. 一个简单的抓取函数: function ...
- cenos下配置Apache+PHP最新版7.1.6+MySQL最新版(5.7.18)
一.安装Apache,略. 二.安装PHP 1.下载php7 wget -O php7.tar.gz http://cn2.php.net/distributions/php-7.1.6.tar.gz ...
- 【转】MySQL 当记录不存在时insert,当记录存在时update
MySQL当记录不存在时insert,当记录存在时更新:网上基本有三种解决方法 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句 ...
- JavaScript高级程序设计学习(五)之对象
众说周知,java是面向对象的编程语言.一个类包含多个对象,例如车类,它包含宝马,奔驰,东风,本田,莲花等这样的车,而品牌和颜色或者某种标识就是它的属性.车包含很多种类,但是共性还是有的,比如共性有四 ...
- 【Codeforces 113B】Petr#
Codeforces 113 B 题意:有一个母串\(S\)以及两个串\(S_{begin}\)和\(S_{end}\),问\(S\)中以\(S_{begin}\)为开头并且以\(S_{end}\)为 ...
- java 数据类型和运算符
1.注释 单行注释: //哈哈哈 多行注释: /* 啦啦啦 */ 文档注释: /** */注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API) ...
- 数据库隔离级别深入理解(ORACLE)
TRANSACTION_READ_UNCOMMITTED 1 这种隔离级别最低,脏读,不可重复读,幻读都会发生,我用的oracle,并没有支持这个级别,不作研究. TRANSACTION_READ_C ...