• 2018-2019-2 20175305实验二《面向对象程序设计》实验报告


    2018-2019-2 20175305实验二《面向对象程序设计》实验报告

    实验题目 面向对象程序设计##

    课前学习

    在面向对象技术中,将客观世界中的一个事物作为一个对象来考虑,比如有个张先生,他就是一个对象。每个对象都有自己的属性和行为。张先生的属性根据需要有姓名、性别、身高等,他的行为有开车,阅读,跑步等。从程序设计的角度来看,事物的属性可以用变量来描述,行为则用方法来反映。

    面向对象程序设计的核心技术主要是封装、继承和多态性。

    封装
    类是封装的基本单元。通过封装可以隐藏类的实现细节,也可以避免对类中属性的直接操作。可以通过类的公共接口访问类中的变量,而不必知道这个接口的具体实现方式。只要这个方法的名字和参数不变,即使类中的变量被重新定义,或方法的代码被修改,对类中的变量的访问也不会受到影响。比如,你在计算机上安装了一个声卡,你不必知道声卡的内部结构,也不必知道功能如何实现的,因为实现声卡功能的继承电路被封装了。你只要知道声卡应该装在电脑主板的什么位置,其他的设备如音箱,光驱怎样和声卡连接就可以了。

    继承
    继承是对类的功能的重用和扩充。通过对某一个类的继承产生一个新的子类,子类既有从某个类中继承下来的功能,又可以自行定义自己的变量和方法,产生新的功能。

    多态性
    多态性指的是方法的名字相同,但实现不同。即“同一接口,多个方法”。如有三个方法,分别用来计算圆、矩形、三角形面积,他们的名字可以都叫做area。

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

    1).实验目的及要求

    参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST
    参考http://www.cnblogs.com/rocedu/p/6736847.html

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

    2)测试代码:

    import org.junit.Test;
    import junit.framework.TestCase;

    public class MyUtilTest extends TestCase {
    @Test
    public void testNormal() {
    assertEquals("不及格",MyUtil.percentage2fivegrade(55));
    assertEquals("及格",MyUtil.percentage2fivegrade(65));
    assertEquals("中等",MyUtil.percentage2fivegrade(75));
    assertEquals("良好",MyUtil.percentage2fivegrade(85));
    assertEquals("优秀",MyUtil.percentage2fivegrade(95));
    }
    @Test
    public void testExceptions() {
    assertEquals("错误",MyUtil.percentage2fivegrade(-80));
    assertEquals("错误",MyUtil.percentage2fivegrade(125));
    }
    @Test
    public void testBoundary() {
    assertEquals("不及格",MyUtil.percentage2fivegrade(0));
    assertEquals("及格",MyUtil.percentage2fivegrade(60));
    assertEquals("中等",MyUtil.percentage2fivegrade(70));
    assertEquals("良好",MyUtil.percentage2fivegrade(80));
    assertEquals("优秀",MyUtil.percentage2fivegrade(90));
    assertEquals("优秀",MyUtil.percentage2fivegrade(100));
    }
    }

    运行结果截图:

    实验二面向对象程序设计-2

    1).实验目的与要求

    参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
    参考http://www.cnblogs.com/rocedu/p/6736847.html
    以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印

    2)测试代码

    import org.junit.Test;
    import junit.framework.TestCase;

    public class StringBufferDemoTest extends TestCase {
    StringBuffer a = new StringBuffer("StringBuffer12345");
    StringBuffer b = new StringBuffer("StringBufferStringBuffer123");
    StringBuffer c = new StringBuffer("StringBufferStringBufferStringBufferStringBuffer");
    @Test
    public void testcharAt() throws Exception {
    assertEquals('S',a.charAt(0));
    assertEquals('B',b.charAt(6));
    assertEquals('i',c.charAt(15));
    }
    }

    3)运行结果截图

    实验二面向对象程序设计-3

    1).实验目的与要求

    实验二 Java面向对象程序设计(http://www.cnblogs.com/rocedu/p/4472842.html)

    参考http://www.cnblogs.com/rocedu/p/6736847.html

    对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
    用自己的学号%6进行取余运算,根据结果进行代码扩充:
    0: 让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    1: 让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    2: 让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    3: 让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    4: 让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
    5: 让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

    2)测试代码:

    abstract class Data {
    abstract public void DisplayValue();
    }
    class Integer extends Data {
    int value;
    Integer() {
    value=100;
    }
    public void DisplayValue(){
    System.out.println (value);
    }
    }
    class Short extends Data {
    short value;
    Short() {
    value = 5305;
    }
    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 ShortFactory extends Factory {
    public Data CreateDataObject(){
    return new Short();
    }
    }
    //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 ShortFactory());
    d.DisplayData();
    }
    }

    3).运行结果截图

    实验二面向对象程序设计-4

    1).实验目的与要求

    提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印

    参考http://www.cnblogs.com/rocedu/p/6736847.html

    任务:以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)

    2)测试代码

    import junit.framework.TestCase;
    import org.testng.annotations.Test;
    public class ComplexTest extends TestCase {
    Complex c1=new Complex(1,1);
    Complex c2=new Complex(1,0);
    Complex c3=new Complex(0,1);
    Complex c4=new Complex(-1,-1);
    @Test
    public void testComplexAdd() {
    assertEquals("2.0+1.0i",c1.ComplexAdd(c2).toString());
    assertEquals("1.0+1.0i",c2.ComplexAdd(c3).toString());
    assertEquals("1.0+1.0i",c3.ComplexAdd(c2).toString());
    assertEquals("0.0",c1.ComplexAdd(c4).toString());
    }
    @Test
    public void testComplexSub() {
    assertEquals("1.0i",c1.ComplexSub(c2).toString());
    assertEquals("1.0",c1.ComplexSub(c3).toString());
    assertEquals("2.0+2.0i",c1.ComplexSub(c4).toString());
    assertEquals("1.0-1.0i",c2.ComplexSub(c3).toString());
    }
    @Test
    public void testComplexMulti() {
    assertEquals("1.0+1.0i",c1.ComplexMulti(c2).toString());
    assertEquals("-1.0+1.0i",c1.ComplexMulti(c3).toString());
    assertEquals("1.0i",c2.ComplexMulti(c3).toString());
    assertEquals("-2.0i",c1.ComplexMulti(c4).toString());
    }
    @Test
    public void testComplexDiv() {
    assertEquals("1.0+1.0i", c1.ComplexDiv(c2).toString());
    assertEquals("1.0+1.0i", c1.ComplexDiv(c3).toString());
    assertEquals("-1.0-1.0i", c1.ComplexDiv(c4).toString());
    assertEquals("-0.5-0.5i", c2.ComplexDiv(c4).toString());
    }
    }

    3)运行结果截图

    实验二面向对象程序设计-5

    1).实验目的与要求

    使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。
    参考http://www.cnblogs.com/rocedu/p/6736847.html
    类图中只少两个类

    2)关系

    关联关系,若A关联B(A类中的成员变量是用B类声明的对象),用一个起始端是A,终点端是B的实线加一个指向B的方向箭头表示;
    依赖关系,若A依赖于B(A类中某个方法的参数是用B类声明的对象或某个方法返回的数据类型是B类对象),用用一个起始端是A,终点端是B的虚线加一个指向B的方向箭头表示;
    继承关系,A类继承B类,用实线加一个空心三角形来表示,实线的起始端是子类的UML图,终点端是父类的UML图

    3)UML图:

    实验问题

    1.不是很清楚面向对象的具体内容和要点
    解决:通过网络自主学习
    2.对于UML图,不是很会操作
    解决:同学用他的电脑给我示范了一次
    3.刚开始无法运行,以为是软件有问题
    解决:(低级错误)源文件名必须与类名相同,命名遵循驼峰风格,首字母大写。main必须声明为public static void

    PSP

    |步骤 |耗时 |百分比 |
    |———————|—————————|—————————|
    |需求分析|7min |5% |
    |设计 |21min |15% |
    |代码实现|70min |50% |
    |测试 |28min |20% |
    |分析总结|14min |10% |

    实验感悟

    • 本次实验分为五个项目,在随着java学习进程的深入,实验也变得复杂起来,关于面向对象一开始就听说过,首先明确面向对象程序设计的核心技术主要是封装、继承和多态性。在做之前我自己先上网进行了一定学习,然后和同学讨论得出结果,总体来说,时间还是有点紧,但收获颇丰,进行了自主学习知识,感觉很好。
  • 相关阅读:
    古人诗词之王安石
    关于周期函数的命题
    Strum—Lioville问题
    计算反常积分
    【面积原理】计算级数和
    【洛谷P6046】纯粹容器
    【洛谷P3631】方格染色
    【牛客挑战赛48 E】速度即转发
    【CF103D】Time to Raid Cowavans
    【洛谷P4280】逆序对
  • 原文地址:https://www.cnblogs.com/zhangtianyu/p/10747247.html
Copyright © 2020-2023  润新知