- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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顺序,违反了
栈语义。
您可能关注的文档
最近下载
- GB_T 37776-2019 动态力传感器校准方法 冲击力法校准.pdf
- 国家开放大学邮政学院《邮政客户服务与管理》形考作业二-100分.doc VIP
- 中药药理学-学做自己的调理师-暨南大学-中国大学MOOC慕课答案.pdf VIP
- 2025年招标师招标采购合同纠纷司法文书的理解与应用专题试卷及解析.pdf VIP
- 无人机植保技术全套课件.pptx VIP
- 工业机器人说课省公开课一等奖全国示范课微课金奖PPT课件.pptx VIP
- 2022-2023学年内蒙古包头市七年级(上)期末英语试卷(附答案详解).pdf VIP
- 2024-2025学年深圳市南山区四上数学期末试卷及答案.docx VIP
- 云南省港航投资建设有限责任公司笔试题目.pdf VIP
- IPC TM 650(完整清晰版本).pdf VIP
原创力文档


文档评论(0)