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加以修饰的情况有:
      • 该方法仅供内部访问
      • 增加安全性,限制用户仅能通过给定的方法对数据进行操作
  • 相关阅读:
    PostgreSQL中的partition-wise join
    Partition-wise join
    外观模式 门面模式 Facade 结构型 设计模式(十三)
    桥接模式 桥梁模式 bridge 结构型 设计模式(十二)
    组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)
    创建型设计模式对比总结 设计模式(八)
    原型模式 prototype 创建型 设计模式(七)
    单例模式 创建型 设计模式(六)
    建造者模式 生成器模式 创建型 设计模式(五)
    抽象工厂模式 创建型 设计模式(四)
  • 原文地址:https://www.cnblogs.com/zzhmyblog/p/13766805.html
Copyright © 2011-2022 走看看