北京电子科技学院(BESTI)

实     验    报     告

课程:Java   班级: 1351     姓名:李泽源    学号:20135108

成绩:               指导教师:娄嘉鹏        实验日期:2015.5.8

实验密级:           预习程度:              实验时间:15:30~18:00

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

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

实验目的与要求:

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

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

3. 初步掌握UML建模

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

5. 了解设计模式

实验仪器:

名称

型号

数量

计算机

1

实验楼

1

步骤

耗时(min)

百分比

需求分析

15

7.5%

设计

40

20%

代码实现

45

22.50%

测试

40

20%

分析总结

60

30%

实验内容一:

(一)单元测试

(1) 三种代码

编程前要把干什么、如何干想清楚才能把程序写对、写好。想用程序解决问题时,要会写三种码:

伪代码

产品代码

测试代码

现在,我们通过一个例子说明如何写这三种代码。

需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。

伪代码:

如果成绩小于60,不及格

如果成绩在60~70,及格

如果成绩在70~80,中等

如果成绩在80~90,良好

如果成绩在90~100,优秀

产品代码:

用java将伪代码翻译一下

测试代码:

用于测试产品代码。

尝试了50这个数字

但是50是显然不够的,下边多测试几组数据。

再测试一下-10和115这种错误数据,发现运行-10的结果不对

修改代码

再次测试运行没问题了

再测试一下边界数据:

发现100不对,再修改一下代码

测试通过

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

先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。

TDD的一般步骤如下:

明确当前要完成的功能,记录成一个测试列表

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

测试代码编译不通过(没产品代码呢)

编写产品代码

测试通过

对代码进行重构,并保证测试通过(重构下次实验练习)

循环完成所有功能的开发

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

依然以上述例子为例:

关于边界测试不再一一展示,将产品代码调整至能通过测试的内容。如上截图所示。

(二)面向对象三要素

(1)抽象

抽象就是抽出事物的本质特征而暂时不考虑他们的细节。对于复杂系统问题人们借助分层次抽象的方法进行问题求解;在抽象的最高层,可以使用问题环境的语言,以概括的方式叙述问题的解。在抽象的较低层,则采用过程化的方式进行描述。在描述问题解时,使用面向问题和面向实现的术语。 程序设计中,抽象包括两个方面,一是过程抽象,二是数据抽象。

(2)封装、继承与多态(三要素)

封装实际上使用方法(method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,从而带来模块化(Modularity)和信息隐藏(Information hiding)的好处;接口(interface)是封装的准确描述手段。

以封装为基础,继承可以实现代码复用,需要注意的是,继承更重要的作用是实现多态。

多态是指不同的类对象调用同一个签名的成员方法时将执行不同代码的现象。多态是面向对象程序设计的灵活性和可扩展性的基础。

(三)设计模式初步

面向对象三要素是“封装、继承、多态”,任何面向对象编程语言都会在语法上支持这三要素。如何借助抽象思维用好三要素特别是多态还是非常困难的,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,依赖倒置原则)

OCP是OOD中最重要的一个原则,OCP的内容是

software entities (class, modules, function, etc.) should open for extension,but closed for modification.

软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。

SRP的内容是:

There should never be more than one reason for a class to change

决不要有一个以上的理由修改一个类

LSP的内容是:

Subtypes must be substitutable for their base types

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it

子类必须可以被其基类所代

使用指向基类的指针或引用的函数,必须能够在不知道具体派生类对象类型的情况下使用它

DIP的内容是:

High level modules should not depend upon low level modules. Both should depend upon abstractions

Abstractions should not depend upon details. Details should depend upon abstractions

高层模块不应该依赖于低层模块。二者都应该依赖于抽象

(四)练习

1)复数类ComplexNumber的属性

realPart: 实部,代表复数的实数部分

imaginPart: 虚部,代表复数的虚数部分

2)复数类ComplexNumber的方法

ComplexNumber() 构造函数,将实部,虚部都置为0

ComplexNumber(double r, double i) 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化

getRealPart() 获取实部

getImaginaryPart() 获取虚部

getRealPart(double d) 设置实部

getImaginaryPart(double d) 设置虚部

add(ComplexNumber c) 复数相加

add(double c) 复数相加

minus(ComplexNumber c) 复数相减

minus(double c) 复数相减

ComplexMulti(ComplexNumber c)  复数相乘

ComplexMulti(double c)  复数相乘

toString() 把当前复数对象的实部,虚部组合成a+bi的字符串形式

以上是通过测试了。可是没有打印结果,所以我把c.toString()改成System.out.println(c.toString());

还有,乘法的方法写错了,改了一次

又发现这样写也是错的,this.realPart执行了第一句后就变了,后边的结果根本不对,然后我就用了一个中间变量

但是结果是对的。打印出来+—号居然同时出现了,就把toString加了个判断

展示最终结果:

测试的好处:

先写测试代码,可以引导我去完成一个可以实现这些功能的类,对整个类的构建会有更加全观的概念。

