Java实验报告二:Java面向对象程序设计
Java实验报告二:Java面向对象程序设计
实验要求:
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、抽象工厂模式
容易出现过度设计的问题
只是对于整形数据来说的
(四)练习
1使用TDD的方式设计关实现复数类Complex。
2.实验报告中统计自己的PSP(Personal Software Process)时间
步骤 | 耗时 | 百分比 |
需求分析 | 40min | 20% |
设计 | 60min | 30% |
代码实现 | 70min | 35% |
测试 | 20min | 10% |
分析总结 | 10min | 5% |
(1)伪代码:
1. A = a(实数部分) + bi(虚数部分);
2.相加
实数部分与实数部分相加,虚数部分与虚数部分相加
3.相减
实数部分与实数部分相减,虚数部分与虚数部分相减
(2)产品代码:
(3)测试代码
(4)实验体会
这次的试验相较于第一次试验难度有所提高,所以花费了较多的时间。而且实验楼环境一直出问题,虽然最后使用了自己电脑上的Eclipse,但Umbrello环节一直没有办法完成,最后在同学电脑上完成。