• 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计


    20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计

    实验内容

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

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

    3. 初步掌握UML建模

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

    5. 了解设计模式

    实验要求

    1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

    2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

    1. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

    实验过程

    • 题目1:使用StarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。类图中只少两个类。
    • 题目2:提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印

    任务:以TDD的方式开发一个复数类Complex,要求如下:

    // 定义属性并生成getter,setter

    double RealPart;

    double ImagePart;

    // 定义构造函数

    public Complex()

    public Complex(double R,double I)

    //Override Object

    public boolean equals(Object obj)

    public String toString()

    // 定义公有方法:加减乘除

    Complex ComplexAdd(Complex a)

    Complex ComplexSub(Complex a)

    Complex ComplexMulti(Complex a)

    Complex ComplexDiv(Complex a)

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

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

    0: 让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    1: 让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    2: 让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    3: 让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    4: 让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    5: 让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号

    • 题目6:提交:
      码云上你完成的代码的链接。

    任务:
    //定义一个数组
    int arr[] = {1,2,3,4,5,6,7,8};

    //打印原始数组的值
    for(int i:arr){
    System.out.print(i + " ");
    }
    System.out.println();

    // 添加代码删除上面数组中的5
    ...

    //打印出 1 2 3 4 6 7 8 0
    for(int i:arr){
    System.out.print(i + " ");
    }
    System.out.println();

    // 添加代码再在4后面5
    ...

    //打印出 1 2 3 4 5 6 7 8
    for(int i:arr){
    System.out.print(i + " ");
    }
    System.out.println();

    实验知识点

    • 有关伪代码、产品代码、测试代码:

    伪代码:是对程序要完成的操作所进行的需求清单,不用代码写,用中文或英文来写

    产品代码:实现这些需求的代码。

    测试代码:对产品代码检测是否哦能够通过运行。

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

    平常都是先打产品代码,再加以实例进行测试,但这样有时候会导致效率和精度比较低,很容易出错,TDD开发方式就是要反其道而行之,先把测试代码给打出来,然后根据测试代码来设计产品代码。【截图19】

    • UML类
      UML是一种通用的建模语言,通过UML类图,可以更加直观地分析图面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程实现(OOP)。
    • S.O.L.I.D原则
      SOLID原则即:

    SRP(Single Responsibility Principle,单一职责原则)

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

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

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

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

    • SRP原则:决不要有一个以上的理由修改一个类

    一个类就应当有这个类相应地职能与责任,将多个职责放在一个类中,容易生成所谓的“上帝类”,在面向对象的开发思想中,每个类都应该做到高内聚,一个类就是一个小类,它有它应该负责的领域,这样才方便复用。

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

    代码应当只对扩充代码进行开放,而对修改代码进行封闭。这样能够保证数据的完整性和安全性,使用价值更高。

    • LSP原则:子类必须可以被其基类所代替;
      使用指向基类的指针或引用的函数,必须能够在不知道具体派生类对象类型的情况下使用它。
      -ISP原则:客户不应该依赖他们并未使用的接口

    并非所有类都是给客户使用,也不是所有方法都是客户有权使用的。因此我们定义方法就要有限制,客户可以用什么,不可以用什么都是我们应该在程序设计中所规划的。

    • DIP原则:

    高层模块不应该依赖于低层模块。

    二者都应该依赖于抽象

    抽象不应该依赖于细节。

    细节应该依赖于抽象

    在类层级中,层级越高就应该越抽象,所起的作用就越公共,下面层级的类都应该依赖于高层的抽象类,这样才能更好根据不同的需求写不同的方法,同时又省去了繁杂的代码。

    实验感悟

    • 这次实验的知识很丰富,可以说TDD和SOLID原则极大成地提高我们作为一名程序员的素质,但我们的知识库有限,很多知识都不能进行有效的吸收,甚至我到现在测试代码也不能完全掌握,个人也认为先写产品代码要舒服得多,顺利得多,效率快得多。此外,这些实验题目的难度也是出乎本人所料,很容易不知道从哪里下手。但这种弊端估计是暂时的,随着我们的深入学习,以及实验的多做多练,水平估计还是会有一定的提升。
  • 相关阅读:
    Jhipster 一个Spring Boot + Angular/React 全栈框架
    从企业架构到智慧油田的理论与实践
    DevExpress VCL 的 cxDBTreeList 的使用方法
    Delphi 三层框架 DataSnap 的服务器端设置
    雷达方程
    雷达方向信号产生
    目标
    流水线&并行处理
    CORDIC原理与FPGA实现(2)
    CORDIC原理与FPGA实现(1)
  • 原文地址:https://www.cnblogs.com/VersionP1/p/6718506.html
Copyright © 2020-2023  润新知