LoveUnix » 行业应用 项目实施 » [原]面向构件技术的一些思考
让LU留住您的每

一天 让LU博客留住您的每一天
2004-9-30 16:53 threehair
面向构件技术的特色在于:迅速、灵活、简洁,曾经提出&quot;没有银弹”的Frederick Brooks后来表示构件技术就是软件行业的银弹。从中可以看出对构件技术寄予何等的期望.<br /><br />1 面向构件技术是软件业发展的需要<br />面向构件技术之于软件业的意义正如由生产流水线之于工业制造,是软件业发展的必然趋势。软件业发展到今天,已经不是那种个人花费一段时间即可完成的小软件。软件越来越复杂,时间越来越短,软件代码也从几百行到现在的上百万行。把这些代码分解成一些构件完成,可以减少软件系统中的变化因子。<br /><br />2 面向构件技术的基础<br />世界著名科学家牛顿说过他是站在巨人的肩膀上。面向构件技术的思想基础在软件复用,技术基础是根据软件复用思想设计的众多构件。面向构件将软件系统开发的重心移向如何把应用系统分解成稳定、灵活、可重用的构件喝如何利用已有构件库组装出随需而变的应用软件。<br /><br />3基于面向构件技术的系统组成<br />系统=框架+构件+组建<br />框架是所有构件的支撑框架;每个构件实现系统的每个具体功能;组建,可以视为构件的插入顺序,不同构件的组成顺序不同,其实现的整体功能也就不同<br /><br />4 结构化设计、面向对象技术和面向对象构件技术<br />三种技术各有特点,软件设计中选取何种技术,根据实际情况,如软件系统特点、规模、技术现状等等。甚至只要有需要有可能,你可以选取其中的一种、两种甚至同时使用三种,又有何不可?<br />举个例子,在系统分析过程中,采用面向对象技术,将整个系统分解成各个对象,分别设计;在各个对象的分析设计中,找出可复用部分,采用面向构件技术设计;在特定部分,采用结构化设计。<br /><br />5面向构件技术的瓶颈<br />(1)构件的质量<br />面向构件的软件开发技术将系统分解成不同的构件,因此,构件是否高效稳定势必影响整个系统性能。<br /><br />(2)标准化和知识产权限制了构件的复用<br />标准化和知识产权分别从技术角度和法律角度限制了构件的复用。如何让构件得以更好的储存复用,降低劳动重复劳动量应该从这两方面考虑。<br /><br />(3)应用框架技术还不够成熟完善<br /><br /><br />(4)关于构件组建技术<br />要把珍珠串成项链,选择牢固可用的链子是重要的。同样的,如何把独立的构件组建成一个可用系统,组建技术同样也是举足轻重的。<br /><br />6 面向构件技术的发展<br />在我的想法中,面向构件技术将把软件开发分成几种:框架开发设计、构件开发设计、组装<br />如果用现代的工业生产做比喻,框架设计就是基本的生产机器的开发研究,构件开发就是零件的生产,组装就是把零件组装成汽车、飞机等等各种产品。<br /><br />7 面向构件开发的不足之处<br />(1)系统资源耗费<br />从软件性能角度看,用面向构件技术开发的软件并不是最佳的。除了有可能的代码冗余外,因为它的灵活性在很大程度上是以空间和时间等为代价实现的。(但与硬件的发展和硬件成本降低,这个问题可以说不算问题。)<br /><br />(2)面向构件开发的风险<br />从细节来看,构件将构件的实现细节完全封装,如果没有好的文档支持,有可能导致构件的使用结果不是使用者预期的。比如,构件使用者对某构件的出错机制认识不够<br /><br /><br /><br />8 面向构件技术不是唯一和永远的银弹<br />没有放之四海皆准的真理。面向构件技术同样不是软件业唯一和永远的银弹。<br />未来,站在面向构件技术这个巨人的肩膀上又将发展出何种软件技术?<br /><br /><br />附:<br />关于框架,可以看《框架不是框框—应用框架的基本思想》<br /><a href='http://www.loveunix.net/bbs/index.php?showtopic=123' target='_blank'>http://www.loveunix.net/bbs/index.php?showtopic=123</a>

