一、实验步骤

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

二、实验内容

(一)、单元测试

1.三种代码

  • 伪代码
    百分制转五分制:
    如果成绩小于60,转成“不及格”
    如果成绩在60与70之间,转成“及格”
    如果成绩在70与80之间,转成“中等”
    如果成绩在80与90之间,转成“良好”
    如果成绩在90与100之间,转成“优秀”
    其他,转成“错误”

*产品代码

public class MyUtil{public static String percentage2fivegrade(int grade){//如果成绩小于60,转成“不及格”if (grade < 60)return "不及格";//如果成绩在60与70之间,转成“及格”else if (grade < 70)return "及格";//如果成绩在70与80之间,转成“中等”else if (grade < 80)return "中等";//如果成绩在80与90之间,转成“良好”else if (grade < 90)return "良好";//如果成绩在90与100之间,转成“优秀”else if (grade < 100)return "优秀";//其他,转成“错误”else return "错误";}
}

*测试代码

public class MyUtilTest {public static void main(String[] args) {//测试边界情况if(MyUtil.percentage2fivegrade(0) != "不及格")System.out.println("test failed 1!");else if(MyUtil.percentage2fivegrade(60) != "及格")System.out.println("test failed 2!");else if(MyUtil.percentage2fivegrade(70) != "中等")System.out.println("test failed 3!");else if(MyUtil.percentage2fivegrade(80) != "良好")System.out.println("test failed 4!");else if(MyUtil.percentage2fivegrade(90) != "优秀")System.out.println("test failed 5!");else if(MyUtil.percentage2fivegrade(100) != "优秀")System.out.println("test failed 6!");else System.out.println("test passed!"); }
}

2.TDD(Test Dirven Development,测试驱动开发)

(1).明确当前要完成的功能,记录成一个测试列表
(2).快速完成编写针对此功能的测试用例
(3).测试代码编译不通过(没产品代码呢)
(4).编写产品代码
(5).测试通过
(6).对代码进行重构,并保证测试通过(重构下次实验联系)
(7).循环完成所有功能的开发

基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来,我们的产品代码只要让测试通过就可以了。

3.实验截图


(二)、面向对象三要素

1.分析

*面向对象(Object-Oriented)的三要素包括:封装、继承、多态。过程抽象的结果是函数,数据抽象的结果是抽象数据类型(Abstract Data Type,ADT),类可以作具有继承和多态机制的ADT。数据抽象才是OOP的核心和起源。

*构造函数实现对象初始化流程的封装。方法封装了操作对象的流程。Java中还可以用private封装对象私有数据成员。封装的目的主要就是隐藏对象细节,将对象当做黑箱进行操作。

public class Dog {private String color;public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String bark(){return "汪汪";}public String toString(){return "The Dog's color is " + this.getColor() +", and it shouts "+ this.bark() + "!";}}

*继承基本上就是为了避免多个类间重复定义行为共同行为。子类利用关键词extends继承父类,避免重复的行为定义。

    public abstract class Animal {private String color;public String getColor() {return color;}    public void setColor(String color) {this.color = color;}public abstract String shout();
}
public class Dog extends Animal{public String shout(){return "汪汪";}public String toString(){return "The Dog's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";}
}
public class Cat extends Animal{public String shout(){return "喵喵";}public String toString(){return "The Cat's color is " + this.getColor() +", and it shouts "+ this.shout() + "!";}
}

*多态就是使用单一接口操作多种类型的对象。

package cc.openhome;
public class RPG {public static void main(String[] args) {SwordsMan swordsMan = new SwordsMan();swordsMan.setName("Justin");swordsMan.setLevel(1);swordsMan.setBlood(200);Magician magician = new Magician();magician.setName("Monica");magician.setLevel(1);magician.setBlood(100);drawFight(swordsMan);drawFight(magician);}static void drawFight(Role role) {System.out.print(role.getName());role.fight();}
}

2.截图


(三)SOLID理解

单一职责原则:
定义的类型只做自己份内的事情,不开发无所不能的“上帝类”。
例如一个类A定义了各种属性表示状态,那么状态之间的相互关联,相互影响的关系应该在内部逻辑完成。而不要借助另一个类B来操纵A在各种状态中进行转换。
单一原则带来的好处就是得到了类级别的“高内聚”。

开放封闭原则:
类,模块,函数对扩展开放,对修改闭合。
具体做法就是在可能需要扩展的地方使用接口,抽象基类进行隔离。当需要加入新的功能时,只需要传入一个新的实现了接口或者基类的类。
例如,开发的数据访问层,用接口或基类来规范访问数据的CRUD各种操作,将来即使需要替换不同类型数据库,甚至改变表结构,都不会影响到其余的各层。对于开发工作的分工好处也很多。并且可以带来单元测试上的便利。只需要自己实现一个接口/基类的类就能够模仿数据层的工作。

里氏替换原则:
说的明白点就是子类必须能够替换它们的父类。

接口分离原则:
这个原则的意思是一个接口或者类应该拥有尽可能少的行为。
注意了关键点在尽量少。
接口的设计很容易会失控,不停地添加功能使得一个接口越来越臃肿,导致接口方法越来越多。
其实一种接口就是实现一组相关的操作就可以了。多而全不是一个好的选择。

依赖倒置原则:
高层模块不应该依赖底层模块,两者都应该依赖其抽象。其实就是”面向接口编程,不要面向实现编程“的内在要求。
此原则经常和依赖倒置联系在一起的说法就是“控制反转”,所谓反转,就是高层模块只需要知道干什么就足够了,而底层模块负责怎么做的问题。
另一种说法是细节依赖抽象,抽象不能依赖细节。


(四)UML建模

三、问题与解决

问题一、实验第一个步骤TEST总是标红。
解决方案:在同学的指导下,只要再将Junit-4.12.jar添加进去即可。

转载于:https://www.cnblogs.com/wxhblogs/p/10744972.html

2018-2019-2 20175105王鑫浩 实验二《Java面向对象程序设计》实验报告相关推荐

