Object 如何对角度的构造函数和设置器进行编码?他们看起来很像

Object 如何对角度的构造函数和设置器进行编码?他们看起来很像,object,uml,Object,Uml,我有这个UML类,我真的不明白为什么有两个setter和构造函数。。。?如何用代码编写该类 我没有足够的声誉来发布图片,但在图表上,这个类看起来像: Angle -degrees: int -minutes: int -seconds: double 实际上没有理由让setter像这样出现在那里,但是本质上UML要求您使用helper方法set来更改您的私有变量,而不是在构造函数中这样做。这会让我相信每个构造函数只是将变量传递给setter。所以流看起来像 Create object (pa

我有这个UML类,我真的不明白为什么有两个setter和构造函数。。。?如何用代码编写该类

我没有足够的声誉来发布图片,但在图表上,这个类看起来像:

 Angle
-degrees: int
-minutes: int
-seconds: double

实际上没有理由让setter像这样出现在那里,但是本质上UML要求您使用helper方法set来更改您的私有变量,而不是在构造函数中这样做。这会让我相信每个构造函数只是将变量传递给setter。所以流看起来像

Create object (params) -> Constructor (params) -> set(params)

如果没有设置器,只有属性设置构造函数,那么对象将是不可更改的。如果类同时具有setter和attributes设置构造函数,那么它的对象是可变的。所以,你可能需要两者——这取决于你自己

关于如何实现您的方法:

void set(int degrees, int minutes, double seconds){
    this. degrees = degrees;
    this.minutes = minutes;
    this.seconds = seconds;
}
你应该决定你的代理人将如何保留该标志。让我们假设只有被脱脂的人会保留它,并且分和秒将始终显示为正

void set(double fractionalDegrees){

    // separate the sign
    int sign = Math.sign(fractionalDegrees);
    double angle = Math.abs(fractionalDegrees);

    // separate d:m:s
    degrees = Math.floor(angle);
    angle = angle - degrees;
    angle = angle * 60;
    minutes = Math.floor(angle);
    angle = angle - minutes;
    seconds = angle * 60;

    // set the sign to degrees
    degrees = degrees * sign;
}
对于构造函数,他们只需调用适当的setter

public Angle(int degrees, int minutes, double seconds){
    set(degrees, minutes, seconds);
}
实际上,这个类有严重的问题:它有setter,但没有getter或操作。因此,它实际上无法使用。您可能需要以下内容:

double getFractionalDegrees();
int getDegrees();
int getMinutes();
float getSeconds();
Angle addTo(Angle anotherAngle);
Angle negate();   
Angle back();  // +-180 degrees
String toString(); // you need to print them somehow, too

什么是换行?那是物体吗?对不起,我知道那会让人困惑。这只是一条实线,将变量与其他变量分开,但无论我如何编写,它都不允许我发布。我会试着把它改成实线来显示,因为这个问题看起来很合理+1:-几个月前有人问了一个与家庭作业完全相同的问题:这与从main方法创建对象时设置它们有什么不同?不能从外部源设置变量。他们是私人的。
double getFractionalDegrees();
int getDegrees();
int getMinutes();
float getSeconds();
Angle addTo(Angle anotherAngle);
Angle negate();   
Angle back();  // +-180 degrees
String toString(); // you need to print them somehow, too