课程:Java实验   班级:201352     姓名:池彬宁  学号:20135212

成绩:             指导教师:娄佳鹏   实验日期:15.05.05

实验密级:         预习程度:             实验时间:

仪器组次:          必修/选修:选修          实验序号:2

实验名称:     Java面向对象程序设计

实验目的与要求:

1. 初步掌握单元测试和TDD

2. 理解并掌握面向对象三要素:封装、继承、多态

3. 初步掌握UML建模

4. 熟悉S.O.L.I.D原则

5. 了解设计模式

实验要求

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

实验仪器:

名称

型号

数量

PC

1

实验内容、步骤与体会(附纸):

(一)单元测试

(1) 三种代码

编程是智力活动,不是打字,编程前要把干什么、如何干想清楚才能把程序写对、写好。与目前不少同学一说编程就打开编辑器写代码不同,我希望同学们养成一个习惯,当你们想用程序解决问题时,要会写三种码:

  • 伪代码
  • 产品代码
  • 测试代码
  • (2) TDD(Test Driven Devlopment, 测试驱动开发)

  • (二)面向对象三要素

    • +表示public
    • #表示 protected
    • -表示 private
    • (三)设计模式初步

      (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,依赖倒置原则)
        • (2)模式与设计模式

          模式是某外在环境(Context) 下﹐对特定问题(Problem)的惯用解决之道(Solution)。模式必须使得问题明晰,阐明为什么用它来求解问题,以及在什么情况下有用,什么情况下不能起作用,每个模式因其重复性从而可被复用,本身有自己的名字,有可传授性,能移植到不同情景下。模式可以看作对一个问题可复用的专家级解决方法。 计算机科学中有很多模式:

          • GRASP模式
          • 分析模式
          • 软件体系结构模式
          • 设计模式:创建型,结构型,行为型
          • 管理模式: The Manager Pool 实现模式
          • 界面设计交互模式

          这里面最重要的是设计模式,在面向对象中设计模式的地位可以和面向过程编程中的数据结构的地位相当。

        • (3)设计模式实示例

          设计模式(design pattern)提供一个用于细化软件系统的子系统或组件,或它们之间的关系图,它描述通信组件的公共再现结构,通信组件可以解决特定语境中的一个设计问题。

        • (四)练习
        • 使用TDD的方式设计关实现复数类Complex。
        • 伪代码:
            •    无输入 --- 则复数的实部为0,虚部为0
            • 仅输入实部 --- 复数的实部为所输入的实部,虚部为0
            • 仅输入虚部 --- 复数的实部为0,虚部为所输入的虚部
            • 实部虚部都输入 --- 复数的实部与虚部对应相应输入的实部虚部。
            • 加法 --- 复数的实部与实部相加,虚部与虚部相加 ,即输出p1.rePart+p2.rePart,p1.imPart+p2.imPart
            • 减法 --- 复数的实部与实部相减,虚部与虚部相减 , 即输出 p1.rePart-p2.rePart,p1.imPart-p2.imPart

         产品代码:

            

package Exercise;

public class Complex
{
double rePart,imPart;
Complex()
{
this.rePart=0;
this.imPart=0;
}
Complex(double rePart)
{
this.rePart=rePart;
this.imPart=0;
}
Complex(double rePart,double imPart)
{
this.rePart=rePart;
this.imPart=imPart;
}
Complex Jia(Complex p1,Complex p2)
{
Complex p =new Complex(p1.rePart+p2.rePart,p1.imPart+p2.imPart);
return p;
}
Complex Jian(Complex p1,Complex p2)
{
Complex p =new Complex(p1.rePart-p2.rePart,p1.imPart-p2.imPart);
return p;
}
void Print()
{
System.out.println("复数的值为:");
if(this.imPart!=0)
System.out.println(this.rePart+"+"+this.imPart+"i");
else System.out.println(this.rePart);
}
}

测试代码:

package Exercise;

public class Test
{
public static void main(String[] args)
{
Complex c=new Complex();
Complex c1=new Complex(2,7);
Complex c2=new Complex(5,2);
c1.Print();
c2.Print();
System.out.println("这两复数和为:");
System.out.println((c.Jia(c1, c2).rePart+"+"+c.Jia(c1, c2).imPart+"i").toString());
System.out.println("这两复数差为:");
System.out.println(c.Jian(c1, c2).rePart+"+"+c.Jian(c1, c2).imPart+"i");
}
}

步骤

耗时

百分比

