实验内容

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

实验要求

  • 1.参考Intellj IDEA 简易教程

    提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。
  • 2.参考 积极主动敲代码使用JUnit学习Java,以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。
  • 3.实验二 Java面向对象程序设计

    对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式用自己的学号%6进行取余

    运算,根据结果进行代码扩充:

    让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确
  • 4.以TDD的方式开发一个复数类Complex支持加减乘除。
  • 5.使用StarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。类图中至少两个类。

实验步骤

(一)单元测试

编程是智力活动,不是打字,编程前要把干什么、如何干想清楚才能把程序写对、写好。所以当想用程序解决问题时,要会写三种码:伪代码、产品代码、测试代码。







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

TDD的一般步骤如下:

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

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

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

编写产品代码

测试通过

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

循环完成所有功能的开发

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



面向对象(Object-Oriented)的三要素包括:封装、继承、多态。

面向对象的思想涉及到软件开发的各个方面,如面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程实现(OOP)。OOA根据抽象关键的问题域来分解系统,关注是什么(what)。OOD是一种提供符号设计系统的面向对象的实现过程,用非常接近问题域术语的方法把系统构造成“现实世界”的对象,关注怎么做(how),通过模型来实现功能规范。OOP则在设计的基础上用编程语言(如Java)编码。贯穿OOA、OOD和OOP的主线正是抽象。

OOD中建模会用图形化的建模语言UML(Unified Modeling Language),UML是一种通用的建模语言,我们实验中使用umbrello进行建模,Windows中推荐大家使用 StarUML。

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

OO三要素的第一个要素是封装,封装就是将数据与相关行为包装在一起以实现信息就隐藏。

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

使用starUML

S.O.L.I.D原则

SRP(Single ResponsibilityPrinciple,单一职责原则)

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

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

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

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

设计模式:创建型,结构型,行为型

让系统支持Double类

设计模式实例

package exp2;
// Server Classes
abstract class Data {
abstract public void DisplayValue();
}
class Integer extends Data {
int value;
Integer() {
value=100;
}
public void DisplayValue(){
System.out.println (value);
}
}
class Double extends Data {
double value;
Double() {
value=8.345;
}
public void DisplayValue(){
System.out.println (value); } }
// Pattern Classes
abstract class Factory {
abstract public Data CreateDataObject();
}
class IntFactory extends Factory {
public Data CreateDataObject(){
return new Integer();
}
}
class DoubleFactory extends Factory {
public Data CreateDataObject(){
return new Double();
}
}
//Client classes
class Document {
Data pd;
Document(Factory pf){
pd = pf.CreateDataObject();
}
public void DisplayData(){
pd.DisplayValue();
}
}
//Test class
public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document(new DoubleFactory());
d.DisplayData();
}
}

设计Complex。

产品代码

package exp2;

import java.util.Scanner;
import java.lang.String; public class Complex {
private double a;
private double b; public Complex(){
this.a = 0;
this.b = 0;
} public Complex(double a, double b) {
this.a = a;
this.b = b;
} public double getA(){
return this.a;
}
public double getB(){
return this.b;
} public double setA(double a){
this.a = a;
return a;
}
public double setB(double b){
this.b = b;
return b;
} Complex ComplexAdd(Complex c){
double a = c.getA();
double b = c.getB();
double new_a = a + this.a;
double new_b = b + this.b;
return new Complex(new_a, new_b);
} Complex ComplexMinus(Complex c){
double a = c.getA();
double b = c.getB();
double new_a = a - this.a;
double new_b = b - this.b;
return new Complex(new_a, new_b);
} Complex ComplexMulti(Complex c){
double a = c.getA();
double b = c.getB();
double new_a = a * this.a;
double new_b = b * this.b;
return new Complex(new_a, new_b);
}
Complex ComplexDiv(Complex c){
double a = c.getA();
double b = c.getB();
double new_a = (a * c.b + b *c.a) / (c.b * c.b + c.a * c.a);
double new_b = (b * c.b + a * c.a) / (c.b * c.b + c.a * c.a);
return new Complex(new_a, new_b);
} public String toString(double a,double b){
String cnum = " ";
if(b == 0) {
cnum = "" + a;
}
else if(b < 0) {
cnum = a + b + "i";
}
else if(b > 0){
cnum = a + "+" + b +"i";
}
return cnum;
}
}

测试代码