2004-9-30 16:54 threehair
仅仅是初稿,等假期过完之后,再修改。另外准备等过完假期,写篇过于面向构件技术应用用例方面的东西。希望大家提意见或者踊跃讨论。

2004-10-8 10:59 seven
学习<!--emo&:)--><img src='style_emoticons/default/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo-->

2004-10-8 17:15 thrips
waiting......<br /><br /> <!--emo&:haha:--><img src='style_emoticons/default/haha.gif' border='0' style='vertical-align:middle' alt='haha.gif' /><!--endemo-->

2004-10-9 17:47 threehair
哦只是纸上谈兵而已,没有实践经验。需要大家一起学习讨论

2004-10-9 18:01 threehair
另附:<br /><a href='http://www.uml.org.cn/zjjs/zjjs31.htm' target='_blank'>http://www.uml.org.cn/zjjs/zjjs31.htm</a><br />让设计与分析重用-—基于构件开发的应用框架设计 <br />(清华大学 谢晓芹 柳西玲) <br />框架必须是健壮的、可扩展的、灵活的,且支持动态内容,它要求基于开放或共享标准。框架的设计要力求做到:完备性、灵活性、可扩展性、可理解性,同时抽象能用于不同的场合;用户能轻松地添加和修改功能,定制框架;用户和框架的交互清晰,文档齐全。框架设计的一个核心问题就是发现可重用的设计和“热点”,以保证框架具备充分的灵活性,使用户能在已有构件的基础上生成应用程序,实现“零代码编写”的理想目标。 <br /><br />一、如何设计应用框架? <br /><br />目前在框架设计方面成熟的技术较少,大体可分为两类:实践法与系统法。 <br /><br />1. 实践法 <br /><br />许多专家甚至认为框架不可能是系统设计的结果,而只是在从底向上设计中的一个结果。实践法也可以说是实例(Example)驱动的设计方法,它是从若干个具体的典型应用中,抽象出相似点来构建框架,框架反过来又应用于不同的问题,并在解决不同问题的过程中得到更新,在框架的设计和实现的两步中,不断反复。等到框架逐渐成熟时,需要修改和反复的内容就会越来越少。 <br /><br />具体步骤为: <br /><br />分析问题领域,确定所需框架。从一类应用而不是单个的程序去分析、比较各种不同的软件解决方案,寻求这些方案的共性和每个程序的唯一性特征。这些共性,尤其是那些经常被多个程序使用的部分将成为框架的基础。然后定义框架体系结构并设计,包括设计用户与框架间的交互、给用户提供的最终工具等。 <br /><br /> <br /><br />框架的实现。包括框架核心类的实现、框架的测试、框架的试运行、框架的反复更新。 <br />框架的部署。包括文档的提供、分发过程,为用户提供技术支持,维护和更新框架。 <br />这种方法也就是先在具体类基础上进行泛化,提取出抽象类。抽象化也是框架开发的一个关键。不过,根据这种方法设计出的框架的可适用性很大程度上依赖于其基于的具体应用。 <br /><br />由于框架的开发具有反复性,且需要深入了解应用领域,因此框架的开发很难按进度表进行。框架的设计者也需要和应用开发者紧密合作,因为框架只有在使用它开发应用的过程中才能发现其哪些部分有待改进。 <br /><br />2. 系统法 <br /><br />由于有人认为框架的设计也可以通过系统的方法得到,因此人们提出了逐步泛化的框架设计方法。此时框架的设计分两步: <br /><br />第一步是问题的泛化。它要求解决如下问题:问题领域中的哪些概念可以表现为变量,并且需要统一处理?是否可以发现一些具体的概念,它们能被泛化为一个更抽象的概念? <br /><br />第二步是框架的设计。在这一步中,泛化是从反向考虑,以实现每一级的框架。换言之,最先实现最通用的框架,然后实现次通用的框架,以此类推。如图1所示, 其中,框架0就是最终要实现的框架。 <br /><img src='http://www.uml.org.cn/zjjs/images/b02_6t1.jpg' border='0' alt='user posted image' /><br />这一步需要解决如下问题:系统的哪一部分可能需要改变?用户需要在什么地方向框架中加入自己的代码? <br /><br />采用两步的设计方法可以避免在早期的开发过程中局限于应用专用的类和体系结构,并且有利于使用通用的设计模式。 <br /><br />框架的设计是一个反复的过程,在这个过程中需要领域和设计两方面的专家意见,框架用户和框架开发者之间的交流对框架的设计也很重要,因为框架是在不断反复的过程中逐步成熟的。 <br /><br />3. 框架设计与应用设计 <br /><br />框架的设计和应用的设计到底有何不同?一般而言,两者的侧重点不同。设计应用系统时,要求对专用领域的重要概念有深入的了解。这些概念通过建模演变成类,并作为实现整个应用的构建块。而设计框架时,重点在识别出必须具备灵活性的地方,也就是“热点”,这也是框架的关键所在。 <br /><br />构件库系统基于框架而不是具体的类,使得构件库系统的使用更具灵活性。但在框架基础上构建具体的应用时, 类的使用和开发总是随之而来,在框架上生成应用可以通过创建子类、配置各构件对象、调整实例等来获得。 <br /><br />4. 框架文档 <br /><br />文档必须包括如下内容:框架的目的,如何使用框架,框架的设计细节等。 <br /><br />二、框架采用哪些支持工具? <br /><br />一般而言,没有支持工具的框架很难被使用。任何一个框架的提出总是配有一系列工具软件,这样基于框架的应用开发才切实可行。这些工具允许用户与应用框架交互、配置和构筑新的应用。下列工具通常被使用: <br /><br />浏览工具 用户可以利用它浏览框架的类层次结构等信息。 <br />编辑工具 用户用来调整和修改框架元素的属性等,如修改类或构件等。 <br />帮助系统 为用户使用本框架系统提供向导功能,如可以采用HTML格式。 <br />测试系统 用来测试生成的应用系统,通常支持仿真操作。 <br />文档工具 帮助创建应用系统的文档,如Javadoc工具。理解并学会使用框架是一件费时的工作,这也是框架设计方法的唯一不足之处,因此要求框架的文档必须齐备。 <br />配置管理工具 使用框架而不是具体的对象虽然提供了复用性,但它同时也带来了开发上的复杂性。框架内包含各种构件或构件库,一个框架可能需要和其他框架通信。一个框架也可能由其他子框架系统组成,这样一种组成结构必然提出配置管理的问题。例如,如何在多个框架内共享构件?如何由构件或子框架组装新框架?框架内的构件如何通信与协作?不同的框架间如何交互? <br />使用这些高级工具的最终目的就是减少编码和记忆的工作量,简化用户的操作。理想情况下,用户可以不用编一句代码而实现新系统的构建。例如,在一可视化界面上,通过选取一些图标就能生成可执行程序。目前已有一些类似的工具,如University of Geneva开发的Vista系统。 <br /><br />三、都有哪些著名的框架系统? <br /><br />目前有许多框架系统,例如用户界面方面的框架有MVC、ET++等,其中ET++采用C++语言实现,运行于Unix等系统中;针对其他领域的则有FOIBLE、MacApp、FACE (Framework Adaptive Composition Environment)等。 <br /><br />早期一些框架系统多采用传统的面向过程语言实现,现在面向对象语言为软件和设计的重用提供了更强有力的支持。由于框架开发的学习曲线较复杂,因此框架开发的语言最好能对框架的文档建立提供有效的方法;框架的使用要求开发语言具备高可移植性;框架的设计其实也是一些高层的决策,很自然采用高级语言来实现。Java语言由于具有平台独立性以及轻量级的链接过程、自动垃圾回收、简单语言结构、标准软件包、面向对象等特性,因此可以说Java是进行框架构筑的合适语言。现在市场上已出现了许多采用Java语言编写的框架系统。 <br /><br />LEC India Software Centre Pvt. Ltd.公司研制了一个面向EJB 构件的应用框架系统。它主要面向基于EJB的应用程序,是一个服务器端的框架,能在EJB构件的开发中解决稳定性以及其他一些企业级的特性等问题。 <br /><br />现在又出现了许多采用J2EE编程环境的应用框架,如Pacific技术服务公司开发的一套多层框架,能用来开发Web应用服务器;Jcorporate公司开发的Expresso Framework是一使用java来建造分布式、重用、基于构件的安全的Web应用程序的应用框架。 <br /><br />四、 如何设计知识工程应用框架? <br /><br />在知识爆炸的时代,如何从数据中提取信息,从信息中提取知识已成为一个重要的应用领域。越来越多的知识处理应用系统急待开发,若能有一个成熟可靠的知识处理框架系统,将大大加快此类应用系统的开发。针对这种情况,清华大学知识工程研究室结合自己的经验,目前提出了在知识工程应用领域的框架,主要针对网络计算模式下的知识获取、传输、管理和应用,基于Web的数据挖掘与知识发现等内容,所有的代码均采用Java实现。 <br /><br />将应用框架结构化为框架的框架,划分为如下三个子框架: <br /><br />(1) 领域专用构件框架:提供领域专用的构件模型集合,并为分层的构件模型提供统一接口。 <br /><br />(2) 可视化组装框架:提供整个框架系统的图形化界面,并为可视化组装和操作构件提供工具。 <br /><br />(3) 连接框架:为构件间的交互、通信提供机制。 <br /><br />框架内各构件的分布如图2所示。 <br /><br /><img src='http://www.uml.org.cn/zjjs/images/b02_6t2.jpg' border='0' alt='user posted image' /><br />建立的基于框架的构件系统具有如下性能: <br /><br /> <br /><br />实现面向产品化、实用性的构件库系统,并具开放性、可扩展性;<br /><br />支持异构环境中的框架、构件的互联和通信;<br /><br />实现新旧系统的兼容性;<br /><br />提供一致的接口分配;<br /><br />遵循重要构件标准(如CORBA);<br /><br />构件具有透明本地化、平台无关性特点;<br /><br />系统的配置、数据交换基于XML和Java的标准化格式;<br /><br />支持个性化信息服务定制和可重构。<br /><br />良好的用户学习曲线。 <br />框架的设计本身也是一个循环迭代的过程,它在不断应用于实践的过程中,得到更新和提高。我们也在不断的完善这套系统。目前一些公用构件如电子表单自动生成系统、数据提取和文件转换系统等作为大粒度构件已得到广泛使用。 <br /><br />框架能使应用程序的开发简单,价格低廉,但是开发框架不是一件容易的事。它是一个需要领域和设计经验的反复过程。为了保证框架的灵活性,必须提取和发现热点。设计模式可以简化这个过程,因为它提供了对过去经验的抽象。应用框架能高度抽象同一领域内的问题,进而降低开发难度和强度。虽然框架和构件技术已经出现许多年了,开始走入实用,但还不成熟,有大量问题有待研究。

