冒号和他的学生们(连载27)——接口服务 - 编程入门网
能保证预期的效果。至于他人代码是否有效杜绝了一切可能的漏洞,那是监管软件质量的负责人的职责。”
引号表示理解:“这就好比客户购买了一款产品,却不按使用说明书进行操作,由此而引起的一切后果,厂家概不负责。” “就是这个理儿。”冒号轻锤桌面,“当然事物是一分为二的。生活中有一个司空见惯的现象:许多行人跨越护栏、横穿马路。一方面,行人应该遵守交通规则,不应破坏道路的‘封装性’。另一方面,有些交通设计者没有‘以人为本’的客户意识,为行人提供的斑马线、天桥或隧道之间相距过远。从客观上说,不够完备的服务是导致行人违规的一大诱因。” 冒号和他的学生们(连载27)——接口服务(2)时间:2011-07-03 BlogJava 郑晖此言显见深得人心——几乎人人都当过道路封装的破坏分子。 冒号接着问:“提个问题:当你们在使用一个类或其中的某个方法时,对其用法存疑,即使阅读注释文档也无济于事,怎么办?” 叹号顺嘴说道:“看源代码呗。” “看源代码是一种很好的学习和借鉴他人的方式,但不宜作为用法参考。”冒号否定道,“且不说源代码有可能无法获取,既便能够,从中提炼出的用法也不一定可靠,更何况具体实现随时可能变化。再打个比方,如果你不清楚如何设置一个闹钟,应该去看看说明书。如果说明书仍不解决问题,最好询问厂家,而不是揭开闹钟的后盖去研究它的运行机制,即使你真是个钟表行家。” “所以应该直接咨询代码的作者。”逗号发现,过早抢答往往会掉入老冒的陷阱。这回学乖了,等叹号落坑后才胸有成竹地应招。 “方向正确!”冒号肯定后再次考问,“对方应以何种方式回答?” “可以口头,也可以书面啊。”逗号答毕,隐隐觉得还是着了道。 果然,冒号摇摇头:“正确的做法是,对方应通过改进并提交的文档来解释。该过程可多次循环,直至问题解决。只有这样,主客双方的代码维护者——包括当前的和将来的——才能真正受益。” 问号深究:“但假如无法联系到原作者呢?比如包括JDK库在内的软件?” 冒号回答:“除了盗版的商业软件,都应该能联系到原作者。当然,如果与作者使用的不是同一源码控制库,上述做法也是可以变通的。好在无论是JDK库,还是正规的第三方软件,文档注释应该都足够清晰,许多还会提供示例代码。如果这些还不能让你明白,要么是该软件不值信赖,也就没有重用的价值;要么是你自身的理解问题,只有求助有识之士了。” 句号体会到:“由此可见,封装的代码不仅要屏蔽客户代码的访问,最好还能屏蔽客户代码开发者的访问。这样既鼓励代码作者多写规范文档,又鼓励代码用户多读规范文档。一切以规范为中心,而不以源码实现为中心。” “非常好的建议!”冒号竖起拇指,“访问控制只是个玻璃罩,能防止乱动的双手,却防止不了偷窥的双眼。它至多只能维护语法上的封装和信息隐藏,而语义上的封装只有靠规范来维护。对程序员而言,前者是一种需要学习的知识,后者是一种需要培养的素质。” 叹号觉得脑子里仍是半清半浊:“能举个语义上违反封装的例子吗?” 冒号爽快地接受请求:“第一个例子是上节课谈到对象封装时作为反例的User类,其中getBirthday直接返回了内部域birthday的引用。如果你在调用getBirthday后对返回值进行修改,就是一种违反封装的行为。” 叹号有些愕然:“那不是User类本身首先违反封装原则的吗?” 冒号食指微扬:“不错,User类的作者错在授人以隙,而你错在乘 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |