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实验报告二的更多相关文章

  1. 5337朱荟潼Java实验报告一

    一.实验内容 1.内容一输出“Hello 名”. import java.util.Scanner;public class Hello{public static void main(String[ ...

  2. Java实验报告二:Java面向对象程序设计

    Java实验报告二:Java面向对象程序设计                                                                               ...

  3. 20145203盖泽双:Java实验报告二

    Java实验报告二:Java面向对象程序设计 实验要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容 ...

  4. 20135337朱荟潼 Linux第五周学习总结——扒开系统调用的三层皮(下)

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 一.学习内容 (一 ...

  5. 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...

  6. 20135337朱荟潼 Linux第三周学习总结 ——Linux内核源代码简介

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识笔记 1.ar ...

  7. 20135337朱荟潼 Linux第四周学习总结——扒开系统调用的三层皮(上)

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识点梳理 一.用 ...

  8. 20135337朱荟潼 Linux第六周学习总结——进程的描述和进程的创建

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 第六周 进程的描述 ...

  9. 20135337朱荟潼 Linux第七周学习总结——可执行程序的装载

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linu ...

随机推荐

  1. 源码编译安装mysql-boost-5.7.16.tar.gz报错分析处理

    Plugin 'FEDERATED' is disabled.  mysqld: Table 'mysql.plugin' doesn't exist  [ERROR] Can't open the ...

  2. springboot mybatis 后台框架平台 shiro 权限 集成代码生成器

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.servic ...

  3. docker 简要学习

    一.Docker的安装和启动 使用环境centos7 yum包更新到最新 sudo yum update 安装需要的软件包,yum-util提供yum-config-manager功能 sudo yu ...

  4. python学习之路(1)

    今天刚入门python,对于有c和java基础的我,学习起来还是比较容易的,我并没有用PyCharm写,而是最基础的IDLE,学习python比java容易的地方就是不要写分号,不要打包,不要定义等等 ...

  5. UWP Test Webview JS interact, new window open (新窗口打开)

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...

  6. webservice的 发布

    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使 ...

  7. 8-[CSS]-选择器

    1.选择器 首先来说一下,什么是选择器.在一个HTML页面中会有很多很多的元素,不同的元素可能会有不同的样式,某些元素又需要设置相同的样式,选择器就是用来从HTML页面中查找特定元素的,找到元素之后就 ...

  8. Gitlab+Jenkins学习之路(十一)之Jenkins自动触发构建和发布

    思路图: 一.下载gitlab plugin jenkins-->系统管理-->管理插件-->下载并安装gitlab plugin 二.配置gitlab认证 路径:Jenkins-- ...

  9. Openstack入门篇(十四)之horizon服务的部署与测试

    1.Horizon介绍 •提供一个web界面操作openstack的系统 •使用Django框架基于openstack API开发 •支持将session存储在DB.memcached •支持集群 t ...

  10. 洛咕 P2463 [SDOI2008]Sandy的卡片

    哈希水过. 首先这是一段delta相同的序列,按照套路差分一下,b[i]=a[i]-a[i-1],然后就是这些序列的最长公共子段 由于数据范围很小,就可以二分,枚举第一个序列的子段然后每个子序列暴力c ...