2004-10-9 18:04 symbian
如果使用c++builder的话 那可以体会到使用构件开发的快速性<br /><br />开发界面只需要很少的代码就可以完成

2004-10-9 18:05 symbian
代码的可重用是提高开发速度 保证代码质量的一个方法 <br /><br />但通常情况下 每个相同的功能都会有点不同的具体要求 所以如果想可重用还是需要考虑到可扩展性

2004-10-11 08:47 threehair
<!--QuoteBegin-symbian+2004-10-09 18:04:01--><div class='quotetop'>QUOTE(symbian @ 2004-10-09 18:04:01)</div><div class='quotemain'><!--QuoteEBegin-->如果使用c++builder的话 那可以体会到使用构件开发的快速性<br /><br />开发界面只需要很少的代码就可以完成<br />[right][snapback]396029[/snapback][/right]<br /><!--QuoteEnd--></div><!--QuoteEEnd--><br /><br />C++ builder 我没用过。但是我想其设计思路应该与PB、VB、VC等类似,在某种程度上实现复用。<br />但是构件开发应该是更深层次意义上的构件开发,最佳效果是实现零编码,也就是复用之最。

2004-10-11 09:16 threehair
<!--QuoteBegin-symbian+2004-10-09 18:05:38--><div class='quotetop'>QUOTE(symbian @ 2004-10-09 18:05:38)</div><div class='quotemain'><!--QuoteEBegin-->代码的可重用是提高开发速度 保证代码质量的一个方法 <br /><br />但通常情况下 每个相同的功能都会有点不同的具体要求 所以如果想可重用还是需要考虑到可扩展性<br />[right][snapback]396030[/snapback][/right]<br /><!--QuoteEnd--></div><!--QuoteEEnd--><br /><br />传统意义上的模块开发侧重于整个模块的完整功能,在某种意义上,一个模块即可形成单独执行,实现某个功能;<br />但是构件应该侧重的是其可复用性,灵活的特色。单独一个构件也许根本意义不大,它的特色就在于组合。<br />据个例子,以下内容就可以形成独立构件:<br />A if <br />B else <br />C end<br />E 应用构件,假定返回返回值 1 成功 -1 失败<br />F 出错处理模块<br /><br />哦可以组建以上构件: A E B F C<br />以上构件A、B、C 单独并没有其他意义,但是他们和其他构件组合即可实现其他功能。<br />

