实验二 Java面向对象程序设计

实验内容

1. 初步掌握单元测试和TDD

2. 理解并掌握面向对象三要素:封装、继承、多态

3. 初步掌握UML建模

4. 熟悉S.O.L.I.D原则

5. 了解设计模式

根据实验提交的规则,把实验为五个部分

面向对象程序设计-1

单元测试

1.在 IDEA中我们把产品代码放在src目录中,把测试代码放在test目录中,右键单击项目,在弹出的菜单中选择New->Directory新建一个目录:test。

2.再右键点击设置环境变量,选择Mark Directory->Test Sources Root

3.根据实验内容代码进行测试,分别对“正常情况”、“边界情况”、“异常情况”进行检验 。





面向对象程序设计-2

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

1.这种先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。

2.TDD的一般步骤如下:

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

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

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

编写产品代码

测试通过



面向对象程序设计-3

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

用自己的学号%6进行取余运算,根据结果进行代码扩充:

3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确.

  • 设计模式初步

    S.O.L.I.D原则

    SRP(Single Responsibility Principle,单一职责原则):决不要有一个以上的理由修改一个类

    OCP(Open-Closed Principle,开放-封闭原则):软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。

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

    子类必须可以被其基类所代

    使用指向基类的指针或引用的函数,必须能够在不知道具体派生类对象类型的情况下使用它

    ISP(Interface Segregation Principle,接口分离原则):客户不应该依赖他们并未使用的接口

    DIP(Dependency Inversion Principle,依赖倒置原则) 高层模块不应该依赖于低层模块。二者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象.

    模式与设计模式

    设计模式有四个基本要素:

    Pattern name:描述模式,便于交流,存档

    Problem:描述何处应用该模式

    Solution:描述一个设计的组成元素,不针对特例

    Consequence:应用该模式的结果和权衡(trade-offs)

    其他面对对象原则

    "组合替代继承":这是说相对于继承,要更倾向于使用组合;

    "笛米特法则":这是说"你的类对其它类知道的越少越好";

    "共同封闭原则":这是说"相关类应该打包在一起";

    "稳定抽象原则":这是说"类越稳定,越应该由抽象类组成";
abstract class Data
{
abstract public void DisplayValue();
}
class Integer extends Data
{
int value;
Integer()
{
value=100;
}
public void DisplayValue()
{
System.out.println (value);
}
}
class Long extends Data
{
long value;
Long()
{
value=1234567890;
}
public void DisplayValue()
{
System.out.println(value);
}
}
abstract class Factory
{
abstract public Data CreateDataObject();
}
class IntFactory extends Factory
{
public Data CreateDataObject()
{
return new Integer();
}
}
class LongFactory extends Factory
{
public Data CreateDataObject()
{
return new Long();
}
}
class Document
{
Data pd;
Document(Factory pf)
{
pd = pf.CreateDataObject();
}
public void DisplayData()
{
pd.DisplayValue();
}
}
//Test class
public class MyDoc
{
static Document d;
static Document e;
public static void main(String[] args)
{
d = new Document(new IntFactory());
d.DisplayData();
e=new Document(new LongFactory());
e.DisplayData(); }
}

截图

面向对象程序设计-4

使用TDD的方式设计关实现复数类Complex

  • 测试代码
import junit.framework.TestCase;
import org.junit.Test; import static junit.framework.TestCase.assertEquals; public class ComplexTest extends TestCase {
Complex c1 = new Complex(0, 3);
Complex c2 = new Complex(-1, -1);
Complex c3 = new Complex(2,1);
@Test
public void testgetRealPart() throws Exception {
assertEquals(-1.0, Complex.getRealPart(-1.0));
assertEquals(5.0, Complex.getRealPart(5.0));
assertEquals(0.0, Complex.getRealPart(0.0));
}
@Test
public void testgetImagePart() throws Exception {
assertEquals(-1.0, Complex.getImagePart(-1.0));
assertEquals(5.0, Complex.getImagePart(5.0));
assertEquals(0.0, Complex.getImagePart(0.0));
}
@Test
public void testComplexAdd() throws Exception {
assertEquals("-1.0+2.0i", c1.ComplexAdd(c2).toString());
assertEquals("2.0+4.0i", c1.ComplexAdd(c3).toString());
assertEquals("1.0", c2.ComplexAdd(c3).toString());
}
@Test
public void testComplexSub() throws Exception {
assertEquals("1.0+4.0i", c1.ComplexSub(c2).toString());
assertEquals("-2.0+2.0i", c1.ComplexSub(c3).toString());
assertEquals("-3.0 -2.0i", c2.ComplexSub(c3).toString());
}
@Test
public void testComplexMulti() throws Exception {
assertEquals("3.0 -3.0i", c1.ComplexMulti(c2).toString());
assertEquals("-3.0+6.0i", c1.ComplexMulti(c3).toString());
assertEquals("-1.0 -3.0i", c2.ComplexMulti(c3).toString());
}
@Test
public void testComplexComplexDiv() throws Exception {
assertEquals("-1.5 -1.5i", c1.ComplexDiv(c2).toString());
assertEquals("1.2+0.6i", c1.ComplexDiv(c3).toString());
assertEquals("-0.6 -0.6i", c2.ComplexDiv(c3).toString());
}
}
  • 产品代码