需求分析

      5  6.25%

设计

     10  12.5% 

代码实现

     50  62.5% 

测试

     10  12.5% 

分析总结

      5 6.25% 

总结单元测试的好处:

1.单元测试能保证项目进度还能优化你的设计。

2.单元测试代码可以通过简单的事务回滚功能在生产环境上做基于真实数据的测试而不用担心会产生不必要的数据。

3. 单元测试能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证。

遇到的问题:

   在使用umbrello工具时候,创建类的Abstract无法显示。

   当输出为字符时,不懂得如何进行TDD单元测试。

解决方法:

      在创建类后忘记打开类中的Display的选项,勾去public only选项。

      明确输出,对输出进行判断。

java第二次实验报告的更多相关文章

  1. java第二次实验报告20135231

    Java实验报告二:Java面向对象程序设计 20135231 何佳 实验要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉 ...

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

    北京电子科技学院(BESTI) 实    验    报    告 课程名称:java程序设计实验      班级:1352         姓名:洪韶武      学号:20135219 成绩:   ...

  3. 南京邮电大学java第二次实验报告

    实 验 报 告 ( 2017 / 2018学年 第2学期) 课程名称 JAVA语言程序设计 实验名称 Java集成开发环境的安装与使用. Java变量.表达式与控制结构 实验时间 2018 年 4 月 ...

  4. 20165210 Java第二次实验报告

    20165210 实验二 Java面向对象程序设计 一.面向对象程序设计1--单元测试和TDD 实验要求 参考 http://www.cnblogs.com/rocedu/p/6371315.html ...

  5. 20145330《Java程序设计》第二次实验报告

    20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...

  6. 20145320《Java程序设计》第二次实验报告

    20145320<Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.12 15: ...

  7. 《Java程序设计》第二次实验报告

    20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ...

  8. 20145333 《Java程序设计》第二次实验报告

    2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ...

  9. 20145240 《Java程序设计》第二次实验报告

    20145240 <Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验 ...

随机推荐

  1. beta冲刺————第三天(3/5)

    完善的具体内容: 前端: (1)可以进行修改文字大小背景 其中,金色的文字个人觉得很好看,点赞.(我很满意啊) (2)可以改变成夜间模式(也很不错啊) 后端: 尝试将本地的后端war文件,以及数据库传 ...

  2. 2.python数据结构的性能分析

    一.引言 - 现在大家对 大O 算法和不同函数之间的差异有了了解.本节的目标是告诉你 Python 列表和字典操作的 大O 性能.然后我们将做一些基于时间的实验来说明每个数据结构的花销和使用这些数据结 ...

  3. ethereumjs/ethereumjs-util

    ethereumjs/ethereumjs-util Most of the string manipulation methods are provided by ethjs-util 更多的字符串 ...

  4. rename 表

    ----执行过程 TS.TEST ---RENAME INDEX(索引) ALTER INDEX TS.IDX1_TEST RENAME TO IDX1_TEST_BAK; ALTER INDEX T ...

  5. tarjan - 强连通

    如果两个点可以互相到达,则称为强连通.如果有向图G每个点都可以互相到达,则称为强连通图.其中G中的极大强连通子图,则称为强连通分量.现求强连通分量是多少,且哪些点属于同一个强连通分量 tarjan由d ...

  6. 无法读取配置节“oracle.manageddataaccess.client”,因为它缺少节声明

    程序发布后出现问题: 无法读取配置节“oracle.manageddataaccess.client”,因为它缺少节声明 解决办法: 1.安装了odac12.  ODTwithODAC121010.z ...

  7. jquery操作checked

    jquery操作checkbox,如何获取勾选状态?如何使得勾选?如何取消勾选? 来段代码就知道了: <html> <head> <meta charset=" ...

  8. Android下so注入汇总

    /**  作者:蟑螂一号*  原文链接:http://www.sanwho.com/133.html*  转载请注明出处*/ Android下so注入是基于ptrace系统调用,因此要想学会andro ...

  9. mfc 类三种继承方式下的访问

    知识点 public private protected 三种继承方式 三种继承方式的区别 public 关键字意味着在其后声明的所有成员及对象都可以访问. private 关键字意味着除了该类型的创 ...

  10. 【HNOI2016】序列

    题面 题解 设\([l, r]\)的最小值的位置为\(p\),那么对于左端点在区间\([l, p]\),右端点在区间\([p, r]\)的区间最小值都为\(a[p]\). 这一部分的贡献就是\(a[p ...