1.3 封装的秘密
面向独享的封装特性
字段赏析
属性赏析
在面向对象三要素中,封装特性为程序员提供了系统与系统,模块与模块,类鱼类之间交互的实现手段,封装为软件设计与开发带来前所未有的革命,成为构成面向对象技术最为重要的基础之一。在.net中,一切看起来已经被包装在.net Framework这一复杂网络中,提供给最终开发人员的是成千上万的类型,方法,和接口,而Framework内部一切已经做好了封装,列如,如果你想对文件进行必要的操作,那么使用System.IO.file基本就能够满足多变的需求,因为.net Framwork 已经1把对文件的重要操作都封装在System.IO.File等一些基本类中,用户不需要关心具体的实现。
那么封装究竟是什么?
首先,我么考察一个常见的生活实例来进行说明,列如每当发工资的日子小王都来到ATM机前,用工资卡取走一笔钱为女朋友买礼物,从这个很帅的动作,可以的出以下结论;
小王和ATM机之间,以银行卡进行交互,要取钱,请交卡
小王并不知道atm机将钱放在什么地方,取款机如何计算钱款,又如何通过银行卡返回小王所要数目的钱,对小王来说,atm就是一个黑匣子,只能等着取钱,而对银行来说,atm机就像银行自己的一份子是安全可靠精壮的额员工。
小王要想渠道自己的钱,必须遵守atm机的对外约定,他的任何违反约定的行为都被视为不轨,列如欲以砖头砸开取钱,用公交卡冒名取钱,盗卡取钱都将面临法律危险,所以小王只能安分守纪的过月光族的日子。
那么小王和atm机的故事,能给我们什么样的启示,对应上面的3条结论,我们的分析如下
小王以工资卡和Atn机交互信息,atm机的如卡口就是atm机提供的对外接口,砖头是塞不进去的,公交卡放进去也没有用。
atm机在内部完成身份验证余额查询,计算取款等各项服务,具体的操作对用户小王是不可见的,对银行来说这种封闭操作带来了安全性和可靠性。
小王和atm机之间遵守了银行规定 ,国家法律这样的协约,这些协约和法律,就挂在atm机旁边的墙上
结合前面的示例再来分析封装吧,具体来说封装隐藏了类内部的具体实现细节,对则提供统一访问接口,来操作内部数据成员,这样实现的好处是实现了ui分离,程序员不需要知道类内部的具体实现细节,对外测提供统一访问接口,来操作内部数据成员,这样实现的好处是实现了ui分离,程序员不需要知道类内部的具体实现,只需要按照接口协议进行控制即可。同时对类内部来说,封装保证了类内部成员的安全性和可靠性。在上例中,atm机可以看做分装了各种取款操作的类,取款,验证的操作对类atm来说,都在内部完成,而atm类还提供了与小王交互的统一接口,并以文档形式--法律法规,规定了接口的规范与协定来保证服务的正常运行。以面向对象的语言来表达哦类似于下面的样子;
在.net应用中,Framework分装了你能想到的各种常见的操作,就像微软提供给我们一个又一个功能不同的atm机一样,而程序员手中筹码就是根据.net规范进行开发,是否能取出自己的钱,要看你的卡是否合法。
那么如果你是银行的主管,又该如何设计自己的atM呢?该以什么样的技术来保证自己的atm在内部隐藏实现,对外提供接口呢?