Oop 需要一个包含单位的类型的简单示例
我有一个处理角度的代码库,但有时输入的角度格式不同。也就是说,有些格式是顺时针角度,有些是逆时针角度,有些是0到360度,有些是-180到180度,有些是弧度 到目前为止,我已经成功地在内部保持了它们的一致性,但这始终是一个令人担忧的问题,而且出现的bug可能很难追踪 我想创建一个angle类,它可以跟踪单位、方向以及大小,这样我就可以以统一的方式处理它们,而不用担心太多问题 我在谷歌上搜索到了马丁·福勒(Martin Fowler),但如果没有一个简单的例子可供参考,我很难理解他的语言。我还发现了一个似乎相关的例子,但它看起来也不像一个简单的例子Oop 需要一个包含单位的类型的简单示例,oop,design-patterns,Oop,Design Patterns,我有一个处理角度的代码库,但有时输入的角度格式不同。也就是说,有些格式是顺时针角度,有些是逆时针角度,有些是0到360度,有些是-180到180度,有些是弧度 到目前为止,我已经成功地在内部保持了它们的一致性,但这始终是一个令人担忧的问题,而且出现的bug可能很难追踪 我想创建一个angle类,它可以跟踪单位、方向以及大小,这样我就可以以统一的方式处理它们,而不用担心太多问题 我在谷歌上搜索到了马丁·福勒(Martin Fowler),但如果没有一个简单的例子可供参考,我很难理解他的语言。我还发
有人能给我举一个包含单位的类的简单例子吗?是一个很好的例子,因为它接受各种单位(秒、毫秒等)的数字。不确定如何翻译成另一种语言,但有可能。这是一个很好的例子,因为它接受不同单位(秒、毫秒等)的数字。不确定如何翻译成另一种语言,但这是有机会的。你需要这样的东西:
class Measurement
{
double amount;
Unit unit;
}
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);
金额将是“数字”,单位将告诉您如何解释该数字。。。您可能还需要在数字中实现一些逻辑,或者实现“表转换”,以便能够在不同的单元之间进行转换
顺便说一句:
这是一个在Smalltalk中实现的很棒的库:。它也有一个。
这是C++中另一个非常好的例子:。您需要这样的东西:
class Measurement
{
double amount;
Unit unit;
}
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);
金额将是“数字”,单位将告诉您如何解释该数字。。。您可能还需要在数字中实现一些逻辑,或者实现“表转换”,以便能够在不同的单元之间进行转换
顺便说一句:
这是一个在Smalltalk中实现的很棒的库:。它也有一个。
这是C++中的另一个非常好的例子:。我将通过在内部以单一格式(例如,正弧度)存储值来实现这一点,并提供静态工厂方法来从各种输入格式构造角度。例如:
public class Angle {
private final double radians;
private Angle(double radians) {
this.radians = radians;
}
// Static factory methods
public static Angle radians(double rad) {
return new Angle(rad);
}
public static Angle degrees(double deg) {
return radians(Math.toRadians(deg));
}
public static Angle degreesCCW(double deg) {
return degrees(360 - deg);
}
...
// Operations
public Angle plus(Angle other) {
return new Angle((this.radians + other.radians) % (2 * Math.PI));
}
...
}
然后你可以这样使用它:
class Measurement
{
double amount;
Unit unit;
}
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);
我将通过在内部以单一格式(例如,正弧度)存储值来实现这一点,并提供静态工厂方法来从各种输入格式构造角度。例如:
public class Angle {
private final double radians;
private Angle(double radians) {
this.radians = radians;
}
// Static factory methods
public static Angle radians(double rad) {
return new Angle(rad);
}
public static Angle degrees(double deg) {
return radians(Math.toRadians(deg));
}
public static Angle degreesCCW(double deg) {
return degrees(360 - deg);
}
...
// Operations
public Angle plus(Angle other) {
return new Angle((this.radians + other.radians) % (2 * Math.PI));
}
...
}
然后你可以这样使用它:
class Measurement
{
double amount;
Unit unit;
}
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);
你需要记住原始单位吗,或者把所有的东西都转换成类中的一个公共单位可以吗?我希望能够以各种单位存储和检索角度。我不知道在类中转换为一个单元,并在访问器上提供转换,或者保存单元(然后在访问器上进行条件转换…?)是否更好。您还可以详细说明“各种单元”吗?你有比度和弧度更多的单位吗?我有度和弧度,但这并不是促使我尝试制作角度类的原因。我现在需要转换的主要信息是顺时针=正数vs.顺时针=负数,或左手vs.右手。你需要记住原始单位吗,还是可以将所有内容转换为类中的公共单位?我希望能够以各种单位存储和检索角度。我不知道在类中转换为一个单元,并在访问器上提供转换,或者保存单元(然后在访问器上进行条件转换…?)是否更好。您还可以详细说明“各种单元”吗?你有比度和弧度更多的单位吗?我有度和弧度,但这并不是促使我尝试制作角度类的原因。我现在需要转换的主要信息是顺时针=正vs.顺时针=负,或者左手vs.右手。