明天就是我和“妞妞”的纪念日了,我要带她去买好多好多的吃的,狠狠满足一下那个馋猫。每次纪念日“妞妞”都有送我礼物,这次她会送我什么呢?衣服?鞋子?算了,懒得去猜,到明天不就知道了么,当务之急是快快做个好梦,等着明天的日出。
“waiting for you, waiting for you…”,“额,这么早,谁打电话来啊?还没睡醒呢。”我被一阵急促的手机铃声吵醒了,我眼也不睁的就接起了电话。“宝贝,起床没啊?”电话理传来了好温柔的声音,我知道是妞妞的声音。“早就起来啦,什么事啊,妞妞?”我慢慢睁开眼,尽量掩饰着含糊不清的声音说道。“少骗我,我一听就知道你还在睡懒觉,忘了今天什么日子啦?”“傻瓜,我怎么可能忘呢?”看来还是被拆穿了。“嗯,快下来吃早饭吧,给你十分钟时间洗脸刷牙,然后到我楼下等我,要是我下来没看到你,小心你的……”“遵命,老婆大人,我这就去弄。”挂了电话,我赶紧穿衣洗漱,我还想要我的小命呢。
“哟,不错嘛,准时到了哦,真乖,洗漱过了吧?”在妞妞下楼前我就及时赶到达她楼下,挣了个不错的表现,嘿嘿。“老公,这是老婆送给你的,纪念日快乐。”“妞妞”从口袋里摸出一个盒子递给了我,我接过一看,原来是电动剃须刀。“哎哟,老婆,好乖哦,可是我有剃须刀啊。”我以前一直都用手刮的剃须刀。“这个方便一点,是不是不喜欢嘛,不喜欢就还给我,我送给别人去。”哇靠,“妞妞”又拿出了对我百发百中的法宝——撒娇,我哪招架得住,只得败下阵来,赶忙把盒子护在怀里,“老婆送的我当然喜欢咯,走吧,先吃早饭。”“嗯,这才是我的好老公,等会老婆奖励你哈,嘿嘿”。
纪念日过得很开心,给小馋猫买了好多零食,她乐得都快合不拢嘴了。回到寝室,我拿出了她给我买的电动剃须刀试了试,感觉还行,不会刮伤。一向好奇的我,将上面的网面打开了,露出了锋利的旋转刀片,我得试试不要网面是什么样。为了安全,我用纸试了一下,果然没有网面的保护,这个就和凶器没有区别,看来这外层包装必不可少啊。
学习C++的朋友一定对“对象”这个词不陌生。好多人看到对象就联想到“封装”,但是其实还可以从另外一些角度去理解对象。的确,对象是封装出来的,不过如何封装才是真正关键。往往我们的硬件设备或者更高一级的操作系统都会为我们提供一些强大的功能,但是这些功能往往是非常“裸露”的,不安全的,使用起来不很方便的。C++程序员可以使用C++的特性去将这些底层功能封装起来,构造出更为严实,更为安全,使用更方便的对象。可是,直到下手的瞬间才发现,似乎这封装的方法无穷无尽,难以抉择。
封装其实就是一个抽象的过程,C++的类概念是很强大的抽象工具。抽象应该遵循“对象语义学”。何谓“对象语义学”,这时我在实践中进行抽象遵守的一个法则,即抽象出来的对象都必须是根据其实际特性来的。例如,一段内存,与之对应的对象应该具有其的特性,比如唯一性、集合性、访问规则等等。如果将这些特性利用C++语言封装到一个C++对象中,那么这个对象就是符合“对象语义学”的,那么它提供给外部的访问接口就简单化了。假设直接写内存需要串行化,每次都得记得,但是抽象为对象后,对象提供一个写的接口,这个接口内部自行实现了串行化,那么我们就不必一次又一次的被这细节所累,因为这个已经属于对象特性,对象提供了很好的保证。
往往我们面临的问题都是复杂的,这复杂度是难以掌控的,只有想办法将复杂度分而治之才能解决我们的问题。抽象给我们提供了这样的办法,C++的类概念无疑是抽象的好工具,它可以将“锋利”的“刀片”包装起来,让其能够给我们安全的使用,也可以让我们使用的时候不再谨小慎微,可以将注意力集中再其他更应注意的地方。
实际中,封装还有一个粒度选择问题,也就是到底要提供多严实?多安全?多简单?的抽象对象。过度封装为给封装过程带来更高的复杂性,降低使用的灵活度;封装不足又会让不安全因素更多,使用起来更为复杂。
抽象帮我们解决问题,对象是抽象的结果,语言是抽象的工具,最终目的是写出好的软件,谨记。