(计算机应用技术专业论文)可视化集成开发环境研究.pdf_第1页
(计算机应用技术专业论文)可视化集成开发环境研究.pdf_第2页
(计算机应用技术专业论文)可视化集成开发环境研究.pdf_第3页
(计算机应用技术专业论文)可视化集成开发环境研究.pdf_第4页
(计算机应用技术专业论文)可视化集成开发环境研究.pdf_第5页
已阅读5页,还剩91页未读 继续免费阅读

(计算机应用技术专业论文)可视化集成开发环境研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学硕士学位论文 摘要 现在人们对软件功能的要求越来越高,软件的编写越来越复杂,软件的 规模越来越大,动辄数百万行乃至数千万行代码,用简单的文本编辑器编写 代码,效率低下,不容易维护及调试,已经不能满足程序员的需要现在的软 件大多通过图形界面来实现人机交互,但实现图形界面将需要编写大量的代 码,控件的位置、颜色不容易确定。因此开发一个好的集成开发环境( 1 d e ) 以提高编程效率具有非常重要的意义。本课题的研究内容就是如何开发一个 多功能的集成开发环境。 集成开发环境为程序员的编程提供了很大的方便,大大提高了编程效率。 集成开发环境应该表现为:一是支持多种语言源程序的开发,二是文本的编 辑与文档管理功能,三是自动生成部分源代码,尤其是界面设计的源代码。 本课题在充分剖析现有的典型可视化编程环境的基础上,开发实现了一个集 成的可视化编程工具,实现了c # 和v b 两种编程语言工具的集成,具有文档 管理的基本功能和c 静与v b 的部分源代码自动生成功能。 本文首先对集成开发环境的现状进行了分析,接着介绍了本集成开发环 境所采用的设计模式及设计结构。接着介绍了本集成开发环境的核心功能, 主要研究了a d d i n 树的结构及实现,并主要介绍了采用a d d i 树的优点,介 绍了条件的管理,插件的管理,属性的管理。文档管理模块主要介绍了文档 管理的实现,首先介绍了文本存储的数据结构:间隙缓冲结构,接着介绍了 文本行的表示,插入符和选择管理,接着介绍了高亮显示功能的实现。代码 自动生成模块介绍了代码自动生成的实现原理,首先介绍了设计器的结构, 包括工具箱,设计区域和属性网格,接着介绍了设计器的实现原理,代码生 成的实现原理。本文最后总结了本集成开发环境的优缺点,并与当今流行的 集成开发环境作了比较,总结了自己的项目体会及今后需要改进的地方。 关键词:插件,文本,代码自动生成 武汉理工大学硕士学位论文 a b s t r a c t n o w a d a y s ,t h cp e o p l e sr e q u c s tt 0t l l cs o f t w a r ef u n c t i o ni sm o f ea n dm o r e t l i g h ,t h es o f t w a r eb e c o m em o r ea n dm o r ec o m p l i c a t e d ,t h es c a l eo ft h es o f t w a r ei s m o r e 衄dm o r cb i g ,s o f t w a r e f r e q u e n t l yi n c l u d em i l l i o n so fl i n e so re v e nm o r e , u s i n gt h es i m p l cn o t e p a dt 0e d i t o rc o d e ,t h ec f f i c i e n c yi sl o w l y ,0 te a s y m a i n t c n a n c ca n d d c b u g ,i th a v ea l r e a d yc a n t ts a t i s f yt h ed e m a do f t h e p r 0 掣a m m c f t h cs o f t w a r co fn o wo f t e nu s c 擎a p h i cu s e ri n t e r f a c e b u tc a r r yo u t t l l eg r 叩h iu s e ri n t e r f a c ew i l ln e e di ow r i t eag r e a td e a l0 fc o d e ,c o n t f o l o ri sn o t e a s yt oa s s u r a n c et h ep o s i t i o n ,c o l o f t h e r c f o r ed c v e l o pa nj n t e g e m t e d d c 、,e l o p m e n tc n v i r o n m c n t ( i d b ) t op r o m o t et h ee f f i c i e n c yo fw r i t es o f t w a r ei s v e r yi m p o r t a l i t 1 h ep a p c fi sc o n c 咖e dh o wt od e v e i o pam u l t i f i l n c t i o n l y i n t e g r a t e dd e v e l o p m e n te n v i 柏衄c n t a i i 坦p r o v i d ec o n v e n i e n c c0 fw r i t i n gs o f t w a r et op m g r a m m e f ,i tp r o m o t e t h ec f f i c i e n c yo f d c v e l o ps o 腑a f c a ni d es h o u l dh a v et h e s ef n c t i 0 璐:f i r s ti tc 锄 s u r p o r tk i n d so f1 a n g u a g e s e c o n di tp r o v i d et h ed o c u m e n tc d i t i o na n dm a n a g e m e n t t h i r di tc 蛐g e n e n t cs o m ec o d c ,e s p e c i a l l yw h c d c v e l o pu s e ri m c r f a c e a 矗e fs t u d y s 口m eo fv i s u a l a b ei d e ,w ed c v e l o p 姐v i s u a l a b l ci d ew h i c hc 壮d e v e l o pc 撑蛆d v bl a n g u a g e hc 柚a u t og c n e r a t o rs o m ec o d c t h i sp a p c rf i r s u yd 璐c r i b e dt h cs i t u a t i o n0 ft h ed e v e l o p m e n to f e ,t h e n i n t r o d e c et h ed c s i g np a t t c m sa n da i 吐i t e c t u r e0 ft h ci d e ,m a i n l yd c s c r i b et h e a d d k m c e sd a t as t n i c t u f e 强di t si m p l c m 如t i 伽,a n dd e s c r i b ct h ca d v a n c eo f u s i n ga d d i n t r e e ,d e s c r i b ct h ec o n d i t i o n ,p l u g i n 黼dp r o p e f t ym a n a g e m e n t t h c d o c u m e n t m a n a g c m e n tp a ni n t r o d u c e s t h ed o c u m e n tm a n a g c m e t,f i r s ti t i n t r o d u c et h et h es t o 姐g ed a t as t m c t u f eo ft c x t :g a pb u 恤r ,t h e ni ti n t r o d u c et h e l i n em a n a g e m e n t ,c a r e ta n ds e l e c t i o nm a n a g e m e n t t h e ni n t r o d u c et h ec o d e h i g h - l i 曲t i n gf u n c t i o n f h ec o d ea u t o g e e f a t ep a f td e s c f i b et h ep f i n c i p l eo ft h e a u t o g e n e r a t i o no f c o d e i t f i r s t l yi n t r o d u c i g t h e t h cs t n l c t u r eo ft h e d e s i g n e f ,i n c l u d et h et o o lb o x ,d e s i g na r e aa n dp r o p e r t yt a b l e ,t h e i n n o d u c e dt h e i m p l e m e n to ft h ed e s i g n e r ,t h ep r i n c i p i eo fc o d ea u t 0 一g e n e r a t i o n a te n d ,t h i s i i 武汉理工大学硕士学位论文 p a p e rs u m m a r yt h ea d v a n c ea n dd i s a d v a n c e0 ft h ee n v i r o n m e n t ,a n dc o m p a r ei t w i t ht h ep r e s e n tp o p u l a ri d e,a n ds u m m a r yt h ee x p e f i e n c eo ft h ep r o j e c ta n dt h e e e dt oi m p r o v e k e yw o r d s :a d d i n ,d o c u m e n t ,a u t o - g e n e f a t ec o d e l i l 武汉理工大学硕士学位论文 第1 章引言 现在人们对软件功能的要求越来越高,软件的编写越来越复杂,软件的规 模越来越大,动辄数百万行乃至数千万行代码,用简单的文本编辑器编写代 码效率低下,不容易维护及调试,已经不能满足程序员的要求。现在的软件 大多通过图形界面来实现人机交互,但实现图形界面将需要大量的代码,如 何能够自动生成相关代码以提高工作效率显得极为重要。世界一些大的软件 开发公司对此投入巨资进行研究开发。 1 1 研究的意义 计算机的诞生大大方便了人们的生活,使人们从繁杂的事情脱离出来。 但是随着软件规模的增加,用简单的文本编辑器编写的代码不容易阅读,软 件维护也很困难,如下两种格式: 代码2 : m a i n ( ) i n t i = o : i f ( i = = o ) f e t u m 0 : ) c l s e r e t u r n1 : ) ) 显然代码2 的可读性要远远好于代码l 的可读性,因此代码的自动缩进 和高亮显示是非常重要的功能。 现在人们对软件界面的要求也越来越高,过去那种通过命令行来实现人 机交互已经不能满足用户的需要,现在大多数的软件都采用图形界面来实现 人机交互。但是,众所周知生成图形界面,单凭手工输入代码,工作量大, 不直观,控件的位置不容易定位,字体的大小,颜色不容易控制。如果能够 一。一一。,|。, 武汉理工大学硕士学位论文 通过在设计窗体中拖放控件来自动生成相关代码,并能够通过更改其属性来 改变控件字体大小及控件的颜色将极大的提高工作效率【7 1 。如图1 11 图1 1 窗体设计豁 现在国际一些大的软件开发公司纷纷投入巨资研究实现这一功能,其意 义是不言而喻的。本课题也研究其实现原理。 1 2 国内外研究的现状 国外的一些软件巨头投入大量的人力物力进行集成开发环境的开发。微 软、i 阴等软件公司开发出来的集成开发环境己成为程序员编程的必备工具, 现在程序员编程几乎都在用他们的产品,我国对这一领域几乎是空白,都被 美国的一些软件公司所垄断。 随着开源运动的蓬勃兴起。涌现了一些好的免费的集成开发环境,譬如 大家熟悉的e c l i p s e 。由于e c l i p s e 开放源代码,功能强大,开发p l u g i n ( 插 件) 也非常方便,很多公司基于e c l i p s e 开发自己的插件,免费的和收费的 都很多。国内一些j a v a 技术开发公司,也在e c l i p s e 平台上开发自己的插件。 目前国内的公司,例如迈思科技有限公司开发的m a g i cc + + “”在l i n u x 和u n i x 平台上拥有一定的市场份额,但在w i n d o w s 平台上几乎没有国内的产品,因 此开发自己的集成开发环境显得尤为重要。 2 武汉理工大学硕士学位论文 1 3 本课题研究的主要内容 本课题研究的集成开发环境提供了代码的自动缩进,关键字颜色变化等 编辑功能,方便程序员的编程工作。开发w i n d o w s 程序时通过在窗体设计器 中拖放控件来自动生成相关界顽代码以提高工作效率,具备了一个集成开发 环境最重要的两大功能。 1 3 1 文档管理 由于简单的文本编辑器不能满足大规模的程序设计,因此提供一个好的 文档管理器是一个集成开发环境基本的要求。我们提供的文档管理器与大家 熟悉的字处理软件,例如w o r d 等,在功能的要求上有所不同,它主要的功能 是满足程序员的需求。因此其基本功能应包括: 1 ) 关键字的高亮显示 2 ) 代码的自动缩进 1 3 2 代码自动生成 好的软件都要有好的用户界面,而大家知道编写用户界面代码量大,要 处理许多与业务逻辑无关的琐碎的事情,如何把这一功能让计算机自己生成, 从而提高编程效率也很重要。 大家都已熟悉的s u a ls t u d i o 就提供了这一功能,通过在窗体设计器上 拖放控件而自动生成一些代码以免手工输入,大大提高了工作效率。本集成 开发环境也提供此功能。 此功能包括以下几方面: 1 ) 窗体设计器服务 主要实现窗体设计器的功能 2 ) 工具箱服务 该服务封装了针对设计器基础结构的工具箱功能 3 ) 菜单命令服务 菜单命令服务用于在设计区域中显示上下文菜单。 4 ) 代码自动生成 实现用户界面的代码自动生成。 3 武汉理工大学硕士学位论文 第2 章体系结构设计 现在好的软件都设计成m v c 模型“,将数据和数据的表示分开,使软件 更灵活,易于扩展。我们也采用晰c 模型,将数据和数据的显示分离。传统 上与u i ( 用户界面) 无关的部分h q 做模型,与用户界面相关的内容分为两部 分:视图和控制器。 视图的功能就是把数据显示给用户“1 。程序的这一部分就是在程序窗口 绘制图片和显示文字。视图通过模型得到要显示的数据。 控制器的功能是接受并解释用户的输入n 1 ,控制器把原始输入转换成模 型可以理解的形式然后调用视图刷新显示。 豳2 一l 体系结构 从图2 1 可知道,控制器往往位于视图和模型之间,并与两者保持通迅。 要显示数据,视图必须读模型;它不更改模型,所以视图与模型之间的通讯 是单向的。 2 1 整体结构 展性: 本集成开发环境采用一种被称为a d d i n t r e e 的结构o ,整个结构极具扩 4 武汉理工大学硕士学位论文 图2 2 a d d i i l ,t r e e 如果要扩展新的功能只需将模块挂接在a d d i n t r e e 上既可。 2 2 设计模式 设计模式是人们在软件开发的过程中总结出来用于提高软件的扩展性和 复用性的方法“。要使软件的结构易于维护,具有可扩展性,采用一些设计模 式是必须的。本集成开发环境主要使用了以下几种设计模式: 2 2 1s in g ie t o n 模式 s i n g l e t o n 模式是一种面向全局变量创建的方法,确保在运行时只有一个 实例,提供一个全局访问点。本集成开发环境中的的一些服务功能,例如工 具箱服务,窗体设计器服务等使用了s i n 9 1 e t o n 模式。例如: c l a s st o o l s e r v e r p u b l i cc o n t r o lg e t c o n t r o l ( ) r e t u r nc o n t r o l : 5 武汉理工大学硕士学位论文 s t a t i ct o o l s e r v e rt o o l s e r v e r = n e wt 0 0 1 s e r v e r ( ) : p u b l i cs t a t i ct o o l s e r v e rs i n 9 1 e t o n t o o l s e r v e r g e t r e t u r nt o o1s e r v e r : t o o l s e r v e r 类只有私有构造函数,这样就不能在t o o l s e r v e r 类之外创建 对象,从而确保只有一个这样的对象。 2 2 2d e c o r a t o r 模式 d e c o r a t o r 模式在运行时为对象添加功能,它从一个接口继承而来,并扩 展和实现了该接口的全部实现和方法。它接收在构造函数中实现该接口的一 个对象,并将原始接口提供的所有调用委托给通过该构接收对象。 d e c o r a t o r 模式可以添加许多原始接口不包含的函数,这样就可以快速地 添加功能。本集成开发环境包含一些类,这些类可以将类、方法等的内部抽 象层转换成可读字符串。d e c o r a t o r 用于扩展这些类,使它们也为n e t f r a 啦曹o r k 反射类返回可读字符串,而且不会使继承树过于复杂。示例如下: p u b l i ci n t e r f a c ei h e l l o p r i n t e r v o i dp r i n t h e l l o ( ) : p u b l i ci n t e r f a c ei p r i n t e r d e c o r a t o r :i h e l l o p r i n t e r v o i dp r i n t g o o d b y e ( ) : i e l l o p r i n t e rh e l l o p r i n t e r : p u b l i ca b s t r a c t p r i n t e r ( i h e ll o p r i n t e rh p ) t h i s h e l l o p r i n t e r = h p : 6 r垤三阡毗陋啦帖s驺dnmn曲c虬 ,叫; 武汉理工大学硕士学位论文 p u b l i cv o i dp i n t h e l l o ( ) h e l l o p r i n t e r p r i n t h e l l o ( ) p u b li ca b s t r a c t v o i dp r i n t g o o d b y e ( ) : 、 p u b l i cc l a s se n 9 1 i s h p r i n t e r d e c o r a t o r :a b s t r a c t o r p r i n t e r ( p u b l p u b l e n g l i s h h e l l o p r i n t e r ( i h e l l o p r i n t e rh p ) :b a s e ( h p ) o v e r r i d e v o i dp r i n t g o o d b y e ( ) s y s t e m c o n s 0 1 e w r i t e l i n e ( “g o o db y e ! ”) : ) p u b l i cc l a s sg e r m a n p r i n t e r d e c o r a t o r :a b s t r a c t p r i n t e r p u b l i cg e r m a n h e l l o p r i n t e r ( 工h e l l o p r i n t e rh p ) :b a s e ( h p ) p u b l i co v e r r i d e v o i dp r i n t g o o d b y e ( ) s y s t e l l l c o n s o l e w r i t e l i n e ( “a u f w i e d e r s e h e n ! ) : ) 7 武汉理工大学硕士学位论文 i h e l l o p r i n t e r d e c o r a t o r 接口添加了p r i n t g o o d b y e 方法,以扩展其功能。 脚z jd e c o r a t o r 模式示例图 由图2 3 可知,d e c o r a t o r 模式可以在运行时更改其中的d e c o r a t o r ,并 动态扩扩展其功能。 2 2 3s t r a t e g y 模式 s t r a t e g y 模式定义一系列算法,把它们一个个封装起来,并且使它们可 互相替换。在本集成开发环境中大量使用了s t r a t e g y 模式例如:文本的换 行功能,如果将这些算法硬写入它们的类中将会很复杂,使得客户程序庞大 且难以维护,尤其当需要支持几种换行算法时问题会更加严重。我们可以定 义一些类来封装不同的换行算法,从而避免这些问题。s t r a t e g y 示例如下: p u b l i ci n t e r f a c ei h e l l o s t r a t e g y s t r i n gg e n e r a t e h e l l o s t r i n g ( ) : ) p u b l i cc l a s se n g l i s h h e l l o s t r a t e g y :i h e l l o s t r a t e g y p u b l i cs t r i n gg e n e r a t e h e n o s t r i n g ( ) 8 武汉理工大学硕士学位论文 r e t u r n“h e l l ow o r l d ! ”: ) p u b l i cc l a s sg e r m a n h e ll o s t r a t e g y :i h e l l o s t r a t e g y r e t u r n“h a l l ow e l t ”: p u b l i cc l a s sh e l l o p r i n t e r i h e l l o s t r a t e g yh e l l o s t r a t e g y : p u b l i ci h e l l e s t r a t e g y ( s e t f r e t u r nh e ll o s r a t e g y : s e t f h e l l o s t r a t e g y = v a l u e : p u b l i cv o i dp r i n t h e l l o ( ) i f ( h e l l o s t r a t e g y ! _ n u l l ) c o n s o l e w r i t e l i n e ( h e l l o s t r a t e g y g e n e a t e h e l l o s t r i n g ( ) ) ) t 搂n ) ) 1 h e l 】o s t r a t e g y o n e l 强t 硎e h n 甜n 臂f ) 、,筠l”墒2 ih e ll o p r n t e r n 9 1i s h h e l1b s t r a t e g y r m a n h 门1 0 s t r a t o g y 图2 4s t r a t e g y 模式示例图 9 武汉理工大学硕士学位论文 由图2 5 可知,h e l l o p r i n t e r 有一个特殊策略,可以将策略运用于多各 h e l l o p r i n t e r ,以便为它们赋予功能。 2 2 4p r o x y 模式 若需处理需要大量的创建时间、复杂或占用内存太多的对象,应使用 p r o x y 模式。通过p r o x y 模式,可将大对象的创建时间推迟至真正使用之时。 在本集成开发环境中,p r o x y 用于表示一些n e t 运行库的类。这些类只 纪录实际的类名,占用类存较少,加载速度快。它们不包含类成员信息,在 受到请求时再加载实际类,示例如下: p u b l i cc l a s sh e l l o p r i n t e r p r o x y :i h e l l o p r i n t e r s t r i n g1 a n g u 8 9 e : i h e l l o p r i n t e rp r i n t e r = n u l l : p u b l i ch e l l o p r i n t e r p r o x y ( s t r i n g1 a n g u a g e ) t h i s 1 a n g u a g e = l a n g u a g e :) p u b l i cv o i dp r i n t h e l l o ( ) i f ( p r i n t e r = = n u l l ) p r i n t e r = n e wh e l l o f a c t o r y ( ) c r e a t e h e l l o p r i n t e r ( 1 a n g u a g e ) : ) p r i n t p r i n t h e l l o ( ) : 第一次调用p r i n t h e l l o 方法时,该h e l l o p r i n t e r p r o x y 类创建真正的 p r i n t e r 对象。在需要多个对象的情况下,若这些对象占用很多资源,而实际 只利用了一部分时应使用p r o x y 模式。 l o 武汉理工大学硕士学位论文 图2 5p r o x y 模式示例 由图2 5 可知,代理类仅仅是实际类实现的接口。在真正需要时才动态 生成。 本集成开发环境主要使用了以上这些设计模式,使得程序的结构灵活, 扩展性好,便于维护。 武汉理工大学硕士学位论文 第3 章实现核心功能 本集成开发环境采用一种称为a d d i n 树的数据结构。类似e c l i p s e 中的 p l u g i n ,使程序可以动态扩展。与其他设计方法相比,a d d i n 树有不少优点: 1 ) 可以通过其他插件扩展已有插件 这样做的主要问题是:其他插件执行时( 如生成上下文菜单) 必须通知 已有插件。这是必需的。因为要扩展一个插件,就必须扩展一个插件的“动 作”,它们之间必须保持某种类型的通信忙1 。这是插件结构需要解决的主要问 题。 2 ) 包含可执行代码的a s s e m b l y 文件不必驻留在一个目录中 开发人员可将它们存储在任何需要的位置,插件系统将管理文件加载。 这就使实现插件的“复制和删除”部署变得非常容易。只篙将包含x m l 定义 和所需程序集的插件文件复制到a d d i n s 文件夹,就奏效了。 3 ) 使用上述方法时,插件不必实现自己的插件结构 因为所有插件都基于一个系统a d d i 树,这些插件书定义了一个统一的结构, 构件自己的插件树时只要遵循这一结构,我们就可以定制任何功能的插件。 3 1a d d ln 树 本程序每个实例只有一个a d d i n 树,所以我们通过s i n 9 1 e t o n 设计模式 来实现它。 1 2 武汉理工大学硕士学位论文 图3 1 给出了插件的基本思想,插件插入树中树包括了整个系统,x m l 文件和x m l 引用的d l l 集定义了一个插件。d l l 提供了代码,x m l 定义了 将其插入到a d d i n 树的方式和位置。 图3 2a d d i n t r e e 结构 在图3 2 中,树包含两种不同的对象:节点和路径。 a d d i n 树是一种“将它们全部绑定”的树,插件是a d d i n 树的节点,路 径的作用是构造树。i d e 根据这些节点的定义内容更改行为。可以说,节点是 包含行为定义的功能模块。 3 1 1a d d in 树的上层结构 a d d i n 树是由一个提供其余应用程序所用功能接口的树。其定义如下: p u b l i ci n t e r f a c ei a d d i n t r e e c o n d i t i o n f a c t o r yc o n d i t i o n f a c t o r y ( g e t : ) r e t u r n sa c 0 1 1 e c t i o no fa l ll o a d e da d d i n s a d d i n c o l l e c t i o na d d i n s g e t : ) r e t u r n sat r e e n o d ec o r r e s p o n d i n g p a t h c o d e i a d d i n t r e e n o d eg e t t r e e n o d e ( s t r in gp a t h ) : 1 3 武汉理工大学硕士学位论文 i n s e r t sa na d d i ni n t ot h ea d d i n t r e e v o i di n s e r t a d d i n ( a d d i na d d i n ) : r e m o v e sa na d d i nf r o mt h ea d d i n t r e e v o i dr e o v e a d d i n ( a d d i na d d i n ) : t h i sm e t h o dd o e sl o a da 1 1c o d o n sa n dc o n d i t i o n si nt h eg i v e n a s s e m b l y a s s e m b l yl o a da s s e m b l y ( s t r i n ga s s e m b l y f i1 e ) : ) 3 1 2 插件定义 插件也就是具有一定功能的模块,我们通过x m l 文件来描述一个插件, 其格式如下: 这是一个典型的插件定义, 节点包含该插件所需程序集的相关 信息。之后定义了一个 e x t e n s i o n ) 节点,它包含一个p a t h 属性和一个子节 点; 1 4 武汉理工大学硕士学位论文 i c o d o n 接口的对象存储于树结构中,我们称“密码子”为i c o d o n 接口的 一个实现,i c o d o n 定义如下: p u b li ci n t e r f a c ei c o d o n r e t u r n st h ea d d i ni nw h i c ht h i sc o d o no b j e c 十可a sd e c l a r e d a d d i na d d i nf g e t : s e t : r e t u r n st h ea n m eo ft h ex m ln o d eo ft h i sc o d o n ( i ti st h es a m e f o re a c ht y p eo fc o d o n( t h en a m eo ft h ex m lt a gi n s i d e t h ea d d i nf i l e ) ) s t r i n gn a m e【 g e t : r e t u r n st h ei do ft h i sc o d o no b j e c t s t r i n gi d 【 g e t : s t r i n gc 1 a s s g e t : s t r i n g i n s e r t a f t e r g e t : s e t : s t r i n g i n s e r t b e f o r e g e t : o b j e c tb u i l d i t e 【l ( o b j e c to w n e r ,a r r a y l i s ts u b i t e m s c o n d i t i o n f a i l e d a c t i o na c t i o n ) : 1 5 武汉理工大学硕士学位论文 所有密码子都知道它们的a d d i n ( 定义文件的对象表示) 。每个密码子必 须有一个惟一名称,该名称与密码子x m l 节点名称相同,必须被附加到包含 定制属性c o d e n n a m e a t t r i b u t e 的c o d o n 类。它定义了密码子x 虬节点名。 a b s t r a c c o d o n 基类用c o d e n n a m e a t t r i b u t e 实现接口c o d o n 所需的属性。 i d 是树中c o d o n 对象的名称( 可通过i d 引用密码子) ,所以存储在同一 a d d i n 树路径下的俩个密码子不能含有相同的i d 。其他属性是c h s s 、 i n s e r t a f t e r 和i n s e r t b e f o r e ,i n s e r t a f t e r i n s e r t b e f o r e 用于扫 歹0 同级 剐的密码子,对一些密码子而言,如对话框面板,这是十分有意义的,但对 其他密码子而言则并不需要。密码子惟一必需的方法是b u i l d i t e m 方法。 密码子可定义附加属性及从x m l 定义获得属性值,并可将它们应用于创 建的对象。a d d i n 将这些密码子创建起来,以将其用于树结构之中。 c o d o n 类标记插件系统的方式,它包含需要从密码子x m l 节点读取的属性, 一种方式是使用同于对象字段名的属性名,但这样做不太灵活性,那些无法 在) ( m l 节点内设置的字段应如何处理? 所以应当选择另一种方法:通过属性 标记字段。 若密码子包含强制属性,必须将其实现,所以用c # 的定制属性功能“3 来定义密码子包含的属性。下面将显示抽象实现方式: p u b l i c ca b s t r a c tc l a s sa b s t r a c t c o d o n :i c o d o n x i i l l m e m b e r a t t r i b u t e a t t r i b u t e ( “i d ”,i s r e q u i r e d = t r u e ) s t r i n gi d = n u l l : x m l m e m b e r a t t r i b u t e a t t r i b u t e ( “c l a s s ”) s t r i n gm y c l a s s = n u l l : x m l m e m b e r a r r a y a t t r i b u t e ( “i n s e r t a f t e r ”) s t r i n g i n s e r t a f t e r = n u l l : x m l m e m b e r a r r a y a t t r i b u t e ( “i n s e r t b e f o r e ”) s t r i n g i n s e r t b e f o r e = n u l l : c r e a t e sa ni t e mw i t ht h es p e c i f i e ds u bi t e m sa n dt h ec u r r e n t c o n d i t i o ns t a t u sf o rt h i sit e m p u b l i ca b s t r a c to b j e c tb u i l d i t e m ( o b j e c to w n e r ,a r r a y l i s t s u b i t e m s ,c o n d i t i o n f a i l e d a c t i o na c t i o n ) : 1 6 武汉理工大学硕士学位论文 如上所示,x m l l e m b e r a t t r i b u t e 或x m l m e m b e r a r r a y a t t r i b u t e 属性定义 于a b s t r a c t c o d o n 类的各个字段之前。属性包含一个参数,即密码子x m l 节 点可能包含的属性名。如设置为真,则该属性包含一个i s r e q u i r e d 特性,所 有描述该类实例的密码子x m l 节点必须包含该属性,否则,将抛出一个异常。 3 1 3 从树节点到运行对象 要了解对象的创建方式,需要了解最常用于插件树的方法: 1 ) i a d d i n t r e e n o d eg e t t r e e n o d e ( s t r i n gp a t h ) : 该方法返回一个i a d d i n t r e e n o d e 。下面看一下这个返回接口的定义: p u b l i c ci n t e r f a c ei a d d 工n t r e e n o d e ah a s ht a b l ec o n t a i n i n gt h ec h i1 dn o d e s h a s h t a b l ec h i1 d n o d e sf g e t : ac o d o nd e f i n e di nt h isn o d e i c o d o nc o d o n g e t : ) a l lc o n d i t i o n sf o rt h i st r e e n o d e c o n d i t i o n c 0 1 1 e c t i o nc o n d i t i o n g e t : g e t st h ec u r r e n tc o n d i t i o n f f i l e d a c t i o n c o n d i t i o n f a i l e d a c t i o ng e t c u r r e n t c o n d i t i o n f a i l e d a c t i o n ( o b j e c t c a l l e r ) : b u i l d sa l lc h i l di t e m so ft h i sn o d eu s i n gt h e a r r a y l i s tb u i l d c h i l d i t e m s ( o b j e c tc a l l e r ) ) b u i l d so n ec h i l di t e mo ft h i s n o d eu s i n gt h e o b j e c tb u i l d c h i l d i t e 【i ( s t r i n gc h i l d i t e m i d ,o b j e c tc a l l e r ) : 武汉理工大学硕士学位论文 我们可以看到,子节点储于h a s h t a b l e 。这样,查找特定树节点的速度很 快。下一个属性是c o d o n 属性,它给出存储于节点的密码子名 2 ) b u i l d c h i l d i t e m s 和c h i l d i t e m 方法。 b u i l d c h i l d i t e m s 方法调用所有子密码子( 如果有的话) 上的b u i l d i t e m , 并将其返回为a r r a y l i s t 该方法被定义在d e f a u l t a d d i n t r e e n o d e 类中,该类 定义如下: p u b l i ca r r a y l i s tb u i l d c h i l d i t e m s ( c a l l e r ) a r r a y l i s ti t e m s = n e wa r r a y l i s t ( ) ; i a d d i n t r e e n o d e s o r t e d n o d e s = g e t s u b n o d e s a s s o r t e d a r r a y ( ) : f o r e a c h ( i a d d i nt r e e n o d ei ns o r t e d n o d e s ) d o n ti n c l u d e ee x c l u d e dc h i l d r e n c o n d i t i o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论