zhangJW_cn 阅读(896) 评论(12)
好久没来写点什么了。又热又烦,或者更多的应该是更懒,也不知道该写点什么。

前几天在gameres上看到一位好心的兄弟写的IOCP封装,也想到几个朋友写的一些封装。突然在郁闷中想了起来:封装,于是决定用自己的言语浅谈一下封装。

在网上查找“什么叫封装”、“软件封装”,没有找到解释。那么先不管是否准确,就用自己的理解浅谈一下吧。
 
1.封装?封和装,字面是这样。象一个袋子一样,把它封起来、装起来。
2.疑问:为什么要封装?封装有什么好处?如何封装?
    2.1.为什么要封装
    通常,底层提供了强大、灵活的功能,我们需要花费很长的时间去学习、使用它们;很多时候,我们会多次做一些重复、类似、一致的事情;大多时候,其实并不需要全部的功能,我们可能频繁使用的只是某部分的功能。通过将这些重复的劳动的精心包装,滤去那些不用的功能,在学习量上、使用上,都可以获得较好的回报。
    2.2.封装的好处 从为什么要封装,我们已经知道好的封装有3个好处:1减少学习时间、2免去重复劳动、3提高工作效率。MFC使得我们不用每次都RegisterClass、CreateWindow、建立消息循环等等等等,从而为我们节省了大量的时间。
    2.3.如何封装
    第一.减少学习时间。为了减少学习时间,我们需要建立自己的概念,从而精简、屏蔽掉底层后台的大量概念,减少使用者的学习量,从而做到更容易理解、掌握。(可能有人要说ACE的概念好象比本身socket的概念更多,那么你有注意它的多平台性吗?这些平台的概念总和少吗?)但是,我们会发现,和原来的概念类似的,或者没有本质的减少的,其实并没有减少我们的学习时间,而且,直接学习底层反而还可以发挥更大功效。所以,你需要建立你自己的,从本质上更少、更精、更易懂的概念
    第二.免去重复劳动。我们为那些常用的、类似的、一致的代码,抽象出公共接口,从而把原来需要写几十、甚至几百行的代码,现在只需要几条语句就可以搞定了。
    第三.提高工作效率。当我们的封装能够使使用者需要学习的量由原来的几十、几百各概念,锐减致只有几个时,当使用者原来需要写大量代码才能完成的功能只需要几次调用就可以做到时,我们已经提高了工作效率。但是,如果使用者本身就是这方面的高手时,学习就带来了额外的负担,而你的调用也并没能减少他多少工作,至少,他会对你的封装嗤之以鼻,因为你并不能改善他的工作,反而是增加了他不必要的学习。所以,你的封装应该是从质上改变,而不是仅仅从量上改变

    请问:你的封装能够提供自己的精简易懂的概念吗?能够减少使用者的学习时间吗?能够避免他们重复的劳动吗?能够提高他们的开发效率吗?如果有一条做的不好,或者不够好。那么,我想你应该好好的再构思一下,或者虚心学习别人好的封装是怎么做的,或者你还需要学点别的什么。

    一家之言,仅供参考!

评论列表
清风雨
本来都关机了
洗澡突然想到忘了些东西,所以又开机了。

在设计以前先想想自己是使用者会希望怎样?做完了再想想是要这样吗?自己第一个去用。

本来20:00多就写好了,结果ie出错,又只能重新又写。不知道那些官爷们发生这种情况会怎样。
metaprogram
re:
你这里把"封装"和"重用"混在一起说了. 封装不一定是为了重用, 但封装是实现重用的一种方式.

"也想到几个朋友写的一些封装"你的意思是建立一个可重用的库, 这个库以封装作为划分功能单元的手段.

重用不一定要封装因为你可以基于数据结构和函数的方式(ADT)重用, 而不是类的实现.

一般在自已的代码里封装是不具通用和重用性的因为它针对的最小范围是专有的项目, 这些封装类的用户群可能只有你或一个小组里的人.
因此封装的目的只是使代码层次分明, 使功能内聚, 这样的代码便于文档化,可阅性高,便于调试.

(我上面指的封装是指C++的类, 因为封装宏观上可以指任何有相同特质的一组集合)
pAnic
re: 用自己的话浅谈封装
封装还有个重要作用是增强代码的内聚。
清风雨
两位说的都很有道理
建立一个可重用的库 的 封装!

就这样吧,也不改了。 这样,还能更全面、完善!
flyingleaf
re: 用自己的话浅谈封装
顶[metaprogram ]
boli
re: 用自己的话浅谈封装

封装是 写成 class 吗? :P

清风雨
re: boli
这个只是一种方式吧!

openGL的函数提供就是面向C的,从某种意义讲,也是一种封装!—— 个人这么认为
diclogic
re: 用自己的话浅谈封装
OO所说的封装……可以是 wrapper 也可以是facade。


那些小毛孩子写的练手用的代码,被草率地贴到了网上,不想却让房主如此挂心,呵呵
清风雨
re: 也可以是facade
计算机界的名次可谓越来越多。只有一点还没有变,我想也不会变:一切皆为实用。

个人粗略看过这些设计模式,后觉得若奉为圣经,大可不必。师之所出,青或胜之。:} (不是说自己,只是突然觉得现在这个有点过火的感觉,甚至有点,胜于拽词的感觉,所以顺便提及。呵呵,你说的很有道理!)
zhjb
re: 用自己的话浅谈封装
传道者的目的:将一个复杂的道理用浅显语言来描述。
学习者的目的:将一个用浅显语言描述的内容复杂化。
清风雨
re: zhjb
所言甚善!

不过,不知能否更深入的表述一下你的用意?或者是有什么想法、建议、批评,抑或赞同?谢谢!
陈刚
re: 用自己的话浅谈封装
封装也是一个不断完善的过程,当然再经过一段时间后随着技术的进步思想的成熟,也会推翻重来。

发表评论
切换编辑模式