20169205实验二 Java面向对象程序设计

实验内容及步骤

(一)单元测试

1.三种代码

伪代码:以简洁的自然语言表明设计步骤;

产品代码:用以实现特定功能的程序或机器语言;

测试代码:用以对产品代码进行测试的代码

举例

学生考试等级划分程序产品代码


  1. package java2;
  2. public class MyUtil {
  3. public static String percentage2fivegrade(int grade)
  4. {
  5. //如果成绩小于60,转成“不及格”
  6. if (grade < 60)
  7. return "不及格";
  8. //如果成绩在60与70之间,转成“及格”
  9. else if (grade < 70)
  10. return "及格";
  11. //如果成绩在70与80之间,转成“中等”
  12. else if (grade < 80)
  13. return "中等";
  14. //如果成绩在80与90之间,转成“良好”
  15. else if (grade < 90)
  16. return "良好";
  17. //如果成绩在90与100之间,转成“优秀”
  18. else if (grade <=100) return "优秀";
  19. //其他,转成“错误”
  20. else
  21. return "错误";
  22. }
  23. }

其用到的测试代码如下

测试一:选取某一合法输入值进行测试


  1. package java2;
  2. public class MyUtilTest
  3. {
  4. public static void main(String[] args)
  5. { // 百分制成绩是50时应该返回五级制的“不及格”
  6. if(MyUtil.percentage2fivegrade(50) != "不及格")
  7. System.out.println("test failed!");
  8. else System.out.println("test passed!");
  9. }
  10. }

测试二:全面覆盖各等级段


  1. package java2;
  2. public class MyUtilTest2
  3. {
  4. public static void main(String[] args)
  5. {
  6. //测试正常情况
  7. if(MyUtil.percentage2fivegrade(55) != "不及格")
  8. System.out.println("test failed!");
  9. else if(MyUtil.percentage2fivegrade(65) != "及格")
  10. System.out.println("test failed!");
  11. else if(MyUtil.percentage2fivegrade(75) != "中等")
  12. System.out.println("test failed!");
  13. else if(MyUtil.percentage2fivegrade(85) != "良好")
  14. System.out.println("test failed!");
  15. else if(MyUtil.percentage2fivegrade(95) != "优秀")
  16. System.out.println("test failed!");
  17. else System.out.println("test passed!");
  18. }
  19. }

测试三:测试分段结点


  1. package java2;
  2. public class MyUtilTest3
  3. {
  4. public static void main(String[] args)
  5. {
  6. //测试边界情况
  7. if(MyUtil.percentage2fivegrade(0) != "不及格")
  8. System.out.println("test failed 1!");
  9. else if(MyUtil.percentage2fivegrade(60) != "及格")
  10. System.out.println("test failed 2!");
  11. else if(MyUtil.percentage2fivegrade(70) != "中等")
  12. System.out.println("test failed 3!");
  13. else if(MyUtil.percentage2fivegrade(80) != "良好")
  14. System.out.println("test failed 4!");
  15. else if(MyUtil.percentage2fivegrade(90) != "优秀")
  16. System.out.println("test failed 5!");
  17. else if(MyUtil.percentage2fivegrade(100) != "优秀")
  18. System.out.println("test failed 6!");
  19. else
  20. System.out.println("test passed!");
  21. }
  22. }

通过此对产品代码改进

  1. //如果成绩小于60,转成“不及格”
  2. if (grade < 60)
  3. return "不及格";

改为

  1. if(grade<0)
  2. return "错误";
  3. //如果成绩小于60,转成“不及格”
  4. else if (grade < 60)
  5. return "不及格";

运行结果(检测问题):

2.TDD(Test Driven Devlopment, 测试驱动开发)

TDD,顾名思义,是为了解决产品代码的漏洞,而以程序测试推动程序开发即先写测试代码,然后再写产品代码的开发方式。

明确当前待完成功能并记录成测试列表——〉

快速完成编写针对此功能的测试用例——>

测试代码编译不通过——〉

编写产品代码——〉

测试通过——〉

对代码进行重构,并保证测试通过——〉

循环完成所有功能开发

java中有单元测试工具JUnit来辅助进行TDD。具体过程见下:

(文字表述):java——〉File——〉New——〉Java Project——〉TDDDemo——〉右键单击TDDDemo——〉New——〉Source Folder——〉test——右键单击test——〉New——〉JUnit Test Case——〉MyUtilTest——〉其superclass改为junit.framework.TestCase

