Java实验报告二:Java面向对象程序设计

                                                                                                     20135315  宋宸宁

实验要求:

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

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

3. 初步掌握UML建模

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

5. 了解设计模式

实验内容

(一)单元测试

(二)面向对象三要素

(三)设计模式初步

(四)练习

实验过程

(一)单元测试

(1) 三种代码

编写程序需要用到伪代码、产品代码、测试代码。

伪代码与具体编程语言无关,,伪代码从意图层面来解决问题,最终,伪代码产品代码最自然的、最好的注释。

产品代码为:

测试代码为:

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

定义:先写测试代码,然后再写产品代码的开发方法

一般步骤如下:

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

TDD模式测试代码的编写和调试结果

(二)面向对象三要素

(1)抽象

抽象能力是指"去粗取精、化繁为简、由表及里、异中求同"的能力。

程序设计中,抽象包括两个方面,一是过程抽象,二是数据抽象。

(2)封装、继承与多态

面向对象(Object-Oriented)的三要素包括:封装、继承、多态。包括面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程实现(OOP)。

OOA关注是什么(what),OOD关注怎么做(how),OOP在设计的基础上用编程语言(如Java)编码。

1、封装

定义:将数据与相关行为包装在一起以实现信息就隐藏。

封装实际上使用方法(method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,从而带来模块化(Modularity)信息隐藏(Information hiding)的好处;接口(interface)是封装的准确描述手段。 Dog类通过使用类和访问控制(private,public)隐藏了属性color,开放了接口setColor(),getColor(),bark()toString

利用UML软件设计Dog类、Cat类和Animal类,并在eclipse中实现。

2、建模语言UML

UML是一种通用的建模语言,我们实验中使用umbrello进行建模,Windows中推荐大家使用 StarUML。

过程抽象的结果是函数,数据抽象的结果是抽象数据类型(ADT),类可以作具有继承和多态机制的ADT。数据抽象才是OOP的核心和起源。

利用UML软件为Animal测试程序建模,并通过eclipse实现。

(三)设计模式初步

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

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

内容:决不要有一个以上的理由修改一个类。对象提供单一职责的高度封装,对象的改变仅仅依赖于单一职责的改变。

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

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

对扩充开放,要求软件模块的行为必须是可以扩充的,在应用需求改变或需要满足新的应用需求时,我们要让模块以不同的方式工作;

对修改封闭,要求模块的源代码是不可改动的,任何人都不许修改已有模块的源代码。

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

3、LSP(Liskov Substitusion Principle,Liskov替换原则)

内容:子类必须可以被其基类所代;使用指向基类的指针或引用的函数,必须能够在不知道具体派生类对象类型的情况下使用它。

核心思想是父类型对象可以被子类型对象所取代。

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

内容:客户不应该依赖他们并未使用的接口(接口的功能不要太多)

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

内容:高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象 。

(2)模式与设计模式

模式是某外在环境下﹐对特定问题的惯用解决方法,可以看作对一个问题可复用的专家级解决方法

(3)设计模式实示例

1、四个基本要素:

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

  问题:描述何处应用该模式

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

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

2、抽象工厂模式

容易出现过度设计的问题

只是对于整形数据来说的

将展示数据的方法抽象出来,封装到Data类中。

将创建新数据类型的对象的方法封装到factory类中

(四)练习

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

2.实验报告中统计自己的PSP(Personal Software Process)时间

步骤 耗时 百分比
需求分析  10分钟  10%
设计  20分钟  20%
代码实现  20分钟  20%
测试  40分钟  40%
分析总结  10分钟

伪代码为:

  1)复数类ComplexNumber的属性
  realPart: 实部,代表复数的实数部分
  imaginPart: 虚部,代表复数的虚数部分
  2)复数类ComplexNumber的方法
  ComplexNumber() 构造函数,将实部,虚部都置为0
  ComplexNumber(double realPart, double imaginPart) 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
  getRealPart() 获取实部
  getImaginaryPart() 获取虚部
  getRealPart(double realPart) 设置实部
  getImaginaryPart(double imaginPart) 设置虚部
  add(ComplexNumber c) 复数相加
  add(double realPart2) 复数相加
  minus(ComplexNumber c) 复数相减
  minus(double realPart2) 复数相减
  ComplexMulti(ComplexNumber c)  复数相乘
  ComplexMulti(double realPart2)  复数相乘
  toString() 把当前复数对象的实部,虚部组合成a+bi的字符串形式

产品代码为:

测试代码为:

4.总结单元测试的好处

通过TDD模式编程,可以从结果出发,对产品代码进行测试,并进行完善,能够使自己的产品代码更加严谨,更加完善。

能够提升反馈速度,减少重复工作,提高开发效率。

如果发现bug或者新的功能添加,可以马上通过运行单元测试来验证之前完成的代码是否正确,比较简单便捷。

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

  1. 20145203盖泽双:Java实验报告二

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

  2. java实验报告二

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

  3. 20135337朱荟潼Java实验报告二

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

  4. 20145221 《Java程序设计》实验报告二:Java面向对象程序设计

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

  5. 20155202 《Java程序设计》实验二(面向对象程序设计)实验报告

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

  6. Java实验报告五:Java网络编程及安全

    Java实验报告五:Java网络编程及安全                                                                               ...

  7. JAVA 实验报告

        石家庄铁道大学信息科学与技术学院       实验报告 2018年----2019年  第一学期               题目:   四则运算.生成验证码 课程名称:  JAVA语言程序设 ...

  8. 20135231 JAVA实验报告三:敏捷开发与XP实践

    ---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...

  9. 20145322第一次JAVA实验报告

    20145322第一周JAVA实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实验日期:2016.04.08 实 ...

随机推荐

  1. 全自动编译FFmpeg(含x264,fdk aac,libmp3lame,libvpx等第3方库)

    需要修改 #存放下载的源代码目录compile_dir=/root/ffmpeg_compile #库文件安装目录prefix_dir=/mnt/third-party 运行方法: source ce ...

  2. Xamarin.iOS编译时无法连接苹果系统

    Xamarin.iOS编译时无法连接苹果系统   错误信息:Unable to connect to Address=’***.***.***.***’ with User=’***’   即使Vis ...

  3. 10692 XYM-入门之道

    Description 在华农的ACM界中,也有一对闻名古今的双胖师徒组合—XYM和BM. BM师父有一个特殊的癖好,BM肚子很大,因为他很 喜欢吃西瓜,但是BM的嘴很小,一次只能吃下大小不超过K的西 ...

  4. Maven中多模块的编译顺序

    在多模块的工程中,如果模块之间存在依赖关系,那模块的编译必须要有顺序的要求.例如:P(parent)中包含A模块和B模块,且A模块依赖于B模块,那么在P中的pom,xml中需申明为: <modu ...

  5. Codeforces Round #293 (Div. 2)

    A. Vitaly and Strings 题意:两个字符串s,t,是否存在满足:s < r < t 的r字符串 字符转处理:字典序排序 很巧妙的方法,因为s < t,只要找比t字典 ...

  6. SCU3109 Space flight(最大权闭合子图)

    嗯,裸的最大权闭合子图. #include<cstdio> #include<cstring> #include<queue> #include<algori ...

  7. 如何在 .Net Framework 4.0 项目上使用 OData?

    最新的 Microsoft ASP.NET Web API 2.1 OData 5.1.0 已只能在 .Net Framework 4.5 的安装了,如果要在 VS2010的 .Net Framewo ...

  8. 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)

    RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三  多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...

  9. 关于Web Worker你必须知道的7件事

    介绍 通过使用Web Worker, 我们可以在浏览器后台运行Javascript, 而不占用浏览器自身线程.Web Worker可以提高应用的总体性能,并且提升用户体验.如果你想在自己的Web应用中 ...

  10. Quest Central for DataBase 5.0.1,6.1 (软件+注册)

    找寻了多天,终于找到了,记录下,以后重装用.输入所有组件的licenses后,提示要注册,我选择了Canada,Google了一个地方的PostCode和phone number,填写,注册成功! 软 ...