# 3.1-互评-OO设计-有理数类的设计

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;
}

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("测试减法");
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加以修饰的情况有：
• 该方法仅供内部访问
• 增加安全性，限制用户仅能通过给定的方法对数据进行操作
posted @ 2020-10-04 11:34  朱振豪  阅读(147)  评论(0编辑  收藏  举报