软件工程中实际上是什么模块?[关闭]


18

根据Stephen Schach的“经典和面向对象的软件工程”,第6章:

模块由单个代码块组成,可以通过调用过程,函数或方法的方式来调用

这似乎非常模糊和广泛。因此,谁能清楚地解释它并显示一些实际的示例,以将需求分解为模块?谢谢。

Answers:


16

一个模块,

  • 封装代码和数据以实现特定功能。
  • 有一个界面,可让客户端以统一的方式访问其功能。
  • 可以很容易地插入需要其接口的另一个模块。
  • 通常将其打包在一个单元中,以便可以轻松部署它。

例如,dapper.net封装了数据库访问权限。它具有访问其功能的API。它是一个单个文件,可以插入要构建的源树中。

模块的概念来自模块化编程范式,该范式主张通过将程序功能分解为模块,软件应由称为模块的单独的,可互换的组件组成,每个模块都可以完成一个功能,并包含完成此功能所需的一切。


如果我们有很多需求,那么每个需求都可以视为一个模块?例如:要求“添加员工”可以是一个模块?
还城,2012年

1
否或取决于。程序功能应细分为内聚单元。如果可以通过这种方式分解需求,则可以。但是我还没有看到这样的东西。另外,“添加员工”不应成为该模块的候选人。通常,模块是更高级别的结构,可将程序分解为逻辑上一致的单元。
theD 2012年

12

模块可能是一个重载的术语,以至于维基百科在讨论其相对于软件的用法时都使用模块编程一词来描述它。他们从基于自顶向下的设计方法的结构化编程的角度来讨论它。与低耦合和高凝聚力的使用有关的模块化的关键特性。

我的用法是,在像C甚至C ++这样的语言中,一个模块与从源文件(.c或.cpp)(通常是一个关联的头文件(.h))定义单独编译的单元有关。其他语言使用模块作为描述,而Modula-2语言将模块的结构放在模块名称和方法的中心位置。

从历史上看,模块还有其他一些含义,如DL Parnas的论文“关于将软件分解为模块的标准”中所述。他主要关心的是讨论用面向数据的分解代替功能分解的好处,这是向我们当前的面向对象的分解技术迈出的一大步。

面向对象的语言围绕类进行组织,因此术语“模块”在这种情况下可能不太重要,也不那么精确。


7

没有模块的正式定义,在您的项目上下文中,模块是(或不是)模块很大程度上取决于项目的性质和设计。

一般来说,模块是独立的代码段,提供特定且紧密耦合的功能,模块定义并强制代码中的逻辑边界。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.