zoukankan      html  css  js  c++  java
  • 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方法去掉了,导致我的接口实际意义也变得非常小,就也被我取缔了,最终虽然是完成了但是这些都还是不足,希望在今后的学习中能改进。

    实验不足

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

    实验心得


    • 在设计代码时先写出伪代码是一个非常节省时间的办法,伪代码可以帮你理清思路,减少思想逻辑上花费的时间。
  • 相关阅读:
    人见人爱a+b,算出两个时间的和
    远程推送原理
    iOS中的定时器
    四大对象
    核心动画类关系图
    无沙盒缓存原理
    应用程序的生命周期
    同样明文同样算法得到不同密码原理
    线程状态
    iOS中的几个重要方法
  • 原文地址:https://www.cnblogs.com/Zhangxusheng/p/6710594.html
Copyright © 2011-2022 走看看