12

我听播客 java posse,在这方面经常讨论组件(注意组件不是(显然)对象)。他们感叹 Java 没有组件这一事实,并与有组件的 .NET 形成对比。组件显然使开发应用程序(不仅仅是 GUI 应用程序)更容易。

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

所以对于问题:

./ 任何人都可以向我解释什么是组件。(以及为什么 java bean 不是组件)。

./谁能解释他们如何帮助发展。

./如果它们非常有用,任何人都可以解释为什么java没有它们。

4

6 回答 6

2

软件工程电台有一个关于这个主题的插曲: http: //se-radio.net/podcast/2008-02/episode-87-software-components

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

更新:确实,不需要想象这样的架构,因为正如其他人指出的那样,Java Bean 或 Servlet 肯定可以被视为基于组件的架构。

于 2008-10-12T21:19:49.570 回答
2

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

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

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

在 Java 中,你可以在不破坏与系统其余部分的二进制兼容性的情况下对一个类做很多事情。所以没有那么多需要构建刚性的、基于组件的架构。但这一切都取决于您如何定义该术语,例如,任何使用依赖注入构建的项目都可以算作“基于组件”。

于 2008-10-12T21:23:41.480 回答
2

尽管在 Java 之初,组件的概念多次与 Gui 组件相关,但软件工程中组件的一般意义超出了该概念。

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

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

另一方面,在.Net 平台中,它提供了相同的可重用组件思想,一个组件可能包含多个类型定义。在这种情况下,组件(在 .Net 中也称为程序集)是一个文件.dll或一个.exe文件。

于 2014-03-17T21:22:04.017 回答
1

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

组件不同于对象(尽管对象通常用于表示和构建组件)。区别在于几件事:

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

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

于 2008-10-12T21:47:12.540 回答
1

软件分为几组。这是Java块。

  • 声明。
  • 方法函数。多个陈述。
  • 班级。多个属性和方法函数。
  • 文件。一门或多门课。一个类是文件中的公共类,其他类隐藏在文件中。
  • 包裹。多个班级。这些构成了一个层次结构。

“组件”、“层”、“层”和其他哲学分组——通常——是概念性的。VB COM 环境对组件有一种形式主义。其他人都将它们视为只是想法。

bean 是类。单个类可以是一个组件吗?也许。一个组件通常是一堆类。有时只有两个——一个正式的接口和一个实现。

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

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

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

于 2008-10-12T22:02:56.223 回答
0

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

  • EJB
  • 小服务程序

功能组件将是例如:

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

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

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

于 2008-10-12T21:25:00.353 回答