我在Java中有一个非常简单的任务,我不确定给我的项目提供哪种结构。
我想在Java中创建一个小项目,进行一些统计计算。例如,我需要创建一个获取数组的方法,并返回平均值,另一个方法获取一个数组,并返回一个标准偏差,我还需要一个获取两个数组的方法,并返回相关系数。 / p>
我想知道的是,现在我在Eclipse中打开了一个新项目是怎么做的?
这一切都应该在一个班级吗?我应该为每个方法都有一个单独的类,使它成为一个静态方法吗?最后,我想让其他人将此代码集成到他的项目中。我需要尽可能简单有效地做到这一点。
你能指导我怎么做吗?一节课,几节课?公共/私人?我不熟悉这些东西,但我可以自己编写方法。
提前谢谢
答案 0 :(得分:2)
您的所有方法都具有以下属性:
只要你给他们足够具体的名字,他们就不可能有另一个实现。毕竟数学没有改变。这意味着您可能不需要像接口或子类这样的结构。
当人们使用它们时,他们倾向于使用其中的几个或按功能分组。这意味着您应该按用法对方法进行分组,例如统计方法;信号处理方法;等等。
方法不保持内部状态,并且返回所有输出而没有其他调用者/线程的任何副作用。因此,您的方法不必包含类本身或任何雕像变量。
您的方法实际上是为主程序提供实用程序,但方法的语义不会因调用者或调用上下文而有所不同。
因此,如上所述,您的方法应该在1个或多个类中,按其性质或用法分组。方法应该是静态方法,没有任何副作用。这正是java.lang.Math所做的。
答案 1 :(得分:1)
我想在Java中创建一个小项目,进行一些统计计算。例如,我需要创建一个获取数组的方法,并返回平均值,另一个方法获取一个数组,并返回一个标准偏差,我还需要一个获取两个数组的方法,并返回相关系数。 / p>
在我看来,您有兴趣为统计计算创建实用程序类。如何实现的范围非常广泛,但建议遵循常见的编码约定和基本的OOP连接。
这一切都应该在一个班级吗?我应该为每个方法都有一个单独的类,使它成为一个静态方法吗?
由于每个方法(均值,标准偏差......)都与相同的核心背景相关(即执行某些统计计算),因此为每个方法设置一个单独的静态方法似乎是合乎逻辑的。您需要创建的功能。
当然,您必须处理基本的OOP概念,例如(数据隐藏)将字段保持为私有并正确公开它们的公共getter / setter。此外,最好将计算方法保密,只暴露一个调用私有函数的公共方法。像
这样的东西public class MyUtilityClass{
// A bunch of private fields
int field1; ...
private MyUtilityClass(){} // We don't want anyone to create an object of this class
// method exposed to user
public static float calcArithmeticMean(float[] arr1, float[] arr2){
return getMean(arr1, arr2);
}
// method for internal use
private float getMean(float[] f1, float[] f2){
//do your calculation here
}
// remember to expose only those fields that you want the user be able to access
// getter/setters here
}
最后,我想让其他人将此代码集成到他的项目中。
如果您遵循正确的OOP编码惯例,那么您的实用程序类将是可移植的,任何人都可以在其应用程序中理解和扩展它。
答案 2 :(得分:1)
我会创建一个表示数字本身的单个类。
public class DataSet extends HashSet<Double> {
public double mean () {
// implementation
}
public double standardDeviation () {
// implementation
}
public double correlationCoefficient (DataSet other) {
// implementation
}
}
答案 3 :(得分:1)
我的第一个建议是使用Maven开始您的项目。它为您提供了一个可靠的项目结构,其中包含一个很好的工具来管理您的jar文件依赖项和构建生命周期。此外,所有主要的Java IDE(包括Eclipse)都可以轻松创建,理解和使用您的Maven设置。
其次,对于您的应用程序设计,建议避免使用大量静态方法,因为它们会损害代码的可测试性for example explained here。
关于类和方法的数量,它取决于您的具体用例,但指南是尝试在一个类中根据其职责聚合类似的方法,同时如果有太多的责任由一个类处理,则分离类。单班。在这种情况下,Low coupling and high cohesion是你的朋友。
数组可能比集合略快,但要小心它们,因为they are reifiable and do not mix well with generics。一般来说,依靠Collections。此外,如果您可以使用Java版本8,请查看Streams API。
最后但并非最不重要的是,Java有大量的开源代码。因此,在开始编写库之前,请始终查找库。如果是数学,请查看this和that。
答案 4 :(得分:0)
为每种计算类型创建一个具有不同方法且具有公共访问权限的类(每种方法的一种方法,标准差等等)。根据您的方便,这些方法可以在内部引用另一个不可公开访问的实用程序类中的辅助方法。
将所有这些类放在一个包中并导出它以便集成到其他项目中。
由于其他人将其他人用作图书馆,因此请务必尽可能对其进行记录和评论。
答案 5 :(得分:0)
我投票支持单班。方法应该是静态的,您不想显示的参数应该是私有的。
答案 6 :(得分:0)
这取决于许多事情,如项目的其他部分,未来的变化和扩展,......
我建议从single-class/public-static
开始,并在扩展项目时按要求更改它。