提问人:Scott James 提问时间:10/13/2008 最后编辑:Scott James 更新时间:3/18/2014 访问量:15488
什么是组件
What is a component
问:
我听播客java posse,经常讨论组件(注意组件不是(显然)对象)。他们感叹 Java 没有组件,而 .NET 则有组件。组件显然使开发应用程序(而不仅仅是 GUI 应用程序)更容易。
我可以从讨论中看出一个组件具有的某些品质,它与解耦有关(用一个组件代替另一个组件只是一个管道问题)。它与属性有关,它肯定与事件和委托有关。
所以对于问题:
./ 谁能向我解释一下组件是什么。(以及为什么 Java Bean 不是组件)。
./ 谁能解释一下它们如何帮助发展。
./ 如果它们如此有用,谁能解释为什么 Java 没有它们。
答:
Software Engineering Radio 有一集关于这个主题的节目:http://se-radio.net/podcast/2008-02/episode-87-software-components
一般的想法是,软件组件可以以元数据的形式描述它自己的依赖项和服务是什么。我不知道为什么你可能听说过 Java 没有组件,因为你当然可以想象 Java 中的架构,其中组件确实通过元数据来描述自己。我想这只是 Java 平台定义本身并没有真正的组件架构。
更新:事实上,人们不需要想象这样的架构,因为正如其他人所指出的,Java Beans 或 Servlet 当然可以被认为是基于组件的架构。
评论
术语组件是 OO 中最模棱两可和过度使用的术语之一。
大多数人都会同意,组件由一组类组成,这些类协同工作以实现一个或多个接口。其中一个类承担了“前端”的角色,即它实现了接口,但将工作委托给组内的其他类。正如您所说,组件应该是可更换的,而系统的其余部分却不知道。
基于组件的体系结构的一个很好的例子是 COM。这是一个很好的例子,因为它被大量使用和严格指定。但请注意,对这种架构的需求是基于 C++ 编译和部署模型的不灵活性。
在 Java 中,你可以对一个类做很多事情,而不会破坏与系统其余部分的二进制兼容性。因此,没有必要构建僵化的、基于组件的架构。但这完全取决于你如何定义这个术语,例如,任何使用依赖注入构建的项目都可以算作“基于组件”。
我不是特别了解 .NET 组件,但从 Java POV 来看,我会说组件是一些功能单元,应该具有定义的接口/使用原则。虽然 Java 没有组件作为语言概念,但恕我直言,Java 中有组件。技术组件包括:
- EJB
- Servlet
功能组件将是例如:
- 应用程序的自动更新
- 支持在数据模型上进行计算的公式机制
架构组件可以是 JAR 文件或 OSGi 捆绑包。
当然,总是有解释的余地;)
这取决于你所说的“组件”是什么意思。该术语在许多不同的上下文中可能意味着许多不同的事物,因此很容易混淆。话虽如此,以下是我对这个主题的理解:
组件与对象不同(尽管对象通常用于表示和生成组件)。区别在于以下几点:
- 对象往往只是“事物”,而组件是参与者。区别在于组件是过程的一部分,而对象代表某种抽象概念。
- 组件有助于确保代码的重用性和可插拔性,因为它们基本上是小型的“子程序”(有时是独立的程序),理想情况下可以适应与其他组件很好地协同工作。
- 你倾向于在“无共享”的消息传递系统(如 Erlang 或 Kamaelia)中看到更多的组件,主要是因为这些类型的框架往往最适合面向组件的设计。
面向组件的设计有很多很好的例子,但我的首选是 UNIX。UNIX 背后的基本思想是,它更像是一组旨在协同工作的小程序,而不是由几个更单一的程序组成。
软件分为几组。以下是 Java 块。
- 语句。
- 方法函数。多个语句。
- 类。多个属性和方法函数。
- 文件。一个或多个类。一个类是文件中的公共类,其他类隐藏在文件中。
- 包。多个类。这些形成了一个层次结构。
“组件”、“层”、“层”和其他哲学分组通常是概念性的。VB COM 环境对组件具有形式主义。其他人都把它们当作只是想法。
豆类是类。单个类可以是一个组件吗?或。一个组件通常是一堆类。有时只有两个 - 一个正式接口和一个实现。
组件可帮助您专注于类、包、分组等的逻辑分组。
由于组件是名义上的,因此每种语言都或多或少具有它们。组件的语言形式很少。它们并不是真正需要的。它是你用来构建思维的想法或原则。
您可以谨慎地定义一种具有接口和元数据以及许多其他功能的“组件”方法。
尽管在 Java 开始时,组件的概念多次与 Gui 组件相关,但软件工程中组件的一般含义超出了这个概念。
简单地说,组件是一个软件,它是可重用的。就像积木一样,我们将它们组合起来并连接起来,以构建一个完整的应用程序。 现代环境中软件组件的关键见解是元数据,它描述了组件的内容并支持重用。
1996 年,JDK 1.0 是第一个为组件提供元数据的托管运行时环境。在这种情况下,组件是包含字节码和元数据的文件。然而,根据 Java 规范,一个 .class
文件只包含一个类型定义。因此,要将类型捆绑包部署为组件,我们可以使用包含多个文件的 Jar 存档。.class
.class
另一方面,在提供相同可重用组件概念的 .Net 平台中,一个组件可能包含多个类型定义。在本例中,组件(在 .Net 中也称为程序集)是一个 或 文件。.dll
.exe
评论