﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java node-随笔分类-构件技术</title><link>http://www.blogjava.net/luoqx/category/4995.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 09:37:43 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 09:37:43 GMT</pubDate><ttl>60</ttl><item><title>构件组装</title><link>http://www.blogjava.net/luoqx/archive/2005/11/18/20417.html</link><dc:creator>publisher luo</dc:creator><author>publisher luo</author><pubDate>Fri, 18 Nov 2005 04:38:00 GMT</pubDate><guid>http://www.blogjava.net/luoqx/archive/2005/11/18/20417.html</guid><wfw:comment>http://www.blogjava.net/luoqx/comments/20417.html</wfw:comment><comments>http://www.blogjava.net/luoqx/archive/2005/11/18/20417.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/luoqx/comments/commentRss/20417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luoqx/services/trackbacks/20417.html</trackback:ping><description><![CDATA[
<h3><a name="_Toc119800820"></a><a name="_Toc119769813"></a><a name="_Toc119769766"><span style=""><span style=""><!--[if !supportLists]--><span style="font-size: 14pt; line-height: 173%;" lang="EN-US"><span style=""><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> 
</span></span></span><!--[endif]--><span style="font-family: 宋体;"></span></span></span></a><span style=""></span><span style=""></span><span style=""></span><span style="" lang="EN-US"><o:p></o:p></span></h3>