package exp2;
import static org.junit.Assert.*;
import org.junit.Test; public class ComplexTest {
@Test
public void Complex(){ Complex num1 = new Complex();
assert num1.getA() == 0 : "error1:Complex()";
assert num1.getA() == 0 : "error2:Complex()"; Complex num2 = new Complex(0, 0);
assert num2.getA() == 0 : "error3:Complex(double a,double b)";
assert num2.getB() == 0 : "error4:Complex(double a,double b)"; Complex num3 = new Complex();
num3.setA(0);
assert num3.getA() == 0 : "error7:setA(double a)"; num3.setB(0);
assert num3.getB() == 0 : "error8:setB(double b)"; Complex num4 = new Complex();
Complex num5 = new Complex(-1, -1);
Complex num6 = new Complex();
num4 = num1.ComplexAdd(num1);
assert num4.getA() == 0 : "error9:ComplexAdd(Complex c)";
assert num4.getB() == 0 : "error10:ComplexAdd(Complex c)";
num6 = num1.ComplexAdd(num5);
assert num6.getA() == -1 : "error11:ComplexAdd(Complex c)";
assert num6.getB() == -1 : "error12:ComplexAdd(Complex c)"; Complex num7 = new Complex();
Complex num8 = new Complex(1, 1);
Complex num9 = new Complex();
num7 = num1.ComplexMinus(num1);
assert num7.getA() == 0 : "error13:ComplexMinus(Complex c)";
assert num7.getB() == 0 : "error14:ComplexMinus(Complex c)";
num9 = num1.ComplexMinus(num8);
assert num9.getA() == 1 : "error13:ComplexMinus(Complex c)";
assert num9.getB() == 1 : "error14:ComplexMinus(Complex c)"; Complex num10 = new Complex();
Complex num11 = new Complex(-1, -1);
Complex num12 = new Complex();
Complex num13 = new Complex();
Complex num14 = new Complex(1, 1);
num10 = num1.ComplexMulti(num1);
assert num10.getA() == 0 : "error15:ComplexMulti(Complex c)";
assert num10.getB() == 0 : "error16:ComplexMulti(Complex c)";
num12 = num1.ComplexMulti(num11);
assert num12.getA() == 0 : "error17:ComplexMulti(Complex c)";
assert num12.getB() == 0 : "error18:ComplexMulti(Complex c)";
num13 = num11.ComplexMulti(num14);
assert num13.getA() == -1 : "error19:ComplexMulti(Complex c)";
assert num13.getB() == -1 : "error20:ComplexMulti(Complex c)"; System.out.println("Pass!");
}
}

2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告的更多相关文章

  1. 实验二Java面向对象程序设计实验报告(2)

    实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...

  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. 20162311 实验二 Java面向对象程序设计 实验报告

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

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

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

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

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

  8. 20155217 实验二 Java面向对象程序设计 实验报告

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

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

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

  10. 20162305 实验二 Java面向对象程序设计 实验报告

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

随机推荐

  1. 注解实现IOC和DI

    1.组件扫描 Spring3.0后为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Component.@Service.@Controller.@Repository注解的类,并把这些类纳 ...

  2. Java包名命名规则(转载)

    转载自:http://lilinhai548.blog.163.com/blog/static/5847332920155132151359/ 鸣谢原作者  学习Java的童鞋们都知道,Java的包. ...

  3. 利用Docker安装Web前端性能测试工具Sitespeed.io

    目录结构 一.Sitespeed.io概述 1.Sitespeed.io简介 2.Sitespeed.io使用场景 二.Sitespeed.io的安装和使用 1.安装Sitespeed.io 2.连接 ...

  4. laya3d 文件格式

    先认识下laya3d的一些文件 导出文件说明:               ls        ---    场景文件: Json文件,包含场景中所有节点的数据信息,包含光照贴图信息          ...

  5. js中如何获取页面的Url,域名和端口号

    有时候通过获取上个页面的Url来做一个跳转,获取域名防止非正常访问 获取上一个页面的一个URL,这个URL一般做一个页面的跳转 window.location.href <script>w ...

  6. PHP开发工具(CodeLobster PHP Edition)

    参考:http://www.uzzf.com/soft/45948.html 产品名:ttrar.com 密    钥:dstp-187c-9cdd-9a60-e185-b280 CodeLobste ...

  7. 第206天:http协议终极详解---看这一篇就够了

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

  8. 第120天:移动端-Bootstrap基本使用方法

    一.Bootstrap使用 1.搭建Bootstrap页面骨架及项目目录结构 ``` ├─ /weijinsuo/ ··················· 项目所在目录 └─┬─ /css/ ···· ...

  9. Spring Cloud Sleuth服务跟踪

    监控 使用zipkin(https://zipkin.io/) 监控服务构建: (普通的springBoot项目) <!--引入的zipkinServer依赖--> <depende ...

  10. 【Mybatis】简单的mybatis增删改查模板

    简单的mybatis增删改查模板: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE map ...