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. Struts2 的ActionContext 详解

    转自:http://www.cnblogs.com/shaohz2014/p/3962779.html ActionContext是Action的上下文,Struts2自动在其中保存了一些在Actio ...

  2. iOS10--消息通知的基本使用

    官方将通知单独放在了UserNotifications.framework,使用时需要导入框架.UserNotifications.framework主要类文件: UNCalendarNotifica ...

  3. JS form跳转到新标签页并用post传参

    通过js实现跳转到一个新的标签页,并且传递参数.(使用post传参方式) 1 超链接<a>标签  (get传参)  <a href="http://www.cnblogs. ...

  4. 用windows或ubuntu访问apfs或mac分区

    MacBook读写不了NTFS,Windows也读写不了APFS和Mac OS 扩展分区,Ubuntu又用的是ext4分区,有时候想用U盘传点东西真的费劲.著名公司Paragon Software开发 ...

  5. html 头标签 <meta http-equiv 属性应用。

    比较常用的 1. 网页出现乱码时设置字符集 <meta http-equiv="content-Type" content="text/html; charset= ...

  6. C语言数组截取常见问题

    这是一段数组截取的代码,函数功能是检查后面的'*'的数量,若多于指定输入数,则把多余的'*'删除 void fun( char *a,int n ) { char *p = a; while(*p) ...

  7. golang 杂思

    正文 这里给大家总结一些 Go player 开发小技巧. 欢迎批评和交流, 望大家喜欢. 1. 配置管理 推荐一种简单粗暴的配置管理方式 [配置 映射 内部结构]. 例如有个配置文件 config. ...

  8. 基于Verilog的奇数偶数小数分频器设计

    今天呢,由泡泡鱼工作室发布的微信公共号“硬件为王”(微信号:king_hardware)正式上线啦,关注有惊喜哦.在这个普天同庆的美好日子里,小编脑洞大开,决定写一首诗赞美一下我们背后伟大的团队,虽然 ...

  9. 关于Matlab在绘图时中文字体显示不一致的问题

    我的运行环境: OS: Win10 教育版 64-bit Matlab版本:Matlab 2017a  64-bit 在使用Matlab绘图时,而横坐标轴.纵坐标轴.标题有汉字时,会发现在GUI的显示 ...

  10. Nginx+iptables屏蔽访问Web页面过于频繁的IP(防DDOS,恶意访问,采集器)

    通过分析nginx的日志来过滤出访问过于频繁的IP地址,然后添加到nginx的blockip.conf,并重启nginx 脚本如下: #!/bin/shnginx_home = /Data/app_1 ...