逐步完善测试代码如下(包括testNormal 、testException、testBoundary):

  1. import org.junit.Test;
  2. import junit.framework.TestCase;
  3. public class MyUtilTest extends TestCase
  4. {
  5. @Test
  6. public void testNormal()
  7. {
  8. assertEquals("不及格", MyUtil.percentage2fivegrade(55));
  9. assertEquals("及格", MyUtil.percentage2fivegrade(65));
  10. assertEquals("中等", MyUtil.percentage2fivegrade(75));
  11. assertEquals("良好", MyUtil.percentage2fivegrade(85));
  12. assertEquals("优秀", MyUtil.percentage2fivegrade(95));
  13. }
  14. @Test
  15. public void testException()
  16. {
  17. assertEquals("错误", MyUtil.percentage2fivegrade(105));
  18. assertEquals("错误", MyUtil.percentage2fivegrade(-55));
  19. }
  20. @Test
  21. public void testBoundary()
  22. {
  23. assertEquals("不及格", MyUtil.percentage2fivegrade(0));
  24. assertEquals("及格", MyUtil.percentage2fivegrade(60));
  25. assertEquals("中等", MyUtil.percentage2fivegrade(70));
  26. assertEquals("良好", MyUtil.percentage2fivegrade(80));
  27. assertEquals("优秀", MyUtil.percentage2fivegrade(90));
  28. assertEquals("优秀", MyUtil.percentage2fivegrade(100));
  29. }
  30. }

在src中新建MyUtil类并输入产品代码,然后运行测试代码(Run as——> JUnit Test)

运行结果如下(分别为修改产品代码前后测试结果):

总结:

进行产品开发时,既要保证产品代码的正确性,又要保证投入成本的可行性。结合一次代码编写很可能出现漏洞的实际情况,开发出了针对产品的测试代码;为了减少工作量,节约资源成本,又有了TDD方法。此方法创新之处在于“测试驱动”,即提前设置好标准,达到标准即视为合格,这一思想在其他很多领域也是通用的管理办法。

(二)设计模式初步

(1)S.O.L.I.D原则

• SRP(Single Responsibility Principle,单一职责原则)

对象提供单一职责的高度封装,对象的改变仅仅依赖于单一职责的改变

• OCP(Open-Closed Principle,开放-封闭原则)

即对扩充开放(功能可增加),对修改封闭(源代码不可改动)

OCP实现手段:(1)抽象和继承,(2)面向接口编程

• LSP(Liskov Substitusion Principle,Liskov替换原则)

子类必须可以被其基类所代,父类型对象可以被子类型对象所取代

• ISP(Interface Segregation Principle,接口分离原则)

客户不应该依赖他们并未使用的接口

• DIP(Dependency Inversion Principle,依赖倒置原则)

(2)模式与设计模式

模式是某外在环境(Context) 下﹐对特定问题(Problem)的惯用解决之道。其中最重要的是设计模式。

(3)设计模式实示例

设计模式四个基本元素

Pattern name:描述模式,便于交流,存档

Problem:描述何处应用该模式

Solution:描述一个设计的组成元素,不针对特例

Consequence:应用该模式的结果和权衡

示例如下


  1. package wl;
  2. class Integer
  3. {
  4. int value;
  5. public Integer()
  6. {
  7. value=100;
  8. }
  9. public void DisplayValue()
  10. {
  11. System.out.println(value);
  12. }
  13. }
  14. class Document
  15. {
  16. Integer pi;
  17. public Document()
  18. {
  19. pi = new Integer();
  20. }
  21. public void DisplayData()
  22. {
  23. pi.DisplayValue();
  24. }
  25. }
  26. public class MyDoc
  27. {
  28. static Document d;
  29. public static void main(String [] args)
  30. {
  31. d = new Document();
  32. d.DisplayData();
  33. }
  34. }

修改为支持double类

  1. package wl;
  2. //Server Classes
  3. abstract class Data
  4. {
  5. abstract public void DisplayValue();
  6. }
  7. class Doubleextends Data
  8. {
  9. double value;
  10. Double()
  11. {
  12. value=100;
  13. }
  14. public void DisplayValue()
  15. {
  16. System.out.println (value);
  17. }
  18. }
  19. // Pattern Classes
  20. abstract class Factory
  21. {
  22. abstract public Data CreateDataObject();
  23. }
  24. class IntFactory extends Factory
  25. {
  26. public Data CreateDataObject()
  27. {
  28. return new Double();
  29. }
  30. }
  31. //Client classes
  32. class Document
  33. {
  34. Data pd;
  35. Document(Factory pf)
  36. {
  37. pd = pf.CreateDataObject();
  38. }
  39. public void DisplayData()
  40. {
  41. pd.DisplayValue();
  42. }
  43. }
  44. //Test class
  45. public class MyDoc3
  46. {
  47. static Document d;
  48. public static void main(String[] args)
  49. {
  50. d = new Document(new IntFactory());
  51. d.DisplayData();
  52. }
  53. }

