我听播客java团队,关于这个经常讨论组件(注意组件不是(明确)对象)。他们对Java没有组件这一事实感到遗憾,并与.NET形成鲜明对比。组件显然使开发应用程序(不仅仅是GUI应用程序)更容易。
我可以从讨论中看出某个组件具有的某些特性,它与解耦有关(将一个组件替换为另一个组件只是管道问题)。它与属性有关,它肯定与事件和代表有关。
所以问题:
./任何人都可以向我解释一个组件是什么。 (以及为什么java bean不是组件)。
./任何人都可以解释它们如何帮助发展。
./任何人都可以解释为什么java没有它们,如果它们如此有用。
答案 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)
这取决于“组件”的含义。这个术语在许多不同的背景下可能意味着许多不同的东西,因此很容易让人感到困惑。话虽如此,这是我对这个主题的理解:
组件与对象不同(尽管对象通常用于表示和构建组件)。不同之处在于以下几点:
答案 4 :(得分:1)
软件有几个分组。这是Java块。
“组件”,“层”,“层”和其他哲学分组 - 通常 - 概念。 VB COM环境具有组件的形式。其他人都把它们视为一种想法。
豆类是课程。单个类可以成为一个组件吗?也许。组件通常是一堆类。有时只有两个 - 一个正式的界面和一个实现。
组件可帮助您专注于类,包,分组等的逻辑分组。
由于某个组件是名义上的,因此每种语言都或多或少都有。组件的语言形式很少。他们并不是真的需要。这是你用来构建思想的一个想法或原则。
您可以谨慎地使用界面和元数据以及许多其他功能来定义“组件”的方法。
答案 5 :(得分:0)
我不特别了解.NET组件,但是从Java POV,我会说组件是一些应该具有已定义的接口/使用原则的功能单元。虽然Java没有组件作为语言概念,但Java中有IMHO组件。技术组件将是例如:
功能组件将是例如:
架构组件可以是JAR文件或OSGi包。
当然,总有解释的余地;)