  1. java面向对象实验结论及心得_20162305 实验二 Java面向对象程序设计 实验报告

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

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

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

  3. 20175333曹雅坤 实验二 Java面向对象程序设计

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

  4. 20135234mqy 实验二 Java面向对象程序设计

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

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

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计                         班级:1353            姓名:陈巧然     ...

  6. java程序面向对象show,20165309 实验二 Java面向对象程序设计

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

  7. Java面向对象程序设计实训教程_JAVA课程实验报告 实验二 JAVA面向对象程序设计...

    课程:Java程序设计  班级:1352  姓名:黄伟业  学号:20135315 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习 ...

  8. 实验二《面向对象程序设计》_实验报告

    实验二<面向对象程序设计>_实验报告 一.实验前期预习准备 Junit的安装和配置 选择File->Setting打开设置对话框,在设置对话框中选择Plugins, 单击Instal ...

  9. 20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告

    实验题目 1.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能. 2.下载搭档实验二的Complex代 ...

  10. 帮你快速拿Offer!java面向对象程序设计实验报告

    Spring Security观后感--手绘思维脑(供参考) Spring Security手绘思维脑图 手绘的思维导图,是我自己根据自身的情况读完这套阿里出品的Spring Security王者晋级 ...

最新文章

  1. 11kw星三角启动延时几秒_电机星三角降压启动原理图
  2. Scala集合与Java集合的对比
  3. 12.8 早晨我一直在假笑,为了骗自己
  4. mybatis环境搭建步骤(含配置文件代码)
  5. 物种分布模型_减少物种分布建模中的空间自相关
  6. shell脚本打开一个新终端并运行指定脚本
  7. 生成高清缩略图; 添加图片、文字水印; 图片、文字水印透明
  8. swift 脚本_Swift脚本和命令行参数
  9. Atititi 计算机系 教材 目录 1. 硬件类 2 1.1. 《微机系统与接口技术》 2 1.2. 《计算机组成与系统结构(第2版)》 2 2. Atitit 操作系统原理 操作系统原理(cpu
  10. win10 带编译器codeblocks下载
  11. 汇编(五):第一个汇编程序
  12. 亲戚关系php,中国亲属关系称谓表
  13. 红黑联盟十周年 汇编语言系列教程
  14. 分享一些自己的学习经验和技巧
  15. 阅读 SICP 感想(0. 关于前言和序言)
  16. html和requests得基本用法
  17. Java程序员可以做哪些副业?
  18. python中怎么判断输入的是否是字母 阿斯克码_python中字母与ascii码的相互转换
  19. Netlogon特权提升漏洞
  20. flex布局常用布局方式(一行显示固定个数,自动换行显示)

热门文章

  1. tornado 坑集合
  2. hdu 6096 String
  3. sql 中 ALTER 和 UPDATE 的区别
  4. Javascript倒计时页面跳转
  5. Windows Server 2008密码重设盘
  6. android底部导航栏网络请求有冲突,Android 自定义底部导航栏 CustomizeTabLayout(支持访问网络图片、本地图片)...
  7. oracle重新生成控制文件,Oracle重建控制文件的语法
  8. (39)时钟抖动约束
  9. (113)FPGA面试题-LUT计算问题
  10. C语言解析动态html,【c语言】使用gumbo解析HTML