实验内容

  • 初步掌握单元测试和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. jdbc 2.0

    1.Statement接口不能接受参数 2.PreparedStatement接口在运行时接受输入参数 3.CallableStatement接口也可以接受运行时输入参数,当想要访问数据库存储过程时使 ...

  2. 目标跟踪之Lukas-Kanade光流法(转)

    光流是图像亮度的运动信息描述.光流法计算最初是由Horn和Schunck于1981年提出的,创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法.光流计算基于物体移动的光学特性提 ...

  3. 修改表中的enum字段

    alter table 表名 modify 字段名 enum('system','audit','account','secadmin') DEFAULT NULL;

  4. Linux 常用指令【持续更新】

    在学校的时候学过一些简单的 Linux 命令,主要是文件的创建拷贝解压等操作,最近在电脑上安装了一个CentOS6.8版本的基本版,纯命令行操作. ../ 代表上一级目录 ./ 代表本级目录 / 代表 ...

  5. Testng 运行Cannot find class in classpath

    用Testng运行多个class,结果报: org.testng.TestNGException: Cannot find class in classpath: Salesman     at or ...

  6. 洛谷 P2057 善意的投票(网络流最小割)

    P2057 善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法 ...

  7. ans menu list

    ans menu list 1. 系统配置 a) 基本设置 i. NTP ii. 配置模式 iii. 主机信息 b) 高可用性 i. 节点 ii. 路由监视器 iii. 故障转移接口群 c) 设备标识 ...

  8. Codeforces 578B. "Or" Game(思维题)

    我们知道所有sigma(2^i){i<n}比2^n小,所以我们肯定是把这k次操作全部丢到一个数上看看能不能凑出二进制下一个更高位的1. 因为k最大只有10,我们可以求出每一个数乘以k次之后的值, ...

  9. 关于使用EmguCV出现 “无法加载 DLL“cvextern”: 找不到指定的程序” 的解决方法

    http://blog.csdn.net/cdjcong/article/details/8444191 查找了网上的一些说法,都是说没有设置好路径,或者未将DLL文件复制到Debug文件夹下,但是我 ...

  10. selenium - Select类 - 下拉框

    WebDriver提供了Select类来处理下拉框. 如百度搜索设置的下拉框,如下图: from selenium import webdriver from selenium.webdriver.s ...