由记忆棒误差故障引发的关于向对象设计的九点思考.PDF

由记忆棒误差故障引发的关于向对象设计的九点思考.PDF

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
由记忆棒误差故障引发的关于向对象设计的九点思考

由记忆棒误差故障 引发的关于⾯向对 象设计的九点思考 从farseerfcwordpress com导⼊ 故障描述:MMCMemoryStickDuo记忆棒未经 Adapter适配器,直接插⼊SDReader,致使MMC卡⼊ SDReader中。 栈展开 :某⽇下午,⽆课。忙于数分作业,想查询 ⽤⼿机拍摄的板书照⽚。取出⼿机中的MMC。未经装配 Adapter,直接插⼊SDReader。 (Aruntimeexceptionwasthrown)尝试翻转笔记本机 ⾝,倒出MMC,未果。(rethrow)尝试⽤⼿指甲取出,未 果。(rethrow)考虑到有“推⼊反弹”机制,尝试将MMC推 ⼊更深,反弹机制由于类型不匹配⽽失效,未果。 (rethrow) (Theexceptionspreadacrosstheborderofthemodel) 电脑维修技师接⼿(catch)技师未能发现问题所在,由我 解说原委。 (Becausetheexceptionlosetheinformation,RTTIwasask 技师发现问题,尝试⽤镊⼦镊出MMC,未果。技师开解 机箱(exposethedatastructure)技师制作钩⼦,勾出 MMC(hookerlinktothestructure)取出MMC,故障解 除 故障总结1接收到没有完全了解、或没有适当⼯具 解决的exception时,不要尝试⽤不成熟的技术解决,应 尽快寻求能解决它的代码。否则,被反复rethrow的 exception,尤其是通过模块边界的exception,有可能 由subclass退化为superclass,并因此⽽丧失⼀些信 息。尽量不要让exception丢失信息,必要时,通过RTTI 机制寻回信息。 2超负荷运转,多线程执⾏,这种种复杂性都有可能 导致错误,应避免。⽆论你有多么信任你的代码或能 ⼒。 3在设计class的interface时,相匹配的interface应 该满⾜is-a的关系。因此,任何能插⼊SDReader的 object,即任何实现了SDinterface的object,都应该is- aSDcard。这次故障中,interface接受了MMC,但 MMC不是SD。即使这种情况下throwanexception,都 不能使事态缓和。能提供compile-timeerror时,尽量让 错误以compile-timeerror的形式展现,并在事先解决。 类型匹配问题是应该能在事先解决的问题。 4 Designpatterns中的Adapterpattern应该只是迫 不得已情况之下的解决⽅案。只有当你⽆权改变现状 时,才能使⽤Adapter。如果能改变现状,应该改变设计 以符合interface。 5 因为上条,所有相似功能的对象应具有相同的 interface,不同的interface是本次故障的根源所在。 6特殊情况下,破坏封装机制并 exposethedatastructure是必要的,应该有⽅法⽀持 这种做法。C的指针和C#的Reflection技术都以不同的⽅ 式⽀持这种做法。其他的⼀些语⾔机制,⽐如 serializing(序列化)或streaming(流化),也可以以某种 ⽅式间接⽀持这⼀做法。当然,机制还应避免这种做法 被滥⽤。 7相反功能具有相同操作的设计,容易造成使⽤的混 乱,应适当避免。⽐如SDReader的推⼊反弹设计,即插 ⼊和弹出使⽤同⼀个向⾥推的操作的设计。同样的设计 还包括,C++中的setNewHandle使⽤同⼀个函数,同时 设置和返回handle。以及有些书中提倡的,使⽤同名函 数重载的⽅式,实现setter/getter的设计。 8特殊⼯具(hooker)对于解决特定问题,通常⽐⼿⼯ 解决有效。不要嫌⿇烦⽽不愿意构造特殊⼯具。 9栈语义,即FILO顺序,总在不知不觉中影响我 们。违反了FILO顺序的操作极易造成混乱。本故障发⽣ 时正确的处理顺序为 :装配Adapter插⼊SDReader 读取数据停⽤设备拔出SDReader拆解 Adapter本次故障的原因就是违反了FILO顺序,违反了 栈语义。

文档评论(0)

youbika + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档