« 上一篇下一篇 »

封装方法

方法(method)封装了类的行为提供了类的对外表现。用于将封装的内部细节以公有方法提供对外接口,从而实现外部交互响应。例如,从上面属性的分析我们可知,实际上对属性的读写就是通过方法来实现的。因此,对外交互的方法,通常实现为public。

当然不是所有的方法都被实现为public,否则类内部的实现岂不是全部暴露在外。必须对对外的行为与内部操作行为加以区分。因此,通常将在内部的操作全部以private方式来实现,而将需要与外部交互的方法 实现为public,这样既保证了对内部数据的隐藏与保护,又实现了类的对外交互。例如在ATM类中,对钱的计算、用户验证这些方法涉及银行的关键数据与安全数据的保护问题,必须以private方法来实现,以隐藏对用户不透明的操作,而只提供返回钱款这一public方法接口即可。在封装原则中,有效地保护内部数据和有效地暴露外部行为一样关键。

那么这个过程应该如何来实施呢?还是回到ATM类的实例中,我们首先关注两个方法:IsValidUser()和 CashProcess(),其中IsValidUser()用于验证用户的合法性,而CashProcess()用于提供用户操作接口。显然,验证用户是银行本身的事情,外部用户无权访问,它主要用于在内部进行验证处理操作,例如CashProcessO中就以IsValidUser()作为方法的进入条件,因此很容易知道IsValidUser()被实现为private。而CashProcess()用于和外部客户进行交互操作,这正是我们反复强调的外部接口方法,显然应该实现为public。其他的方法 GetUserO、GetCash()也是从这一主线出发来确定其对外封装权限的,自然就能找到合理的定位。从这个过程中我们发现,谁为公有、谁为私有,取决于需求和设计双重因素,在职责单一原则下为类型设计方法,应该广泛考虑的是类本身的功能性,从开发者与设计者两个角度出发,分清访问权限就会水到渠成。

« 上一篇下一篇 »