import java.text.DecimalFormat;//引入DecimalFormat包取一位整数和一位小数

public class Complex {
double Real=0;
double Imaginary=0;
public Complex(){}
public Complex(double Real,double Imaginary){
this.Real=Real;
this.Imaginary=Imaginary; }
public double getReal(){
return Real;
}
public double getImaginary(){
return Imaginary;
}
public String toString(){
String s = "";
double r=Real;
double i=Imaginary;
if(r==0&&i==0){
s="0";
}
else if(r==0&&i!=0){
s=i+"i";
}
else if(r!=0&&i<0){
s=r+""+i+"i";
}
else if(r!=0&&i==0){
s=r+"";
}
else
{
s=r+"+"+i+"i";
}
return s;
}
public boolean equals(Object obj){//重写equals方法,使其不用来对比字符序列
if(this==obj){
return true;
}
else
return false;
}
DecimalFormat df = new DecimalFormat( "0.0");
public Complex ComplexAdd(Complex a){
return new Complex(Real+a.getReal(),Imaginary+a.getImaginary());
}
public Complex ComplexSub(Complex a){
return new Complex(Real-a.getReal(),Imaginary-a.getImaginary());
}
public Complex ComplexMulti(Complex a){
double r=Real*a.getReal()-Imaginary*a.getImaginary();
double i =Imaginary*a.getReal()+Real*a.getImaginary();
return new Complex(Double.valueOf(df.format(r)),Double.valueOf(df.format(i)));
}
public Complex ComplexDiv(Complex a){
double r=(Real * a.Imaginary + Imaginary * a.Real) / (a.Imaginary * a.Imaginary + a.Real * a.Real);
double i=(Imaginary * a.Imaginary + Real * a.Real) / (a.Real * a.Real + a.Real * a.Real);
return new Complex(Double.valueOf(df.format(r)),Double.valueOf(df.format(i)));
}
}
  • 截图

面向对象程序设计-5

  • 类图

实验体会

通过这次实验二,熟悉了代码的编写和添加类,并且对uml类图有了最基本的认识。在实验中还学习了TDD模式,这种先编写测试代码,后编写实验代码在一定程度上降低了编写的错误。在实验中还是感觉自己能力欠缺,还需要努力学习。

20175333曹雅坤 实验二 Java面向对象程序设计的更多相关文章

  1. 实验二 Java面向对象程序设计

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

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

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

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

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  7. 20145225唐振远 实验二 "Java面向对象程序设计"

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

  8. 20145208 实验二 Java面向对象程序设计

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

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

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

随机推荐

  1. 浅析Java的Object类

    前言:   最近在回顾Java基础,在此过程中,查看源码是少不了的   这里以JDK8以基准,记录一些自己查看源码的观感 Object类,翻阅源码,看看这个类的所在位置,是在 java.lang 包下 ...

  2. [ffmpeg] AVOption

    在ffmpeg中,常使用AVOption的API来进行参数设置.AVOption的API主要分为设置参数以及提取参数两种,无论是哪一种API都主要分为两大步骤: 寻找出参数所在的内存位置. 如果是设置 ...

  3. Leetcode 5

    HashTable Easy 1. 136. Single Number 0与0异或是0,1与1异或也是0,那么我们会得到0 class Solution { public: int singleNu ...

  4. Error:Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2

    可以换个maven库: allprojects { repositories { jcenter() //maven { url "https://jitpack.io" } ma ...

  5. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  6. 洛谷P2617 Dynamic Rankings

    带修主席树模板题 主席树的单点修改就是把前缀和(大概)的形式改成用树状数组维护,每个树状数组的元素都套了一个主席树(相当于每个数组的元素root[i]都是主席树,且这个主席树维护了(i - lowbi ...

  7. ELK日志系统:Elasticsearch+Logstash+Kibana+Filebeat搭建教程

    ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 系统架构 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.orac ...

  8. termux

    使用http服务,链接原服务器要挂vpn. apt edit-sources 如果提示 $ apt edit-sources e: Sub-process editor returned a n er ...

  9. 解决cuvid中的sample编译和链接问题

    unzip Video_Codec_SDK_9.0.20.zip cd Video_Codec_SDK_9.0.20/Samples/AppDecode/AppDecImageProvider vi ...

  10. win10更改无线网卡的MAC地址

    https://blog.csdn.net/qq_31778495/article/details/80932472 前段时间电脑蹭网被禁了MAC地址,故寻找修改MAC地址的方法. 本机配置: win ...