TCL面向对象设计模式.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TCL面向对象设计模式 TCL面向对象设计模式 ?没计模式描述和解决了在软件开发与没计过程中反复发生和遇到的问题。各种版本 的设计模式文献层岀不穷,很多被誉为经典之作,可见设计模式对于软件开发的重 要性。不过目前大部分的的设计模式文档都是以C++, Java等作为示例代码,而目 前我们的自动化测试平台也在进行00面向对象的改造,在此分享一些IncrTcl实 现的模式。 成员对象 ? 一个常见问题是怎样实现一个成员对象,或者简单地说就是某个成员变S是另一个 对象。解决办法就是让一个成员变量拥有另一个对象的引用,然后在构造函数和析 构函数里创建和删除它。例如,对象B拥有一个对象A itcl::class A { method print {} {puts ’’Hello from A. My name is $this.’’} itcl::class B { variable a constructor {}{set a [A #auto]}用 constructor {}{set a [A #auto]} 用 #B的构造函数创建A对象的一个实例引 destructor {itcl“delete object $a} method print {} {$a print} B b」nstance B c_instance b」nstance print c_instance print 运行结果: Hello from A. My name is ::B::aO. Hello from A. My name is :: ?在这个例子中还有个小tip,就是对于#3以0的川法。在tel的帮助文档是这么解释的: If objName contains the string #autoM,that string is replaced with an automatically generated name. Names have the form classNamenumber〉, where the className part is modified to start with a lowercase letter 对象组合 ?尽管创建一个成员对象很容易,但是要在IncrTcl里引用成员对象的变量和方法则 可能很麻烦。并且不断有关于继承是否已经陈旧过时,或者应该有更合适的开发模 式的讨论。终于产生了一种可替换和避免使用继承的模式出现,对象组合。 itcl::class user { public variable username itcl::class session { variable thisuser variable thatuser constructor {} { set thisuser [user thisuserl set thatuser [user thatuser] method osend {item cmd} { set obs [itcl::find objects] set item [string trimleft $item set pos [Isearch -exact $obs $item] if {$pos〉=0} { return [eval [lindex Sobs $pos] $cmd] session a a osend -thisuser {configure -username Fred) puts [a osend -thisuser {cget -username}] 运行结果:Fred ? confgiure和cget是Incr Tel的内賈方法,用来对public变:W:进行存取配賈 抽象工厂 ?抽象工厂是设计模式里一种经典的模式,T面的IncrTcl实现示例说明抽象类和纯 虚方法的使用。一个抽象类不能够被实例化,仅有子类的实例对象可以被创建。纯 虚函数在父类里没有定义,而是放在子类里实现。 itcl::class Factory { constructor {} { #确保抽象类不被实例化. if {[namespace tail [info class]] == .’Factory’’} { error ’’Error: can’t create Factory objects - abstract class??’ } #验证是否在子类里定义了 status方法 if {[$this info function status -body] ==’’} { error Error: method status undefined. } } protected method status {} {} % Factory #auto Error: can’t creat

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档