“单片”是什么意思?

时间:2010-07-05 12:20:11

标签: class oop programming-languages terminology

我在课堂上看过它。我怀疑它意味着该类可以使用被分解为逻辑子单元,但我找不到一个好的定义。你能举一些例子吗?

感谢您的帮助。

编辑:我喜欢聪明的回复,但我显然是指软件环境中的“单片”。我知道巨石,巨石,支石墓和所有与石头有关的背景。哎呀,我的国家里有足够的......

6 个答案:

答案 0 :(得分:13)

有趣的问题。我不认为对整体课程有什么正式的定义,但你已经有了这个想法。包含多个逻辑上未连接或无意义耦合的组件的类是一个单一的类。

如果你读过我强烈推荐的The Pragmatic Programmer,你可以将整体类定义为反模式,几乎与该书中的所有内容相悖。

至于示例,您将在芯片和OS设计领域找到更多,其中有单片芯片/ kernels的正式定义,类似于单片类。这里有一些例子,虽然每个例子都可以反对列在这个列表中:

  1. JOGL - OpenGL的Java绑定。这可能是有争议的,而且有充分的理由。
  2. 大多数学术项目 - 原因很明显。
  3. 如果你单独开始编程,而不是加入团队,那么你很可能会打开你的第一个项目,并且会有一个单一的类。

答案 1 :(得分:11)

如果你查看单词的词源,你会看到它来自希腊单音(单曲)和石印(石头)。在您提及的软件环境中,它描述了single-tiered application in which the code for the user interface and the data access are combined into a single program from a single platform

答案 2 :(得分:6)

“Monolithic”是has been used to flame succesful software的术语。此链接揭示了该术语中固有的假设及其有限的用途。

基本假设是,如果系统是由软件组件构建的,那么每个系统都有一个明确定义的单独任务。直观地说,这似乎是正确的。如果每个组件都有效,整个系统必须工作,对吗?

实际上,这并不容易。即使没有单个组件可归咎于更大的组合(非单片)系统也可能错过关键功能。当架构设计无法将功能分配给任何特定组件时,就会发生这种情况。如果它是一个不能完全映射到单个组件的函数,则会发生这种情况。

现在Linux(继续链接的例子)在现实中并不是单一的。它在单片内核之上具有模块化用户空间,用户空间附带许多单独的实用程序。 Except when it doesn't.

答案 3 :(得分:1)

整体架构是一种软件结构模型,可作为一个整体创建,其中所有Rails工具(ActionMailer,ActiveJob,ActionCable等)都可以与这些工具所应用的代码一起收集。这些工具没有相互连接,但也不是独立的。

如果一项功能需要更改,它将影响整个过程和其他功能的工作,因为它们是一个过程的一部分。

让我们回想一下Ruby on Rails是什么,它可以提供什么,它的优缺点。它最重要的好处是易于使用。

如果您编写 rails new ,您将立即获得一个新的应用程序,那么您可以创建所需的任何REST API并使用Rails帮助器和生成器,这使开发变得更加容易。

如果您需要在Rails应用程序中发送电子邮件,请使用Rails ActionMailer。当您需要进行一些困难处理时,ActiveJob将为您提供帮助。使用Rails 5,您还可以直接使用websocket。因此,创建聊天或使您的应用程序更具交互性将很容易。

如果使用正确的DSL语法,则可以使用所有这些语法,甚至可以立即使用。此外,您不必了解有关这些工具的内部实现的所有知识,考虑使用DSL即可获得预期的结果。

答案 4 :(得分:0)

这意味着某些东西与模块化相反。模块化应用程序可以更换部件(称为模块),而无需更换整个应用程序。虽然整体应用程序在修复或升级部件后,必须全部更换。

来自Wikipedia:“模块化通常是可取的,因为它支持重用应用程序逻辑的各个部分,并且通过允许修复或替换应用程序的部分而不需要批量更换来促进维护。”

因此,在单个类的上下文中,其所有功能都是自包含的,如果要向类添加或更改功能,则需要在类中更改/添加代码并重新编译它。相反,模块化类公开了对外部实现的功能的访问。例如,“计算器”类可以使用单独的“添加”类来实际添加数字;从单独的库中调用“乘法”函数;甚至从Web服务调用“Amortize”功能。只要这些功能部件中的每一个都可以从类外部进行更改,它就是模块化的。

答案 5 :(得分:0)

我对软件开发中的单片设计的定义是一种设计,需要将额外的功能添加到单个不可分割的代码块中。

PRO:

  • 一切都在一个地方,因此很容易找到
  • 可以更简单,考虑到需要考虑的关系较少(也可以更复杂一点)

CONS:

  • 随着时间的推移,随着功能的增加,系统的复杂性可能呈指数级增长,到目前为止,新功能极难或无法实施
  • 可能使多个开发人员难以使用,例如,实体框架EDMX文件将整个数据库放在一个文件中,这对多个开发人员来说非常困难。
  • 减少了可重用性,根据定义,它没有较小的组件,可以重复使用并重新用于解决其他问题,除非制作完整的代码副本然后进行修改。