zoukankan      html  css  js  c++  java
  • 3.1-互评-OO设计-有理数类的设计

    仿照BigDecimal类以面向对象的方式设计有理数类。

    1.给出你的有理数类的代码。

    package classdesign;
    
    import java.math.BigInteger;
    
    public class RationalNumber {
    	private double rNum;
    	private Integer molecule;
    	private Integer denominator;
    
    	public double getrNum() {
    		return rNum;
    	}
    
    	public void setrNum(double rNum) {
    		this.rNum = rNum;
    	}
    	
    	public int getMolecule() {
    		return molecule;
    	}
    
    	public void setMolecule(int molecule) {
    		this.molecule = molecule;
    	}
    
    	public int getDenominator() {
    		return denominator;
    	}
    
    	public void setDenominator(int denominator) {
    		this.denominator = denominator;
    	}
    
    	public RationalNumber(double newRNum) {
    		rNum = newRNum;
    	}
    	
    	public RationalNumber(int molecule, int denominator) {
    		this.molecule = molecule;
    		this.denominator = denominator;
    		rNum = molecule*1.0/denominator;
    	}
    	
    	public double add(double item) {
    		return rNum+item;
    	}
    	
    	public double subtraction(double item) {
    		return rNum-item;
    	}
    	
    	public double multiply(double item) {
    		return rNum*item;
    	}
    	
    	public double division(double item) {
    		if(item == 0.0) {
    			System.out.println("error:除0错误");
    			return 0.0;
    		}
    		return rNum/item;
    	}
    	
    	public void simplifyFraction() {
    		BigInteger bi1 = new BigInteger(molecule.toString());
    		BigInteger bi2 = new BigInteger(denominator.toString());
    		int gcd = bi1.gcd(bi2).intValue();
    		
    		molecule = molecule/gcd;
    		denominator = denominator/gcd;
    	}
    
    }
    
    

    2.给出你的测试代码。要在与有理数类不同包的其他类中调用有理数类。

    package test;
    
    import classdesign.RationalNumber;
    
    public class Test {
    
    	public static void main(String[] args) {
    		RationalNumber rNum1 = new RationalNumber(4.8);
    		RationalNumber rNum2 = new RationalNumber(2.4);
    		RationalNumber rNum3 = new RationalNumber(2, 4);
    		
    		System.out.println("测试加法");
    		System.out.println("4.8 + 2.4 = "+rNum1.add(rNum2.getrNum()));
    		System.out.println("测试减法");
    		System.out.println("4.8 - 2.4 = "+rNum1.subtraction(rNum2.getrNum()));
    		System.out.println("测试乘法");
    		System.out.println("4.8 * 2.4 = "+rNum1.multiply(rNum2.getrNum()));
    		System.out.println("测试除法");
    		System.out.println("4.8 / 2.4 = "+rNum1.division(rNum2.getrNum()));
    		System.out.println("4.8 / 0.0 = "+rNum1.division(0.0));
    		System.out.println("分数2/4化简之后的分数形式以及小数形式");
    		rNum3.simplifyFraction();
    		System.out.println("2/4 = "+rNum3.getMolecule()+"/"+rNum3.getDenominator()+" ; "+"2/4 = "+rNum3.getrNum());
    		
    
    	}
    
    }
    
    

    测试结果如下:

    3.尝试描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象?
    C语言是面向过程的语言,主要是先编写好所需要的函数,然后考虑如何调用已经写好的函数;而此次设计的有理数类是先设计一个模板,其中有属性、方法,通过这个模板可以生成许多对象,每个对象代表了一个有理数实体,并能够通过自身的方法来进行操作。

    4.尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。

    • a. 别人如何复用你的代码?
      可以将编写好的有理数类包下载到个人的电脑,然后通过import语句导入有理数类,从而复用代码。
    • b. 别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?
      是要依赖我的有理数类的属性,当这些属性修改时,也会影响他人调用我的代码。为了实现某些功能,从而引入了
    private double rNum;
    private Integer molecule;
    private Integer denominator;
    

    这三个属性,当这些属性被删除或者是改动时,之前的代码就无法使用了。

    • c. 有理数类的public方法是否设置合适?为什么有的方法设置为private?
      public方法可以供调用者使用,不需要调用者关心的其他方法就需要封装起来。一般来说,方法用private加以修饰的情况有:
      • 该方法仅供内部访问
      • 增加安全性,限制用户仅能通过给定的方法对数据进行操作
  • 相关阅读:
    R语言实现CNN(卷积神经网络)模型进行回归数据分析
    R语言中的多项式回归、B样条曲线(B-spline Curves)回归
    R语言方差分析(ANOVA)学生参加辅导课考试成绩差异
    R语言人口期望寿命统计预测方法
    R语言用多项式回归和ARIMA模型预测电力负荷时间序列数据
    R语言主题模型LDA评估公司面临的风险领域与可视化
    Matlab通过市场数据校准Hull-White利率模型参数
    R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
    Matlab通过市场数据校准Hull-White利率模型参数
    R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现
  • 原文地址:https://www.cnblogs.com/zzhmyblog/p/13766805.html
Copyright © 2011-2022 走看看