gpt4 book ai didi

java - 创建java库时如何组织类

转载 作者:行者123 更新时间:2023-11-29 04:29:51 25 4
gpt4 key购买 nike

我正在创建一个科学图书馆,其中包含许多科学和数学分支的方法,包括微积分、统计学、物理学等。现在我有以下设置:

enter image description here

maths , Calculus.javaEvaluation.java是我想要公开的唯一类,其中我将拥有在项目中随处可访问的公共(public)静态方法。

我应该有更多的包裹吗?更多目录?添加更多会使事情变得更复杂/无法使用吗? 我尝试创建更多包,但它迫使我创建诸如 BinaryOperation.java 之类的类。 public ,这是我不想要的,因为这个库的用户不需要处理二元运算符。

我希望用户可用的方法(public static):

  • derive(String) , integrate(String)Calculus.java
  • evaluate(String, double)Evaluation.java
  • 最佳答案

    有几个自由度。从技术的角度来看,它们的“干净”或“纯粹”程度、可持续性和可维护性以及特定结构的强制执行程度各不相同。

    一个务实的答案很简单:当用户应该看到一个类或接口(interface)时,将其设为 public .否则:执行不是 让它public .

    这是非常干净且非常强大的:没有人可以使用他不应该使用的类。默认情况下,JavaDoc 将为公共(public)类生成文档,这正是您想要的。

    重要的是要意识到,一旦某事已被 public ,您不能再简单地移动、删除、重命名或在结构上更改该内容。这些更改中的每一个都会破坏客户的代码。

    但是,当应用程序/库变得更大时,您经常提到的一点是:有一组类应该在 的所有包之间共享。图书馆 ,但对外界仍然不可见-就像您的情况一样,maths.eval.BinaryOperation类(class)。

    我在这里看到的一些选项是:

  • 放置所有使用 BinaryOperation 的类归类为一个包。这可能是 不是 一个合理的选择,因为它们在其他方面是不相关的,并且只有 BinaryOperation作为一个(非常低级的)横切关注点。 (不过,它是上述意义上的“干净”和“强大”)
  • 标记BinaryOperation作为客户不应该使用的东西。例如,您可以将其放入名为 ...common.internal.implementation 的包中。 ,并在 JavaDoc 中明确声明“......这个类不应该被客户端使用”。这既不干净也不强。但这对您来说是最少的努力,因此可能是一个合理的权衡。
  • 拔出BinaryOperation进入自己的图书馆。 (可能与 UnaryOperation 和其他几个类一起使用)。然后可以将该库打包为 common-operations.jar 之类的东西。 .您的 math... 的用户图书馆会仅限 依赖主库。主库依赖于“操作”库的事实在主库本身中是不可见的。像 Maven 这样的工具可以帮助你为你的库的用户透明地解决这些依赖关系。这里的严重缺点:它将维护这个(公共(public))“操作”库的负担放在你身上。
  • 仅出于完整性考虑:对于“大规模”软件开发,还有其他解决方案。例如,在 OSGi 的上下文中,您可以定义 access rules for packages

  • 意见:我会选择选项 2 或 3。

    旁注:

    不要调用你的根包maths ! 每个人都可以创建这样的包(但没有人应该创建它)。如果您打算创建一个公开可用的库,请查看 Package naming conventions : 你的包名应该是“倒转域名”。因此,例如,注册域“defoification.com”,并将您的包命名为 com.defoification.maths .从长远来看,其他一切都会导致问题。

    所有这些都与 API 设计和 OOP 的某些原则密切相关。例如,有些人提倡非常严格的设计,即只有接口(interface)应该是 public。 , 并且应该没有 public实际数据模型的类。此外,类设计的细节可能有一些注意事项。例如,方法修饰符的选择(如果您有公共(public)类)。方法应该很少是 public ,而是 public final , protected finalprotected abstract ,取决于谁应该被允许调用或覆盖它。更多关于此(以及许多相关主题)的信息可以在 http://wiki.apidesign.org/wiki/Main_Page 中找到。以及 NetBeans 的主要作者之一 Jaroslav Tulach 所著的相应的“Practical API Design”一书。

    关于java - 创建java库时如何组织类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44252527/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com