当前位置: 首页 > news >正文

20145222黄亚奇《Java程序设计》实验二实验报告

20145222《Java程序设计》第2次实验报告

实验步骤与内容

一、实验内容

  1. 初步掌握单元测试和TDD
  2. 理解并掌握面向对象三要素:封装、继承、多态
  3. 初步掌握UML建模
  4. 熟悉S.O.L.I.D原则
  5. 了解设计模式

二、实验步骤

1.单元测试

(1) 三种代码
伪代码、产品代码、测试代码

(2) TDD(Test Driven Devlopment, 测试驱动开发)
a.先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。TDD的一般步骤如下:
-明确当前要完成的功能,记录成一个测试列表
-快速完成编写针对此功能的测试用例
-测试代码编译不通过
-编写产品代码
-测试通过
-对代码进行重构,并保证测试通过
-循环完成所有功能的开发

b.基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。 Java中有单元测试工具JUnit来辅助进行TDD,红叉说明代码存在语法错误,原因很简单,MyUtil类还不存在,类中的percentage2fivegrade方法也不存在,我们在TDDDemo的src目录中新建一个MyUtil的类,并实现percentage2fivegrade方法

c.测试结果出现了一个绿条(green bar),说明测试通过了。
886717-20160416214526832-928709698.png

2.面向对象三要素

  • 封装、继承、多态
  • OO三要素的第一个要素是封装,封装就是将数据与相关行为包装在一起以实现信息就隐藏。Java中用类进行封装,比如一个Dog类:
    886717-20160416214537566-956113036.png

886717-20160416214602129-1834514239.png

3.设计模式初步

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,依赖倒置原则)

4.练习

使用TDD的方式设计关实现复数类Complex
打印一个复数,打印四则运算的语句

public class ComplexNumber {

    public static void main(String[] args) {
        Complex x = new Complex(1.0 , -2.0);
        Complex y = new Complex(3.0 , 4.0);
        Complex.printSentence(x, y);
    }

}
class Complex
{
    private double a,b;
    Complex(double a,double b)
    {
        this.a = a;
        this.b = b;
    }
    static Complex Add(Complex x,Complex y)
    {
        return new Complex(x.a+y.a, x.b+y.b);
    }
    static Complex Minus(Complex x,Complex y)
    {
        return new Complex(x.a-y.a, x.b-y.b);
    }
    static Complex Multiple(Complex x,Complex y)
    {
        return new Complex(x.a * y.a - x.b * y.b, x.a * y.b + x.b * y.a);
    }
    static Complex Divide(Complex x,Complex y)
    {
        Complex conjugate = new Complex(y.a, -y.b);
        double mo = (y.a)*(y.a) + (y.b)*(y.b);

        Complex t = Multiple(x,conjugate);
        return new Complex(t.a/mo , t.b/mo);
    }
    static String print(Complex x)
    {
        if (x.b > 0)
            return x.a + "+" + x.b + "i";
        else
            return x.a + "-" + (-x.b) + "i";
    }
    static void printSentence(Complex x, Complex y)
    {
        System.out.println("("+ print(x) + ")+("+ print(y) + ") =" +print(Add(x, y)));
        System.out.println("("+ print(x) + ")-("+ print(y) + ") =" +print(Minus(x, y)));
        System.out.println("("+ print(x) + ")*("+ print(y) + ") =" +print(Multiple(x, y)));
        System.out.println("("+ print(x) + ")/("+ print(y) + ") =" +print(Divide(x, y)));
    }

}
  • 实验结果截图:
    886717-20160416214653004-1991210569.png

我的PSP时间

PSP时间

步骤耗时百分比
需求分析20mi13.8%
设计30min20.7%
代码实现60min41.4%
测试15min10.3%
分析总结20min13.8%

转载于:https://www.cnblogs.com/huangyaqi/p/5399506.html

相关文章:

  • TaskCompletionSource的使用场景
  • Nginx负载均衡配置实例详解(转)
  • H5页面快速搭建之高级字体应用实践
  • 技能的释放与CD
  • 数据仓库专题(6)-数据仓库、主题域、主题概念与定义
  • 实现滑动分页(微博分页方式)
  • MySQL 读写分离介绍及搭建
  • corosync + pacemaker + nfs 构建高可用mysql集群
  • GCC编译器使用
  • EHcache经典配置
  • 基于 lua-resty-upload 实现简单的文件上传服务
  • 面试题系列一之 程序生命周期
  • Linux常用网络命令
  • 静态long类型常量serialVersionUID的作用
  • 用百度输入法的用户体验
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Apache的80端口被占用以及访问时报错403
  • MySQL QA
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • spring security oauth2 password授权模式
  • vue数据传递--我有特殊的实现技巧
  • yii2权限控制rbac之rule详细讲解
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 服务器之间,相同帐号,实现免密钥登录
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 让你的分享飞起来——极光推出社会化分享组件
  • 人脸识别最新开发经验demo
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序:实现悬浮返回和分享按钮
  • 温故知新之javascript面向对象
  • 问题之ssh中Host key verification failed的解决
  • !$boo在php中什么意思,php前戏
  • #AngularJS#$sce.trustAsResourceUrl
  • %check_box% in rails :coditions={:has_many , :through}
  • (12)目标检测_SSD基于pytorch搭建代码
  • (175)FPGA门控时钟技术
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (差分)胡桃爱原石
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .NET DataGridView数据绑定说明
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .net知识和学习方法系列(二十一)CLR-枚举
  • @Valid和@NotNull字段校验使用
  • [ 数据结构 - C++] AVL树原理及实现
  • [.net]官方水晶报表的使用以演示下载
  • [asp.net core]project.json(2)
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [C++基础]-初识模板