<p class="4TimesNewRoman" style="margin-left: 51.55pt; text-indent: -42.55pt;"><a name="_Toc119800821"><!--[if !supportLists]--><span style="" lang="EN-US"><span style=""><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 黑体;">以框架为基础的方法</span></a></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">在软件开发中，使用面向对象技术开发构件并组装应用系统是当前的流行做法。由于这些构件是由对象构成的，为使对象之间能够通过相互触发的方式进行交互，需要对象来维护静态类信息和接口信息。这将导致对象之间具有隐式依赖</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">关系，同时还使对象依赖于外部服务</span><span style="font-size: 12pt;" lang="EN-US">(</span><span style="font-size: 12pt; font-family: 宋体;">如通信中间件</span><span style="font-size: 12pt;" lang="EN-US">)</span><span style="font-size: 12pt; font-family: 宋体;">。这些依赖关系不易于构件在不同平台间进行移植，使构件的组装变得更加困难。不过在统一平台上构件不存在移植和组装困难的问题。在本框架中采用</span><span style="font-size: 12pt;" lang="EN-US">IoC</span><span style="font-size: 12pt; font-family: 宋体;">反射注入容器来将各个构件组合起来而且不破坏构件的结构（不需要强制构件与容器耦合，不需要调用容器的</span><span style="font-size: 12pt;" lang="EN-US">API</span><span style="font-size: 12pt; font-family: 宋体;">），构件的实现类可以为普通的</span><span style="font-size: 12pt;" lang="EN-US">Java
Bean</span><span style="font-size: 12pt; font-family: 宋体;">，而不需要强制实现某些接口或者方法。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">以框架为基础的方法，增加了构件的可复用性，也提高了系统设计和演化的柔性。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="4TimesNewRoman" style="margin-left: 51.55pt; text-indent: -42.55pt;"><a name="_Toc119800822"><!--[if !supportLists]--><span style="" lang="EN-US"><span style=""><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 黑体;">基于总线的方法</span></a></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">在基于构件的软件开发中，为了解决构件之间的数据交换，</span><span style="font-size: 12pt;" lang="EN-US">SUN</span><span style="font-size: 12pt; font-family: 宋体;">公司发布了</span><span style="font-size: 12pt;" lang="EN-US">InfoBus</span><span style="font-size: 12pt; font-family: 宋体;">标准用于构件的动态数据共享。</span><span style="font-size: 12pt;" lang="EN-US">InfoBus</span><span style="font-size: 12pt; font-family: 宋体;">符合</span><span style="font-size: 12pt;" lang="EN-US">100%</span><span style="font-size: 12pt; font-family: 宋体;">纯</span><span style="font-size: 12pt;" lang="EN-US">Java</span><span style="font-size: 12pt; font-family: 宋体;">认证标准，它允许通过定义少量的接口并声明使用这些接口的协议以在构件之间进行动态数据交换。在</span><span style="font-size: 12pt;" lang="EN-US">HTML</span><span style="font-size: 12pt; font-family: 宋体;">页面中的</span><span style="font-size: 12pt;" lang="EN-US">Applet</span><span style="font-size: 12pt; font-family: 宋体;">或者在</span><span style="font-size: 12pt;" lang="EN-US">JBuilder</span><span style="font-size: 12pt; font-family: 宋体;">环境中的为</span><span style="font-size: 12pt;" lang="EN-US">JavaBeans</span><span style="font-size: 12pt; font-family: 宋体;">都可以利用</span><span style="font-size: 12pt;" lang="EN-US">InfoBus</span><span style="font-size: 12pt; font-family: 宋体;">进行交互。</span><span style="font-size: 12pt;" lang="EN-US">InfoBus</span><span style="font-size: 12pt; font-family: 宋体;">也可以用于任意的</span><span style="font-size: 12pt;" lang="EN-US">Java</span><span style="font-size: 12pt; font-family: 宋体;">类，如</span><span style="font-size: 12pt;" lang="EN-US">Applet,Servlet</span><span style="font-size: 12pt; font-family: 宋体;">等等。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<span style="font-size: 12pt; font-family: 宋体;">基于总线的方法通过严格限制系统中使用的构件形式，尽可能地避免组装不匹配的问题出现。它通常清楚地说明</span><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">:</span><span style="font-size: 12pt; font-family: 宋体;">构件接口如何定义</span><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">;</span><span style="font-size: 12pt; font-family: 宋体;">何种数据实体可以在构件之间互换</span><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">:</span><span style="font-size: 12pt; font-family: 宋体;">构件之间的交互机制以及使用何种体系结构风格。基于总线的方法适用于特定的应用领域和体系结构的系统构造，它解决组装不匹配问题的能力有限，它的应用范围也是有限的。</span><img src ="http://www.blogjava.net/luoqx/aggbug/20417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luoqx/" target="_blank">publisher luo</a> 2005-11-18 12:38 <a href="http://www.blogjava.net/luoqx/archive/2005/11/18/20417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构件的定义</title><link>http://www.blogjava.net/luoqx/archive/2005/11/18/20416.html</link><dc:creator>publisher luo</dc:creator><author>publisher luo</author><pubDate>Fri, 18 Nov 2005 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/luoqx/archive/2005/11/18/20416.html</guid><wfw:comment>http://www.blogjava.net/luoqx/comments/20416.html</wfw:comment><comments>http://www.blogjava.net/luoqx/archive/2005/11/18/20416.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/luoqx/comments/commentRss/20416.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luoqx/services/trackbacks/20416.html</trackback:ping><description><![CDATA[
<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">构件（</span><span style="font-size: 12pt;" lang="EN-US">component</span><span style="font-size: 12pt; font-family: 宋体;">）就是使软件走向工业化的一种软件标准件，它是可复用的软件组成成份，他是可被用来快速构造其他软件的预制的特殊软件。它可以是被封装的对象类、类树、一些功能模块、软件框架（</span><span style="font-size: 12pt;" lang="EN-US">framwork</span><span style="font-size: 12pt; font-family: 宋体;">）、软件构架（或体系结构</span><span style="font-size: 12pt;" lang="EN-US">Architectural</span><span style="font-size: 12pt; font-family: 宋体;">）、文档、分析件、设计模式（</span><span style="font-size: 12pt;" lang="EN-US">Pattern</span><span style="font-size: 12pt; font-family: 宋体;">）等。构件分为构件类和构件实例，通过给出构件类的参数，生成实例，通过实例的组装和控制来构造相应的应用软件。其实质上是对已存在的软件开发知识</span><span style="font-size: 12pt;" lang="EN-US">(</span><span style="font-size: 12pt; font-family: 宋体;">开发过程和技能</span><span style="font-size: 12pt;" lang="EN-US">)</span><span style="font-size: 12pt; font-family: 宋体;">和软件开发各阶段的各种结果的重复使用。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">本系统中构件小粒度的对象类。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">构件的基本属性</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">从广义上来说，构件有如下的几个基本属性。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">①、构件是可独立配置的单元，因此构件必须自包容；</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">②、构件强调与环境和其他构件的分离，因此构件的实现是严格封装的，外界没机会或没必要知道构件内部的实现细节；</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">③、构件可以在适当的环境中被复合使用，因此构件需要提供清楚的接口规范，可以与环境交互；</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">④、构件不应当是持续的，即构件没有个体特有的属性，理解为构件不应当与自身副本区别。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">从以上四个属性可以看出，构件沿袭了对象的封装特性，但同时并不局限在一个对象，其内部可以封装一个或多个类、原型对象甚至过程，结构是灵活的。构件突出了自包容和被包容的特性，这就是在软件工厂的软件开发生产线上作为零件的必要特征。　　</span><span style="font-size: 12pt;" lang="EN-US"><br>
&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">构件的构造原则</span><span style="font-size: 12pt;" lang="EN-US"> <o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt;" lang="EN-US">&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">构件是给人们可复用的软件标准件，因此，构件必须由构件开发商预先开发、预先构造，构件提供商应该非常明确构件系统的目标、方向，确定构件的构造原则。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt;" lang="EN-US">&nbsp; </span><span style="font-size: 12pt; font-family: 宋体;">其基本原则是：一开始就把重用性作为初始设计的一个目标，所有构件的构造目的都是为组装其它应用所复用和共享。因此，从构件分析、设计到构件提取、描述、认证、测试、分类和入库，都必须围绕重用这个目的而进行。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 21pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">构造构件要遵循其它原则：</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">①、增强构件的可重用性需要提高抽象的级别，应有一套有关名字，异常操作，结构的标准。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">②、可理解性，必须伴随有完整、正确、易读的文档，具有完整的说明，有利重用。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">③、构件代表一个抽象，有很高的内聚力，提供一些所需的特定操作、属性、事件和方法接口。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">④、提高构件的重用程度，分离功能构件，将可变部分数据化、参数化，以适合不同的应用需求。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">⑤、构件的尺寸大小、复杂度适中。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>


<p class="MsoNormal" style="text-indent: 24pt; line-height: 20pt;"><span style="font-size: 12pt; font-family: 宋体;">⑥、构件要易于演化，数据与其结构是封装在一起的，数据存放在数据构件对象中，能主动解释其结构。</span></p>

<img src ="http://www.blogjava.net/luoqx/aggbug/20416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luoqx/" target="_blank">publisher luo</a> 2005-11-18 12:30 <a href="http://www.blogjava.net/luoqx/archive/2005/11/18/20416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>