终于有了间茅草棚

——我走时,会否有随风飘散的痕迹?

外面的风好大,雨也淅淅沥沥的。

世间种种的诱惑不惊不扰我清梦,山高路远不绝我追踪你绝美的笑容,登高一呼时才懂始终在为你心痛,俯首对花影摇动都是东风在捉弄

世间种种的迷惑都是因你而猜错,水光月光又交融描述这朗朗的夜空,生死到头的相从似狂花落叶般从容,当一切泯灭如梦就在远山被绝
随笔 - 42, 文章 - 2, 评论 - 269, 引用 - 3

导航

<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

留言簿(10)

随笔档案

文章档案

收藏夹

其它的我

友情连接

网页连接

搜索

最新评论

  • 1. re: 陈刚
  • 中间件主要的好处在于便于整合,就像一个接口规范和标准。像游戏开发中3D图形技术有两套,有的游戏直接基于D3D或OenGL开发,现在更多的是基于一些图形引擎,像Ogre,Irrlicht等,在这些图形引擎下面去和具体的图形API打交道,从这个意义上来说Ogre和Irrlicht拥有一定的中间件的涵义(这些图形引擎不只是中间层,还包含有场景管理、渲染逻辑等更多内容)。加了这样一层后,当支持新的D3D10和D3D11时,中间层作出修改,原应用不需要修改就可运行,还有移植到支持OpenGLES的设备时,也是可行的。
  • --清风雨
  • 2. re: linux常见开发问题,.JPEG parameter struct mismatch
  • 你说的3.JPEG parameter struct mismatch没看明白,我现在也遇到了同样的问题,
    ”编译libjpeg的make文件里定位输出生成jpeg的地方“指的是哪啊,
    “打印出相关参数”也不明白
    “前台运行同样的./configure”什么意思?
    帮帮我了,谢谢!我邮箱litao_hao@16.com   qq;40362095
  • --haolitao
  • 3. re: linux移植建议
  • 这个学习了
  • --陈刚
  • 4. re: 软件开发模式猜测
  • 脚本在其可配置性、可扩展性上性能应该是已经超越了中间件技术。

    中间件在对其扩展、更新、配置时不知是否能做到依赖它的程序不中断运行呢
  • --陈刚
  • 5. re: 软件开发模式猜测
  • 对 “中间件模式” 还真不太了解。 

    不知 “中间件模式” 是否会影响运行、调试以及维护成本,以及如何能抽象出中间层?
  • --陈刚
  • 6. re: void *几用
  • class Sample
    {
    public:
        void draw( void *g );
    };

    我个人其实并不太认同这种做法,虽然实现了抽象但会加大维护代价
  • --陈刚
  • 7. re: 用自己的话浅谈封装
  • 封装也是一个不断完善的过程,当然再经过一段时间后随着技术的进步思想的成熟,也会推翻重来。
  • --陈刚
  • 8. re: linux常见开发问题
  • xargs不错,蛮有用的。
  • --hATEmATH的网上田园
  • 9. re: 关于“元编程”的浅思考
  • --免费打工仔
  • 10. re: 关于质数(素数)的算法

  • 是AKS方法。
    http://mathworld.wolfram.com/AKSPrimalityTest.html


  • --perry
  • 11. re: 关于质数(素数)的算法
  • 为了在数字比较小时计算得快些,可以应用一些初等数论的结论:

    1]
    仅计算6n+1和6n+5(n=1,2,3,...)形式的数。易知6n+2和6n+4是2的倍数,6n+3是3的倍数。因为2和3的倍数最多。
    2]
    根据“合数的最大的素因数都不大于它的平方根”定理,每次分解仅算到被分解的平方根为止即可。
    证明(一般的证明都不完整):
    设N=P*Q,P和Q是N的不少于1个素因数的乘积(指出这点很重要)。反证法可证P和Q都小于或等于N的平方根(否则P*Q>N)。等号当且仅当P=Q=N的平方根时成立(这时N是一个素数的平方)。

    1]可减少2/3的计算量,2]可再减少1/2的计算量。即为原计算量的1/6。

    几百位数位的数,建议采用ASK方法。





  • --perry
  • 12. re: 关于质数(素数)的算法

  • 素因数分解是一个NP问题。
  • --perry
  • 13. re: 关于质数(素数)的算法
  • 1121=19*59
  • --李圆欢
  • 14. re: void *几用
  • 方法都不错
  • --员工生日礼物
  • 15. re: void *几用
  • to oshj:
    最近才悟道这个用法,没想到你都用了很多了。

    to brent:
    不是为了玩才玩,这里每种用法在特定的情况下,都有他相应的好处。不过,我是做为自己记录的,指不定什么时候就忘记了,还可以这么用。
    1. 可以使得头文件简单,而且出于实现保密的需要,还是很有用处的。
    2. 很多时候对象本身应该简洁,但往往应对不同的需要,通常需要数据对应。举个例子,比如玩家在哪个房间,在哪个房间最好不要直接记在玩家身上,用数据注入的方式,能够很快的获得该信息。
    3. 因为是做为库暴露头文件的,使用者并不关心void *的实际意义,而且能够加快编译速度。真正要关心时,就Graphics.h这个头文件是不够的,通常会需要了解整底层个实现,才能较好的扩充。
  • --清风雨

