如何使代码模块化?

24 java osgi modularity module

我有一些Java程序,现在我想知道它是否是模块化的,如果它是模块化的,那么在多大程度上,因为模块化永远不能是二进制术语,即0或1.我如何确定特定代码是模块化的在很大程度上.我想知道如何使代码更加模块化?

Ora*_*ind 39

模块化的一些基准:

  1. 您为执行特定任务而重写了多少次类似的代码
  2. 如果您在程序的某个部分更改某些内容,您需要多少代码才能重构代码
  3. 文件是否更小,更容易浏览?
  4. 应用程序模块是否在需要时充分独立地执行?
  5. 你的代码有多糟糕?当你只删除一个函数或变量时,一切都会失败吗?在重新命名课程时,你会得到20多个错误吗?(对于Instance,您可以实现堆栈机制以跟踪应用程序中的所有跃点)
  6. 自然语言使用的代码有多接近(即模块及其子组件代表更多的真实世界对象,而不必过多关注网络源文件的大小).

有关更多想法,请查看此内容以及有关软件质量的内容

至于你关于使你的代码更加模块化的问题首先你应该问自己上面的问题,获得它们的具体答案,然后看看这个

基本理念是将您的应用程序分解成横跨容易理解和访问的目录布局的许多排列整齐的小代码片段成为可能.

应用程序中的每个方法都必须不超过所需处理的最小量.将这些方法组合到越来越多的宏级别方法中应该会引导您返回到您的应用程序

  • 另一个基准可能是"删除标准":如果从程序中删除X(包,类,方法,字段),会有什么中断?如果有休息,那么他们离已删除项目的距离是多远?如果破碎的物品很远,那么这意味着X的模块化程度较低. (4认同)

Eug*_*ota 25

关键点是

  • 关注点分离
  • 凝聚
  • 封装(通过接口通信)
  • 可替代性
  • 可重用性

这种模块系统的一个很好的例子是标准汽车零件,如盘式制动器和汽车立体声.在制造汽车时,您不希望从头开始构建汽车音响.你宁愿买它并插上它.你也不希望制动系统影响汽车音响 - 或者更糟糕的汽车音响会影响制动系统.

为了回答你的问题,"我如何确定特定代码在很大程度上是模块化的",我们可以形成问题来测试模块性.您是否可以轻松地用其他东西替换模块而不影响应用程序的其他部分?

XML解析器可能是另一个例子.一旦获得DOM接口,您实际上并不关心在下面使用哪种XML解析器实现(例如Apache Xerces或JAXP).

在Java中,另一个问题可能是:是否可以通过interfaces 访问所有功能?接口几乎照顾低耦合.

另外,您能用一句话描述系统中的每个模块吗?例如,汽车音响播放音乐和广播.盘式制动器使车辆安全减速.


(这是我写的什么是组件驱动的开发?)

根据Wikipedia,基于组件的开发是基于组件的软件工程(CBSE)的别名.

[它]是软件工程的一个分支,其优先级是关于整个给定软件系统中可用的广泛功能的关注点分离.

这有点模糊,让我们来看看更多细节.

单个组件是封装一组相关功能(或数据)的软件包或模块.

所有系统进程都放在单独的组件中,以便每个组件内的所有数据和函数在语义上相关(就像类的内容一样).由于这个原理,人们常说组件是 模块化和内聚的.

因此,根据这个定义,组件可以是任何东西,只要它做的一件事情真的很好而且只有一件事.

关于系统范围的协调,组件通过接口相互通信.[...]这个原则导致被称为封装的组件.

所以这听起来越来越像我们认为好的API或SOA应该是什么样子.

提供接口由棒棒糖表示,并且需要接口由附连到在UML组件的外边缘开放的插座符号表示.

alt text http://upload.wikimedia.org/wikipedia/commons/e/e1/Component-based-Software-Engineering-example2.gif

组件的另一个重要属性是它们是可 替代的,因此如果后续组件满足初始组件的要求(通过接口表示),则组件可以被另一个组件(在设计时或运行时)替换.

可重用性是高质量软件组件的重要特征.应该设计和实现软件组件,以便可以在许多不同的程序中重用它.

可替代性和可重用性是使组件成为组件的原因.那么这与面向对象编程有什么区别?

面向对象编程(OOP)中的思想是软件应该根据它所代表的实际或想象对象的心理模型来编写.[...]

相比之下,基于组件的软件工程没有做出这样的假设,而是声明应该通过将预制组件粘合在一起来开发软件,就像在电子或机械领域一样.


Chr*_*ian 0

假设我理解你的问题,你想知道是什么使代码模块化,因为代码模块显然需要彼此之间的一些依赖关系才能工作。这是我的回答:

如果您可以将系统分解为模块,并且可以单独测试这些模块,那么这很好地表明系统是模块化的。