原文:http://www.cnblogs.com/jorilee/p/4486167.html

java开发入门实验报告_Java实验二实验报告 20135108 李泽源相关推荐

  1. 20135108李泽源 Java实验一

    实验一.Java开发环境的熟悉 实验内容 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 实验知识点 1. JVM.JRE.JDK的安装位置与 ...

  2. 实验三:跟踪分析Linux内核的启动过程 ----- 20135108 李泽源

    实验要求: 使用gdb跟踪调试内核从start_kernel到init进程启动 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客,并在博客文章中注明" ...

  3. 【Java基础】 Java开发入门

    Java开发入门 Java开发入门 Java开发入门 1.思维导图 2.Java语言的特点 1.简单性 2.面向对象 3.安全性 4.跨平台性 5.支持多线程 6.分布性 3.Java语言的发展史 4 ...

  4. Java开发入门——三大平台的介绍

    ** Java开发入门 ** 废话不多说,我今天主要讲的是Sun公司将Java划分的三个技术平台,他们分别是Java Se.Java EE.Java ME,接下来针对这三个平台分别进行详细介绍. Ja ...

  5. java程序设计教程实验报告_java程序设计课程--实验报告-实验13.doc

    java程序设计课程--实验报告-实验13.doc 还剩 12页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: ...

  6. java弹弹球实验报告_Java弹球游戏实验报告—chen

    Java弹球游戏实验报告-chen 课 程 设 计 报 告 题 目 弹球小游戏 姓 名 方成 学 号 20 专 业 java 指导教师 陈华恩 2013年 12 月 30 目录 一.实验目的2 二.需 ...

  7. java从入门到精通_Java入门到精通、学习路线、就业方向、薪资及前景分析(上篇)...

    今天就大家最关心的Java热门问题进行简要分析,希望能对想要学习或是正在学习Java的小伙伴能够有所帮助~(大家多多关注呦~) 一.首先我们要了解Java是什么? 好学吗? Java是一种广泛使用的计 ...

  8. java开发环境怎么写_Java开发基础设置:如何配置Java运行环境

    很多朋友都有自学Java的愿望,但是自学一门语言何其艰难,没人指引的话往往不得其门而入.那么,今天千锋老师就给大家带来Java入门课程中配置Java运行环境的方法,希望能够对大家有所帮助. 一.JDK ...

  9. JAVA编程思想.姊妹篇.JAVA编程讲义.第1章 Java开发入门

    1.1 Java概述 1.1.1 Java的由来与发展 Java是一种高级计算机语言,它是由Sun公司(2009年4月20日被Oracle公司收购,2010年完成合并)于1995年5月推出的一种用来编 ...

最新文章

  1. 虚拟化--015 配置VMware View Event database失败:
  2. 1. 文件系统——磁盘分区、各目录功能、硬盘
  3. 【ACM】杭电OJ 2010
  4. linux安装 java jdk
  5. C. Little Girl and Maximum Sum【差分 / 贪心】
  6. div置于页面底部_网易内部PPT模板有点丑,如何花最少的时间提高页面颜值?
  7. mysql使用索引下推的好处_mysql的索引下推理解和实践
  8. HDU 2006 (水)
  9. 现代通信原理4.1:随机变量
  10. 淘宝京东鞋服板砖线报,秒杀抢购捡漏,兔子仙女宝妈童话镇等之后的寄件价格问题,这个可以帮你sheng下好多快递q,【云杰智慧邀请码:HJDNA5】
  11. Dijkstra算法和Floyd算法超详解以及区别
  12. 关于数字的智力题-三个女儿的年龄
  13. php error reporting,php error_reporting
  14. 如何用SCRM销售管理系统管理销售和做销售管理
  15. 狂野飙车8服务器在哪个文件夹,狂野飙车8数据包放哪?安卓版数据包路径介绍
  16. ROL,ROR,SAR,SHR,SAL,SHL区别
  17. 做微商,可不可以温柔一点
  18. 连接打印服务器显示无合适驱动,Silex DS-510打印服务器驱动(解决DS-510打印机连接问题)V7.2.1 最新版...
  19. 计算机vb2级知识点,2020年全国计算机二级VB复习知识点:VB编码规则
  20. C- 字母金字塔打印

热门文章

  1. 掌握这些电脑知识,你会玩得很无耻
  2. 最火的python视频_超火Python400集视频,116-248集思维导图视频介绍(第二季)
  3. (转)Kangle配置文件
  4. 工具开发|键盘记录工具原理及代码实现
  5. 看雪软件安全精选:二进制各种漏洞原理实战分析总结
  6. 2022-2028全球与中国儿童注意力缺陷和多动障碍市场现状及未来发展趋势
  7. Markdown语法学习笔记
  8. logstash的lumberjack协议解析
  9. 像素鸟html代码,flappy-bird方块版(用小方块替代像素鸟)
  10. 绘图工具Origin Pro 2022在Win10系统下的安装使用