我们依赖什么呢? Jigsaw实现了一个模块化系统,Java8在某种程度上偏离Java模块化精神,这将成为一个不合格的语言,未来会在Java社区会引起无数另人头痛的事。在这篇文章中,我会说明Jigswa的设计不适合Java,因为它忽略了包,导入、导出模块使用了错误的依赖模型。 模块化 如果Jigsaw是一个模块化系统,那么,我们首先需要定义模块化: 模块化封装内容和其他模块化的一些明确的共享内容 一个理想的模块化包括以下几种内容: 私有化——私有化内容可以被修改,而不影响其他模块。在本地范围内修改私有化内容;外部是看不到私有的内容。
例如,在Java中,私有属性只能对自己的类……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
我们依赖什么呢?
Jigsaw实现了一个模块化系统,Java8在某种程度上偏离Java模块化精神,这将成为一个不合格的语言,未来会在Java社区会引起无数另人头痛的事。在这篇文章中,我会说明Jigswa的设计不适合Java,因为它忽略了包,导入、导出模块使用了错误的依赖模型。
如果Jigsaw是一个模块化系统,那么,我们首先需要定义模块化:
模块化封装内容和其他模块化的一些明确的共享内容
一个理想的模块化包括以下几种内容:
- 私有化——私有化内容可以被修改,而不影响其他模块。在本地范围内修改私有化内容;外部是看不到私有的内容。例如,在Java中,私有属性只能对自己的类产生影响,其他引用它的类不会受到影响。
- 导出——导出内容共享给其他的模块。改变导出内容会影响其他模块;因此,它在一个约束的条件下演变,因为它不知道它的依赖是什么。在Java中,public关键字就是指导出。
- 导入——导入的内容来自于另一个模块。导入模块明确地指出要依赖导入内容。导入模块内部可以通过编译器验证这些内容,在运行时是否满足VM。
因此,一个典型的模块可以描述为:
模块化提供了大量的好处。然而,最重要的好处是他们限制了软件系统的领域。在无模块化的世界中,改变可以影响整个系统;在模块化的世界中,改变限制私有化内容和一些导出(公共的)内容。
在大型系统中,减少领域的提供,获得的好处就会越多。
在我们定义的模块中,内容的概念一直被刻意的保持模糊。模糊的原因是,模块化是一个模型,可以提供不同的等级。在过去的60年中,我们多次使用这种模型构建软件。虽然,有人说功能像模块化,Java类就是最明显的例子。
类、模块化和内容
如果Java类是模块化的,那么内容是什么呢?对于一个类来说,成员(属性和方法)就是内容。例如,圆作为类成员,方块是成员内容的符号,我们可以把类模块化如下(黑色是导出(公共的),灰色的私有的,白色是导入的):
Java也有另外一个模块——包。Java语言规范(JLS)中比较了Modula的模块化包。它应该清楚包的内容是类,象征着一个圆。所以,如果我们为一个包使用方形标志,我们可以把包描述如下:
有时,从公众的讨论中,得到这样的结论,JSR 277、JSR 294、OSGI以及Jigsaw正在讨论的就是Java模块。这是错误的,模块化不是明确的东西,而是一个模型,可以重复应用在先前模块层。因此,整个讨论都是关于在Java中我们如何陈述下一层的模块化。
作者
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
前无古人后无来者的Java平台
开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。