Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于成对的对象,哪个包结构更具内聚性?_Java_Package_Organization_Code Organization - Fatal编程技术网

Java 对于成对的对象,哪个包结构更具内聚性?

Java 对于成对的对象,哪个包结构更具内聚性?,java,package,organization,code-organization,Java,Package,Organization,Code Organization,我有一些java类,我想把它们放入一个包中。以下是一个例子: Foo.java Bar.java Qux.java MetaFoo.java MetaBar.java MetaQux.java 如您所见,类成对存在于“类”“元类”中 我认为组织这些文件的方法有三种: 所有课程一套 简单地把所有东西都放在一个包里 将每一对放在单独的包装中 这将导致以下结构: 为类和元类创建单独的包 哪种方法具有更低和更高的效率 其他信息: 每个元类包含带有“普通”类实例的字段,即MetaFoo

我有一些java类,我想把它们放入一个包中。以下是一个例子:

Foo.java 
Bar.java 
Qux.java 
MetaFoo.java 
MetaBar.java 
MetaQux.java
如您所见,类成对存在于“类”“元类”中

我认为组织这些文件的方法有三种:

所有课程一套 简单地把所有东西都放在一个包里

将每一对放在单独的包装中 这将导致以下结构:

为类和元类创建单独的包

哪种方法具有更低和更高的效率

其他信息:

  • 每个元类包含带有“普通”类实例的字段,即
    MetaFoo
    包含
    foo
    类型的字段
    foo
  • 元类有一个称为
    元类的公共超类
    。他们不再继承任何东西
  • 常规类不通过组合/聚合或继承相互关联

在我看来,您应该将任何具有共享逻辑的类放在同一个包中—第二种情况。这是因为如果您有多个子类,比如xxxBar,那么所有这些类都在手边。

我决定用它来度量内聚和耦合

凝聚性 对于内聚性,让我们使用称为包缺乏内聚性(LCOP)的度量。它是度量的修改版本。它统计每个包中连接的组件(在本例中为类)的数量:

值越大,包的内聚性就越强。请注意,只有直接连接的组件才算。对于每种方法,我们将得到每个包的平均值。以下是测量值:

  • 方法1:3/1=3
  • 方法2:(1+1+1)/3=1
  • 方法3:(3+3)/2=3
第二种方法的值最低,因此最有凝聚力

耦合 现在,让我们测量耦合。为此,我们将使用公制。该指标定义为:

值越大,包之间的耦合越高。我们只算。同样,将在每种方法中平均值。我们有:

  • 方法1:3/6=0.5
  • 方法2:(1/2+1/2+1/2)/3=0.5
  • 方法3:(0/3+6/3)/2=1
A路径1和2的耦合值最低

总结 第二种方法是最相似的,在耦合方面与第一种方法一样好。此外,在实际使用中,当项目成熟时,方法2将更易于管理。
令人惊讶的是,第三种方法似乎是最糟糕的

我总是喜欢使用包作为一种对类似类进行分组的方式,而不是对链接在一起的类进行分组。所以我会选择第二种选择。虽然,正如@CeilingGecko所说,它是基于观点的。就个人而言,我也更喜欢第二种方法,但这将导致“正常”和“元”包之间的高度耦合,不是吗?