实验内容

  • 初步掌握单元测试和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. 第10章 vim程序编辑器

    vi和vim vim是vi的升级版,支持vi的所有指令 vi的使用 vi分为三种模式:一般模式.编辑模式.命令行模式 一般模式 以vi打开一个文件就直接进入一般模式了,这个模式下可以使用上下左右按键来 ...

  2. DB2 V9 默认帐户信息和服务启动信息

    1 dasusr1 DB2 管理服务器用户是管理DAS(Database Adminitrator Service).要完全适用db2 cc 必须启动DAS.DB2 管理服务器(DAS)响应来自 DB ...

  3. 定时器应用-点击按钮,div向右移动

    需求是点击button,div就一直往右移动,给个条件left=800px就停止移动,通过定时器来控制. 代码如下: <!DOCTYPE html> <html> <he ...

  4. 结对项目——fault,error,failure的程序设计

    一.结对编程内容: 1.不能触发Fault. 2.触发Fault,但是不触发Error. 3.触发Error,但不触发Failure. 二.结对编程人员 1.周宗耀.周浩: 2.结对截图: 三.结对项 ...

  5. 奇异值分解(SVD) --- 几何意义 (转载)

    PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把 这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象, ...

  6. c语言基础笔记

    一 :数据类型 1.float类型,在输出的时候可以使用 .数字  来把浮点数精确到小数点后几位,比如 printf("%.3f",float)精确到小数点后三位,不足补0 2.字 ...

  7. TP中if标签

    if标签 If标签如果php中if语句的作用,if是用于流程控制的. 在ThinkPHP中if标签也是用于流程控制的. If标签的语法格式: <if condition=’条件表达式’> ...

  8. PHP中与类有关的运算符

    与类有关的运算符: new, instanceof:判断一个“变量”(对象,数据),是否是某个类的“实例”: 示意如下: class  A {} class  B {} class  C extend ...

  9. POJ1275 Cashier Employment 【二分 + 差分约束】

    题目链接 POJ1275 题解 显然可以差分约束 我们记\(W[i]\)为\(i\)时刻可以开始工作的人数 令\(s[i]\)为前\(i\)个时刻开始工作的人数的前缀和 每个时刻的要求\(r[i]\) ...

  10. Kerberos的黄金票据详解

    0x01黄金票据的原理和条件 黄金票据是伪造票据授予票据(TGT),也被称为认证票据.如下图所示,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信.由于黄金票据是伪造的TGT,它作为TGS- ...