实验内容

  • 初步掌握单元测试和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. 个人项目----词频统计WEB(部分功能)

    需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...

  2. Linux的压缩/解压缩文件处理 zip & unzip

    Linux的压缩/解压缩命令详解及实例 压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另:有些服 ...

  3. (转)关于ActiveMQ的配置

    目前常用的消息队列组建无非就是MSMQ和ActiveMQ,至于他们的异同,这里不想做过多的比较.简单来说,MSMQ内置于微软操作系统之中,在部署上包含一个隐性条件:Server需要是微软操作系统.(对 ...

  4. PHP对象的遍历

    对象的遍历 对象的遍历,跟数组的遍历,一样! 其实,只能遍历出对象的“实例属性数据” foreach( $对象名  as   $key => $value){ //这里就可以处理$key和$va ...

  5. bzoj1093[ZJOI2007]最大半连通子图(tarjan+拓扑排序+dp)

    Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...

  6. list+map

    通常读取数据库表中的一条记录后,可以存储于Hashmap变量中:若要读取多条记录,则依次读取每个记录时,先用Hashmap变量存取,然后将Hashmap加到ArrayList变量中. 注意: 每次读取 ...

  7. 超链接提示效果jQuery+CSS+html

    我们知道浏览器自带了超链接提示, 只需要在超链接中加入 title 属性就可以了. <a href="#" title="吉大砍人案致1死1伤 受害者死前大喊他手里 ...

  8. scrollTop()案例

    设置 <div> 元素中滚动条的垂直偏移: 定义和用法 scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置. scroll top offset 指的是滚动条相对于其顶部的偏 ...

  9. StringUtils工具类说明

    /***************************************为空判断***************************************/ //null 和 " ...

  10. JS中数组和字符串具有的方法,以及substring,substr和slice的用法与区别

     String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 prototype 允许您向对象添加属性和方法 String 对象方法 方法 描述 ...