什么是组件

时间:2008-10-12 21:06:58

标签: java .net object

我听播客java团队,关于这个经常讨论组件(注意组件不是(明确)对象)。他们对Java没有组件这一事实感到遗憾,并与.NET形成鲜明对比。组件显然使开发应用程序(不仅仅是GUI应用程序)更容易。

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

所以问题:

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

./任何人都可以解释它们如何帮助发展。

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

6 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

简单地说,组件是一个可重复使用的软件。像砖块一样,我们组合并加入它们来构建整个应用程序。 现代环境中软件组件的关键洞察力是元数据描述组件的内容并实现重用

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

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

答案 3 :(得分:1)

这取决于“组件”的含义。这个术语在许多不同的背景下可能意味着许多不同的东西,因此很容易让人感到困惑。话虽如此,这是我对这个主题的理解:

组件与对象不同(尽管对象通常用于表示和构建组件)。不同之处在于以下几点:

  1. 对象往往只是“事物”而组件是演员。区别在于组件是进程的一部分,而对象代表某种抽象概念。
  2. 组件有助于确保代码重用和可插拔性,因为它们基本上是小型“子程序”(或者有时是程序本身),理想情况下可以适应其他组件。
  3. 您倾向于在“无共享”消息传递系统(如ErlangKamaelia中看到更多组件,主要是因为这些类型的框架往往最适合面向组件的设计。
  4. 有许多面向组件设计的好例子,但我的第一选择是UNIX。 UNIX背后的基本思想是,它是一组旨在协同工作的小程序,而不是由几个更复杂的程序组成。

答案 4 :(得分:1)

软件有几个分组。这是Java块。

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

“组件”,“层”,“层”和其他哲学分组 - 通常 - 概念。 VB COM环境具有组件的形式。其他人都把它们视为一种想法。

豆类是课程。单个类可以成为一个组件吗?也许。组件通常是一堆类。有时只有两个 - 一个正式的界面和一个实现。

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

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

您可以谨慎地使用界面和元数据以及许多其他功能来定义“组件”的方法。

答案 5 :(得分:0)

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

  • 的EJB
  • 的Servlet

功能组件将是例如:

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

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

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