2004-10-11 09:25 threehair
<br /><br />我觉得构件可以分为两类:基础构件和应用构件<br />基础构件实现的是一些基本功能,应该是通用的;而应用构件实现的是应用级功能,这个根据不同行业领域不同用户设计。<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->但通常情况下 每个相同的功能都会有点不同的具体要求<!--QuoteEnd--></div><!--QuoteEEnd-->这个不同具体要求,在某个特定范围内,应该是不存在的。<br />

2004-10-11 13:03 流氓无产者
晕菜

2004-10-11 18:54 无双
零代码不可能吧<br /><br />其实我的意思就是 某个具体功能后面可能还是需要其它的小功能<br /><br />如我现在开发了一个telnet服务器<br /><br />准备使用telnet控件<br /><br />这时 可能需求是每用户一线程 也可能是多用户一线程 <br /><br />后面可能还有的需要独立log<br /><br />或是对不同的用户限制不同的流量 <br /><br />或是使用其它认证方法<br /><br />还有其它的需求 可能一开始你并没有想到 <br /><br />但后面发现不得不考虑并修改代码<br /><br />这时原来的可重用性就没有什么意义了 <br />

2004-10-11 19:07 threehair
目前的确不行。以后我不敢说。<br />所以我说它是复用的最佳效果,一种追求境界

