什么是组件

What is a component

提问人:Scott James 提问时间:10/13/2008 最后编辑:Scott James 更新时间:3/18/2014 访问量:15488

问:

我听播客java posse,经常讨论组件(注意组件不是(显然)对象)。他们感叹 Java 没有组件,而 .NET 则有组件。组件显然使开发应用程序(而不仅仅是 GUI 应用程序)更容易。

我可以从讨论中看出一个组件具有的某些品质,它与解耦有关(用一个组件代替另一个组件只是一个管道问题)。它与属性有关,它肯定与事件和委托有关。

所以对于问题:

./ 谁能向我解释一下组件是什么。(以及为什么 Java Bean 不是组件)。

./ 谁能解释一下它们如何帮助发展。

./ 如果它们如此有用,谁能解释为什么 Java 没有它们。

Java .NET 对象

评论


答:

3赞 Greg Hewgill 10/13/2008 #1

Software Engineering Radio 有一集关于这个主题的节目:http://se-radio.net/podcast/2008-02/episode-87-software-components

一般的想法是,软件组件可以以元数据的形式描述它自己的依赖项和服务是什么。我不知道为什么你可能听说过 Java 没有组件,因为你当然可以想象 Java 中的架构,其中组件确实通过元数据来描述自己。我想这只是 Java 平台定义本身并没有真正的组件架构。

更新:事实上,人们不需要想象这样的架构,因为正如其他人所指出的,Java Beans 或 Servlet 当然可以被认为是基于组件的架构。

评论

0赞 Scott James 10/13/2008
感谢您指出链接,我一定会看一看。至于为什么我不认为组件不存在......好吧,在这一点上,我不清楚它们是什么,所以我不做任何断言。问问乔·努克索尔(Joe Nuxoll),他是一个似乎热衷于说他们(还)不存在的家伙。
0赞 Scott James 10/13/2008
PS Joe Nuxoll 是 java posse (javaposse.com) 的主持人之一,完全推荐这个播客。给任何对 Java 开发感兴趣的人。
0赞 Miguel Gamboa 3/18/2014
当我听这个播客时,当他说这样的话时,我感到很困惑:“有一个组件市场,人们在那里创建组件,然后将它们放在这个全球存储库中,然后人们可以在那里获取......并从...我不相信这个想法可以实现,我不认为这种情况会发生。那么,像 Maven Central Repository 或 Node JS 的 NPM 这样的存储库呢?
3赞 Garth Gilmour 10/13/2008 #2

术语组件是 OO 中最模棱两可和过度使用的术语之一。

大多数人都会同意,组件由一组类组成,这些类协同工作以实现一个或多个接口。其中一个类承担了“前端”的角色,即它实现了接口,但将工作委托给组内的其他类。正如您所说,组件应该是可更换的,而系统的其余部分却不知道。

基于组件的体系结构的一个很好的例子是 COM。这是一个很好的例子,因为它被大量使用和严格指定。但请注意,对这种架构的需求是基于 C++ 编译和部署模型的不灵活性。

在 Java 中,你可以对一个类做很多事情,而不会破坏与系统其余部分的二进制兼容性。因此,没有必要构建僵化的、基于组件的架构。但这完全取决于你如何定义这个术语,例如,任何使用依赖注入构建的项目都可以算作“基于组件”。

0赞 Martin Klinke 10/13/2008 #3

我不是特别了解 .NET 组件,但从 Java POV 来看,我会说组件是一些功能单元,应该具有定义的接口/使用原则。虽然 Java 没有组件作为语言概念,但恕我直言,Java 中有组件。技术组件包括:

  • EJB
  • Servlet

功能组件将是例如:

  • 应用程序的自动更新
  • 支持在数据模型上进行计算的公式机制

架构组件可以是 JAR 文件或 OSGi 捆绑包。

当然,总是有解释的余地;)

1赞 Jason Baker 10/13/2008 #4

这取决于你所说的“组件”是什么意思。该术语在许多不同的上下文中可能意味着许多不同的事物,因此很容易混淆。话虽如此,以下是我对这个主题的理解:

组件与对象不同(尽管对象通常用于表示和生成组件)。区别在于以下几点:

  1. 对象往往只是“事物”,而组件是参与者。区别在于组件是过程的一部分,而对象代表某种抽象概念。
  2. 组件有助于确保代码的重用性和可插拔性,因为它们基本上是小型的“子程序”(有时是独立的程序),理想情况下可以适应与其他组件很好地协同工作。
  3. 你倾向于在“无共享”的消息传递系统(如 ErlangKamaelia)中看到更多的组件,主要是因为这些类型的框架往往最适合面向组件的设计。

面向组件的设计有很多很好的例子,但我的首选是 UNIX。UNIX 背后的基本思想是,它更像是一组旨在协同工作的小程序,而不是由几个更单一的程序组成。

1赞 S.Lott 10/13/2008 #5

软件分为几组。以下是 Java 块。

  • 语句。
  • 方法函数。多个语句。
  • 类。多个属性和方法函数。
  • 文件。一个或多个类。一个类是文件中的公共类,其他类隐藏在文件中。
  • 包。多个类。这些形成了一个层次结构。

“组件”、“层”、“层”和其他哲学分组通常是概念性的。VB COM 环境对组件具有形式主义。其他人都把它们当作只是想法。

豆类是类。单个类可以是一个组件吗?或。一个组件通常是一堆类。有时只有两个 - 一个正式接口和一个实现。

组件可帮助您专注于类、包、分组等的逻辑分组。

由于组件是名义上的,因此每种语言都或多或少具有它们。组件的语言形式很少。它们并不是真正需要的。它是你用来构建思维的想法或原则。

您可以谨慎地定义一种具有接口和元数据以及许多其他功能的“组件”方法。

2赞 Miguel Gamboa 3/18/2014 #6

尽管在 Java 开始时,组件的概念多次与 Gui 组件相关,但软件工程中组件的一般含义超出了这个概念。

简单地说,组件是一个软件,它是可重用的。就像积木一样,我们将它们组合起来并连接起来,以构建一个完整的应用程序。 现代环境中软件组件的关键见解是元数据,它描述了组件的内容并支持重用

1996 年,JDK 1.0 是第一个为组件提供元数据的托管运行时环境。在这种情况下,组件是包含字节码和元数据的文件。然而,根据 Java 规范,一个 .class 文件只包含一个类型定义。因此,要将类型捆绑包部署为组件,我们可以使用包含多个文件的 Jar 存档。.class.class

另一方面,在提供相同可重用组件概念的 .Net 平台中,一个组件可能包含多个类型定义。在本例中,组件(在 .Net 中也称为程序集)是一个 或 文件。.dll.exe