20162329 张旭升 实验二:实验报告

实验报告

课程:程序设计与数据结构
班级: 1623
姓名: 张旭升
学号:20162329
指导教师:娄嘉鹏 王志强
实验日期:4月14日

实验密级: 非密级
预习程度: 已预习

必修/选修: 必修
实验序号: cs_29

实验名称: Java面向对象程序设计

实验要求:

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

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

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

  4. 请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。

实验内容

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

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

  3. 初步掌握UML建模

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

  5. 了解设计模式

实验过程

一.单元测试

1. 书写三种代码
  • 伪代码
  • 产品代码
  • 测试代码
2.IDEA上进行驱动开发
  • 由之前已写好的自定义类通过驱动自动生成测试代码,帮助我们节省时间精力。

二.面向对象三要素

1. 三种要素
  • 封装
  • 继承
  • 多态
2. 熟悉三要素的使用
  • 通过实验练习类的书写和测试来熟悉面向对象三要素。

三.实验练习

1. 练习代码
    public class ComplexNumber {
    	private int i;
    private double a, b;
    static private double W, X, Y;
    static private String Z,z;

    public ComplexNumber(){
    }
    
    public ComplexNumber(double A, double B){
	this.a = A;
	this.b = B;		
    }
    	
    public void Show(){
	System.out.println("Show a complex number: z=a+bi" );
    }	
    
    public static void Count(ComplexNumber C1,char C2,ComplexNumber C3){
        	switch (C2){
		    case '+' :
			    X = C1.a + C3.a;
			    Y = C1.b + C3.b;
			    Z = "("+X+")" + "+" + "("+Y+")" + "i";
			    break;
		    case '-' :
			    X = C1.a - C3.a;
			    Y = C1.b - C3.b;
			    Z = "("+X+")" + "+" + "("+Y+")" + "i";
			    break;
		    case '*' :
			    X = C1.a * C3.a - C1.b * C3.b;
			    Y = C1.b * C3.a + C1.a * C3.b;
			    Z = "("+X+")" + "+" + "("+Y+")" + "i";
			    break;
		    case '/' :
			    W = Math.pow(C3.a,2)+Math.pow(C3.b,2);
			    X = (C1.a * C3.a + C1.b * C3.b)/W;
			    Y = (C1.b * C3.a - C1.a * C3.b)/W;
			    Z = "("+X+")" + "+" + "("+Y+")" + "i";
			    break;
		    default:
			    System.out.println("The input is not a valid operator!");
	    }
    }

    public void Length(){
	    double m;
	    if (b != 0){
		    double s = (int)Math.pow(a, 2)+Math.pow(b, 2);
		    m = Math.sqrt(s);			
	    }
	    else
		    if(a>=0)
			    m = this.a;
		    else
			    m = this.a * -1;
	    System.out.println("This complex number length is: " + m);
    }

    public static String getCount(){
	    return Z;
    }

    public String toString(){
	    z = "("+a+")" + "+" + "("+b+")" + "i";
	    return z;
    }
        }
2. 实验练习测试

实验中遇到的问题

  • 问题:

    开始我是想先建立一个Number的接口,用来设置所有数都有的表示功能(Show)和计算(count)功能,后来在做复数的类(ComplexNumber)时发现计算是无法实现的。

  • 原因和解决办法:

    因为计算这个方法在每类数中表达方式都是不同的,所传入参数也是不同的,最终我还是把接口中的count方法去掉了,导致我的接口实际意义也变得非常小,就也被我取缔了,最终虽然是完成了但是这些都还是不足,希望在今后的学习中能改进。

实验不足

本次实验练习中还是没有太多的体现出多态,虽然我对相关的概念感觉是理解了,但是到了要做这个程序的时候发现好多想的却有些难以实现,时间紧迫也就都简化了,这些还要慢慢改进。

实验心得


  • 在设计代码时先写出伪代码是一个非常节省时间的办法,伪代码可以帮你理清思路,减少思想逻辑上花费的时间。
posted @ 2017-04-14 19:41  Don't_worry  阅读(187)  评论(0编辑  收藏  举报