2004-10-11 19:20 threehair
<!--QuoteBegin-无双+2004-10-11 18:54:56--><div class='quotetop'>QUOTE(无双 @ 2004-10-11 18:54:56)</div><div class='quotemain'><!--QuoteEBegin-->零代码不可能吧<br /><br />其实我的意思就是 某个具体功能后面可能还是需要其它的小功能<br /><br />如我现在开发了一个telnet服务器<br /><br />准备使用telnet控件<br /><br />这时 可能需求是每用户一线程 也可能是多用户一线程 <br /><br />后面可能还有的需要独立log<br /><br />或是对不同的用户限制不同的流量 <br /><br />或是使用其它认证方法<br /><br />还有其它的需求 可能一开始你并没有想到 <br /><br />但后面发现不得不考虑并修改代码<br /><br />这时原来的可重用性就没有什么意义了<br />[right][snapback]397343[/snapback][/right]<br /><!--QuoteEnd--></div><!--QuoteEEnd--><br /><br />嘿嘿,想做一个好构件,必然要考虑到复用性和扩展性。如果需要重新修改代码,不能算一个高质量构件。设计构件自然要考虑实际中的可变因素,换个角度,既然不能确定是常量,自然要采用变量。<br />而且构件并不是控件,我未必要在一个构件中完成所有的你想要的功能,如果分解更有利于复用,那么不妨分成几个控件实现。<br />

