角落艺术家

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

OO设计-有理数类的设计

OO设计-有理数类的设计

完整的有理数类的代码

package oo;

public class RationalNumber {
	private int numerator;//分子
	private int denominator;//分母
	public int GetNumerator() {
		return numerator;
	}
	
	public int GetDenominator() {
		return denominator;
	}
	
	private static int gcd(int x,int y) {
		if(x%y==0)
			return y;
		else
			return gcd(y, x%y);
	}
	
	public RationalNumber (int numerator,int denominator) {
		int gcd=gcd(numerator, denominator);
		this.numerator=((denominator>0)?1:-1)*numerator/gcd;
		this.denominator=Math.abs(denominator)/gcd;
	}
	
	public RationalNumber add(RationalNumber newRational) {
		int x=this.numerator*newRational.GetDenominator()+this.denominator*newRational.GetNumerator();
		int y=this.denominator*newRational.GetDenominator();
		return new RationalNumber(x,y);
	}    //加
	
	public RationalNumber subtract(RationalNumber newRational) {
		int x=this.numerator*newRational.GetDenominator()-this.denominator*newRational.GetNumerator();
		int y=this.denominator*newRational.GetDenominator();
		return new RationalNumber(x,y);
	}    //减
	
	public RationalNumber multiply(RationalNumber newRational) {
		int x=this.numerator*newRational.GetNumerator();
		int y=this.denominator*newRational.GetDenominator();
		return new RationalNumber(x,y);
	}    //乘
	
	public RationalNumber divide(RationalNumber newRational) {
		int x=this.numerator*newRational.GetDenominator();
		int y=this.denominator*newRational.GetNumerator();
		return new RationalNumber(x,y);
	}    //除
}

测试代码

package oo;

public class Main {

	public static void main(String[] args) {
		RationalNumber x=new RationalNumber(4,2);
		RationalNumber y=new RationalNumber(1,7);
        System.out.println("x="+x.toString());
        System.out.println("y="+y.toString());
        System.out.println("x+y="+x.add(y));
        System.out.println("x-y="+x.subtract(y));
        System.out.println("x*y="+x.multiply(y));
        System.out.println("x/y="+x.divide(y));

	}

}

尝试描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

Java中设计的类更面向对象的原因是类提供了一种模板,可以根据相应的要求更简洁方便的创造更改对象。

讨论

1.别人如何复用你的代码?

导入自己编写的有理数包,从而调用类中的属性和方法

2.别人的代码是否依赖你的有理数类的内部属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?

不依赖,不会

3.有理数类的public方法是否设置合适?为什么有的方法设置为private?

合适,提高代码的安全性。

posted on   角落艺术家  阅读(39)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示