表示独立性:客户端使用ADT时无需考虑也不应知道更不应该直接访问其内部实现,ADT内部表示的变化不应影响外部spec与客户端。
表示泄露:如果ADT不幸地让客户端得到了自己内部表示可变对象的引用,那么客户端就可以不通过ADT的操作,而可以通过非法后门修改ADT的内部表示,产生表示泄露。
如何避免表示泄露:
1、所有字段都使用private,这是最基本的最起码的保护方式。
2、防御式拷贝,例如用getCharArray返回rep的拷贝,又例如用Arrays.copyOf(rep,rep.length)返回一个新对象的引用,而不能直接返回rep,还有给rep赋值时也应注意不能直接把传入的可变对象引用赋值给rep。

本文探讨了在面向对象设计中如何确保抽象数据类型(ADT)的内部表示独立于客户端,并防止表示泄露。表示泄露可能导致客户端绕过ADT的操作直接修改其内部状态。为避免这种情况,建议采用两种策略:1) 使用private修饰符保护字段,防止直接访问;2) 实现防御性拷贝,如通过返回对象的副本而非原始引用,确保ADT内部状态的稳定性。这些措施有助于维护软件的稳定性和安全性。
3万+

被折叠的 条评论
为什么被折叠?