阅读排行榜

评论排行榜

用自己的话浅谈封装

好久没来写点什么了。又热又烦,或者更多的应该是更懒,也不知道该写点什么。

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

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

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

    一家之言,仅供参考!

posted on 2005-07-05 22:21 终于有了间茅草棚 阅读(3466) 评论(12)  编辑 收藏

评论

# 本来都关机了

洗澡突然想到忘了些东西,所以又开机了。

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

本来20:00多就写好了,结果ie出错,又只能重新又写。不知道那些官爷们发生这种情况会怎样。
2005-07-05 22:56 | 清风雨

# re:

你这里把"封装"和"重用"混在一起说了. 封装不一定是为了重用, 但封装是实现重用的一种方式.

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

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

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

(我上面指的封装是指C++的类, 因为封装宏观上可以指任何有相同特质的一组集合)
2005-07-05 23:57 | metaprogram

# re: 用自己的话浅谈封装

封装还有个重要作用是增强代码的内聚。
2005-07-06 09:07 | pAnic

# 两位说的都很有道理

建立一个可重用的库 的 封装!

就这样吧,也不改了。 这样,还能更全面、完善!
2005-07-06 09:14 | 清风雨

# re: 用自己的话浅谈封装

顶[metaprogram ]
2005-07-06 10:56 | flyingleaf

# re: 用自己的话浅谈封装


封装是 写成 class 吗? :P

2005-07-06 12:54 | boli

# re: boli

这个只是一种方式吧!

openGL的函数提供就是面向C的,从某种意义讲,也是一种封装!—— 个人这么认为
2005-07-06 13:33 | 清风雨

# re: 用自己的话浅谈封装

OO所说的封装……可以是 wrapper 也可以是facade。


那些小毛孩子写的练手用的代码,被草率地贴到了网上,不想却让房主如此挂心,呵呵
2005-07-31 19:28 | diclogic

# re: 也可以是facade

计算机界的名次可谓越来越多。只有一点还没有变,我想也不会变:一切皆为实用。

个人粗略看过这些设计模式,后觉得若奉为圣经,大可不必。师之所出,青或胜之。:} (不是说自己,只是突然觉得现在这个有点过火的感觉,甚至有点,胜于拽词的感觉,所以顺便提及。呵呵,你说的很有道理!)
2005-07-31 21:17 | 清风雨

# re: 用自己的话浅谈封装

传道者的目的:将一个复杂的道理用浅显语言来描述。
学习者的目的:将一个用浅显语言描述的内容复杂化。
2006-04-11 15:55 | zhjb

# re: zhjb

所言甚善!

不过,不知能否更深入的表述一下你的用意?或者是有什么想法、建议、批评,抑或赞同?谢谢!
2006-04-12 11:34 | 清风雨

# re: 用自己的话浅谈封装

封装也是一个不断完善的过程,当然再经过一段时间后随着技术的进步思想的成熟,也会推翻重来。
2009-07-24 23:07 | 陈刚
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]