为我的电磁java应用程序设计合理的OO?(有点数学化)

为我的电磁java应用程序设计合理的OO?(有点数学化),java,oop,inheritance,Java,Oop,Inheritance,对于那些不知道这类事情的人。这基本上是三维向量关系,我在这里搞砸了 我正在做一个小项目来做有用的电磁学计算,但我不知道如何设计它来为将来的使用和其他应用做准备 最终,我将有一些图形输出,并使它的图形用户界面,但目前我只希望它是一个终端为基础的程序 目前我正在考虑开设一门叫做 RadialForm 它用于标识,在该类中没有任何内容是组件形式的。然后我会有另一门课叫 ComponentForm 它将进行坐标变换的所有计算,主要方法是 setRectangular(i j k) setCylin

对于那些不知道这类事情的人。这基本上是三维向量关系,我在这里搞砸了

我正在做一个小项目来做有用的电磁学计算,但我不知道如何设计它来为将来的使用和其他应用做准备

最终,我将有一些图形输出,并使它的图形用户界面,但目前我只希望它是一个终端为基础的程序

目前我正在考虑开设一门叫做

RadialForm 
它用于标识,在该类中没有任何内容是组件形式的。然后我会有另一门课叫

ComponentForm
它将进行坐标变换的所有计算,主要方法是

setRectangular(i j k)
setCylindrical(i j k) 
setSpherical(i j k)
computeCurl(i j k) //not sure if these last two should be in another class so I gave them arguments 
computeDiv(i j k)
稍后,我想能够在RadialFrom和ComponentForm类上使用Gauss的Stokes和Greens理论,所以我认为这也应该是另一个类。我有一个想法,应该有某种继承结构在进行,但我对决定什么去哪里没有信心


此外,这两个类都将使用“散度”操作符进行操作,以从恒等式中获得旋度和结果,并执行许多其他重要操作。

这里的关键词是分解:不要试图将所有内容都放在一个类中(或者在您的情况下,只放在两个类中),将每个单独的功能部分放到单独的类中。这意味着您需要为向量(点)和可能为每个算法创建不同的类。为了使您的设计更可重用,请考虑为类似任务引入接口(例如,算法)。p> OOP在域区域对象及其关系的建模方面也很强大。因此,试着放下你可能需要的域中的所有对象。但是,请注意,有时(特别是在科学程序中),您可能需要额外的类来操作现有的类。这里您的
组件表单
就是一个很好的例子


关于继承,一般的规则是:如果你不确定,就不要使用它。在大多数情况下,接口或委派(取决于您的需要)是更好的选择

我认为接口更适合集合类型的应用程序?你认为我可以在我的程序中使用这种技术吗?看看下面的例子。当我们谈到“数字”时,我们定义了带有操作(方法)的接口,
+
-
*
,等等。
整数
实数
复数
,其他类型是接口
数字
的具体实现。这样,您就可以将任何具体类型的数字放入任何使用
Number
接口的函数中。这可能是接口最常用的用法,正如您所看到的,它对集合没有任何作用。