关于创建ADT时的表示泄露

2022/6/6 23:19:50

本文主要是介绍关于创建ADT时的表示泄露,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  java是一个典型的面向对象的语言,而在解决面向对象的相关问题时,我们姑且可以认为ADT是解决问题的基本单元。一个ADT的基本属性便是immutable或mutable,与这个属性密切相关的便是笔者将要谈到的表示泄露的问题。

  不妨先说immutable的ADT,既然是immutable,便是在创建完实例后便不能修改,尤其是不能被外部修改,因此我们要做到的最基本的便是在该ADT的RI中定义为private,不然若是public便能轻易的被外界调用,甚至修改,这显然对我们的程序是不安全的,应当杜绝。当然若是加上final的修饰自然更好。加上private后,外部程序想要得知一些值只能使用相应的obsever方法,返回相应的值。好,到这里我们又有了需要考虑的事情,如果需要得知的是String,int这种本身是immutable的便罢,但万一是List,Set,Map这种,我们就需要格外注意了,因为他们本身是mutable的,当我们一时没注意在observer方法中直接返回了他们的话,那外部程序便能随意对其进行修改了,这同样应当杜绝。为了避免这种情况发生,我们便需要返回一个“副本”,即是所谓的防御式拷贝,通过创建一个mutable RI的副本,然后observer方法再返回这个副本,便能到达避免表示泄露的问题。

  再来说mutable的ADT,因为是mutable,自然不会像immutable那样要求那么严格,但是,如果要对其进行相应的修改操作,必须通过ADT内部的方法来实现,同样也要通过上述所说的防御式拷贝来避免程序中可能出现的隐患。



这篇关于关于创建ADT时的表示泄露的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程