2004-10-12 07:13 thrips
偶也同意。<br />控件要小而精,能够独立体现一个概念,而且能够和其他控件灵活组合。这样就是有需求变动,修改的面也最小。<br />btw: 有没有用c来实现的相关方面的书介绍介绍?

2004-10-12 08:09 threehair
我也正在收集相关方面的资料,希望能用面向构件方面编程来实现目前的工作。不过遇到一些问题。对于系统的整体设计我有思路,但是缺乏框架方面的资料。<br />

2004-10-12 08:35 thrips
偶也是。虽然不可能全盘改造,但是受够了老系统的苦,总是想做些改善,减少一点重复劳动。<br />想法我也有,就是缺少实现的手段,也就比较实用的框架结构,自己做的总是太老土了。

2004-10-12 09:11 threehair
有机会可以交流一下心得。 <!--emo&:grin:--><img src='style_emoticons/default/grin.gif' border='0' style='vertical-align:middle' alt='grin.gif' /><!--endemo--> <br />

2004-10-13 19:13 threehair
终于大致完成。

2004-12-23 13:22 衣风
我知道国内有个很不错的面向构件的产品叫EOS,目前该产品支持J2EE环境,包括了面向构件的框架(EOS Server),以及支持框架的IDE开发环境(EOS Studio),还有很多基础的构件(EOS Component)。主要的技术思路和特点如下:<br />1、将应用软件横向和纵向切割,从纵向上,软件从上至下细分为页面逻辑(各种页面片断、JS和标签)、展现逻辑(实现页面的流转)、业务逻辑(实现应用的逻辑处理,如用户登录的过程)、运算逻辑(实现基本的计算操作,如数据库增、删、改、查、数学计算等等)、数据逻辑等多个层次,每个层次采用构件化的思想进行封装,上层能够调用下层的逻辑,一个应用模块有不同层次的逻辑打包形成一个构件包。从横向角度,多个构件包之间松散耦合,又可以通过构件接口进行互操作<br />2、提供的IDE工具可以实现上叙各个层次逻辑的开发,同时也实现了构件包的管理和复用。由于产品提供了大量运算逻辑层的构件,基本满足应用中对基本操作层的需求,所以开发时完全颠覆原有基于CODE编程的模式,采用图形化工具托拽形成各种逻辑,简化了构件复用中复杂的接口关系<br />3、应用运行时为标准的J2EE应用,需要J2EE应用服务器的支持,不屏蔽J2EE任何技术特性,另外提供了对构件运行时的监控管理,可以方便直观的了解构件运行的状况,如运行效率等<br /><br />技术特点:<br />1、完全的面向构件编程:从纵向上,通过组装低层次构件形成高层次构件,最终形成构件包(相当于应用模块),多个构件包组装形成最终应用<br />2、图形化的构件复用方式:通过集成化的开发环境以图形化方式实现构件的组装,降低构件组装的复杂度,大大提供了构件组装的效率。<br /><br />据了解,该产品已经成功应用于各个行业,在用户中引起强烈震撼。尽管该产品还存在某些不足(如页面构件的开发还不是很方便、基础构件资源的积累还有待进一步丰富),但产品代表着软件技术发展的趋势和潮流,相信假以时日,一定会成为软件业一颗璀璨的明珠。更重要的是,作为民族自有版权的软件,也会得到更多国人的支持!<br /><br />补充:EOS是上海一家叫普元的公司的产品,据了解,近期将会推出功能更加强大集成度更高的5.0版本,值得期待~!<br /><br />

2004-12-24 09:32 threehair
去过这个公司的网站。<br />遗憾的是不适合哦的开发环境。

2005-1-21 17:11 aimetu
某甲常用洗衣板洗衣服,他一直梦想怎么才能实现自动洗衣服,他也想了很多能够实现自动洗衣的方法。当一台全自动洗衣机放在他面前的时候,他却说这不适合我洗衣服的流程:) <!--emo&^_^--><img src='style_emoticons/default/happy.gif' border='0' style='vertical-align:middle' alt='happy.gif' /><!--endemo-->

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.