结果如下:

(三)练习

使用TDD的方式设计实现复数类Complex。

设计思路:在测试类中,人为设置测验标准(即注明若干情况下的输出量,应本着尽可能全面的原则);在产品代码中,为了符合测试类标准,应该分情况进行输出。

代码实现:

  1. import org.junit.Test;
  2. import junit.framework.TestCase;
  3. public class FushuTest extends TestCase {
  4. @Test
  5. public void test() {
  6. assertEquals("a输入错误 ", Fushu.fushu(0.0,10.0));
  7. assertEquals("b输入错误 ",Fushu.fushu(9.0, 0.0));
  8. assertEquals("9.0i+10.0",Fushu.fushu(9.0, 10.0));
  9. }
  10. }
  1. public class Fushu
  2. {
  3. public static String fushu(double a,double b)
  4. {
  5. if(a == 0.0)
  6. return "a输入错误 ";
  7. if(b == 0.0)
  8. return "b输入错误 ";
  9. else
  10. {
  11. String t = a+"i+"+b;
  12. return t;
  13. }
  14. }
  15. }

(四) StartUML作图

实验中的问题和解决过程

How do I re-include a class into the build path in Intellij IDEA?

解决

EDIT: Figured it out myself. Go to Settings>Project Settings>Compiler>Excludes and delete the entry

作业项目地址

码云项目地址

代码托管

实验总结

步骤 耗时 百分比
需求分析 20min 13.8%
设计 30min 20.7%
代码实现 60min 41.4%
测试 15min 10.3%
总结分析 20min 13.8%

感想

希望能够通过系统地学习,探索一些开源项目并改进功能,养成良好的开发习惯,形成一套完整的android生态知识体系,并能完全自主开发一款具有一定实用价值的app。

20169205实验二 Java面向对象程序设计的更多相关文章

  1. 实验二 Java面向对象程序设计

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

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

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  3. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

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

  4. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  5. 20145113 实验二 Java面向对象程序设计

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

  6. JAVA课程实验报告 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  7. 20145225唐振远 实验二 "Java面向对象程序设计"

    20145225<Java程序设计> 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...

  8. 20145208 实验二 Java面向对象程序设计

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

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

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

随机推荐

  1. 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内。以及两点间的测距功能

    权声明:本文为博主原创文章,未经博主允许不得转载. 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内.以及两点间的测距功能. 绘制多边形(蓝色) ...

  2. OD 快捷键

    F3 为加载一个可执行程序,进行调试分析 F2 为下断点 下完断点后,地址变为红色的 程序执行到断点处的时候会停下来 取消断点也是 F2 F4 为把程序执行到光标所在处 如果光标所在的位置在断点处之后 ...

  3. mysql 理解索引,添加索引,使用索引(哪些情况会导致索引失效)

    索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销.而如果采取索引,则可以根据索引指向的页以及记录在 ...

  4. ecshop if多条件语句写法

    smarty中的if语句和php中的if语句一样,if必须与/if成对出现.可以使用else和elseif子句. 可以使用条件修饰词:eq.ne.neq.gt.lte.le.gte.ge.is eve ...

  5. Arduino教程资料汇总(8月22日悄悄跟新了一下)

    http://www.geek-workshop.com/thread-985-1-1.html 本帖最后由 迷你强 于 2013-8-31 12:36 编辑 =====F-101 arduino基础 ...

  6. fdsf

    https://blog.csdn.net/chen_2890/article/details/83757022Elasticsearch环境搭建和介绍(Windows) https://blog.c ...

  7. 10 华电内部文档搜索系统 search01

    Lucene解决搜索问题.ibatis实现存放问题,就是解决持久化问题.Struts 2做页面显示,就是实现业务层对应的功能. Spring与ibatis结合, 添加Spring支持 右击项目名s2i ...

  8. 【BZOJ 2120】数颜色【分块/莫队】

    题意 给出n个数字和m个操作.操作有两种.1:查询区间[l,r]内不同种类得数字个数.2: 将下标为p得数字修改为v 分析 如果不是修改操作的话,用莫队贼简单就可以水过,但是因为带了修改就有一些麻烦了 ...

  9. 【LA3523 训练指南】圆桌骑士 【双连通分量】

    题意 有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置.如果发生意见分歧,则需要举手表决,因此参加会议的骑士数目必须是奇数,以防赞同和反 ...

  10. ubuntu18桌面卡死解决方法

    1 直接 alt+f2 会弹出个输入框 里边输入 小写 r 回车 这样会重启你的gnome-shell 桌面环境 2 ctrl+f3 进入终端 黑白屏环境 top 一下 你会发现 gnome-shel ...