图A
软件组件可以定义为一种自治的、提供外部公共接口、动态可用的(dynamically discoverable)事物过程,软件组件还可以用来构件其它组件或者应用程序。打个比方,汽车的每个零件(组件)都有明确的目的(过程),只要零件的尺寸和螺孔(接口)符合标准,它就可以用来组装一辆完整的汽车(其它组件或者应用程序)。
也许举个例子可以帮助你理解这一点。假设有一家低水平的软件公司,它有如下的软件技术:电子表格、文本编辑、图形编辑工具、拼写检测。现在,如果说这些技术中的每一种都有一个对应的公共接口可供其它软件组件或者应用程序来使用。发挥一下你的想象力,你就会发现把这些技术组合在一起形成一个功能强大的应用程序——例如字处理软件——并不会花费多少力气。
你也许会说:“软件组件与对象或者代码库有什么区别?”——这是个不错的提问。让我们看看它们之间的区别。