2437|1

7815

帖子

57

TA的资源

裸片初长成(中级)

楼主
 

一次简单的 程序库之旅 2 为什么要封装库 [复制链接]

为什么要封装库?
       程序库,可以理解为围绕若干功能而单独编译而成的二进制文件,在编译前,它们一般都是一系列的子函数。
       应用程序(比如最简单的main函数)在调用这些功能的函数时,和直接调用编译生成库的那些源文件中的函数一样。
——事实上,这本质上就是一回事,只不过是把 编译子函数这一块单独抽取出来 而已。
一个最重要的问题是,既然这两者的行为一模一样,我们为什么要多此一举,单独去做封装这个步骤呢?

做任何事情都有目的,我用亲身经历的事情来说明一下。
第一,当然是避免重复。
      做多几个项目,都会有经验,项目中总有一些类似或者重复调用的一些子函数,我们往往叫它们做 公用函数 或者 常用函数。
      比如 delay函数,比如字符串拷贝,初始化函数。

      假设我们封装成库,那么,下一次我们要再调用时,只要简单地把链接上库和头文件——我的意思是,库和头文件很可能不在项目文件夹里哦(当然,这个随个人习惯,我有时会把它们一并复制到项目文件里。)

      当然,也许你会说,那我也可以直接把源文件复制到项目文件里去啊。
      的确,只是这样操作略显麻烦,但我承认,这个目的不算很硬气。
然而,这个往下伸延到第二个目的时,就很明显了——
第二,避免修改不同步更新
      因为有一些常用函数是经常反复使用的。然而,难免我们会在使用过程中,对这些函数进行修改——delay这种函数一般就没这种机会,但它并不是唯一封装成库的子函数。总有一些函数有这种需求。
      假如你不是封装成库,而是像之前那样复制源文件的话...
      假设下面一种经常会发生的情况:
      假设项目D是你第九十五次复制这些公共函数,而你做的新项目,已经是第一百七十八次复制这些公共函数。维护D时,你发现某些问题是公共函数引起的,于是你修改了这些公共函数,同时你可能又引进了一些新的函数。
      你是在第九十五次使用的基础上做了这些改动, 从第九十五次到地一百七十八次,可能你也做了好几次改动。但你可能忘了你所做的所有改动。
      这个时候,你到底是使用哪一个版本的公共函数呢?它们永远不是你的最新版本,最完善版本——因为你现在有一百七十八套公共函数!!

      但如果你使用编译库的方式——它被放在一个相对固定的位置。虽然你不能保证自己每一次更新库,都会升级以前的版本,但是你却可以保证,你永远是在使用自己最完善的库,因为——它只有一个,你每次改动都在这个地方做的。
第三.封闭源码,提供功能
     当然,这是商业角度出发。
     封装成库,你是看不到内部实现的源码,你只能通过调用使用它提供的功能。
于是,对于功能的改进,升级,都必须通过库提供商的授权。这过程中,当然你也就必须要付费了。
     当然,软件也是一种商业产品,是一种有价值的商品和服务,提供价值,收取费用是合理的。
     从非商业角度,比如一个内部项目团队,某些代码已经经过了长期验证和测试,足够的稳定,封闭源码,可以避免被随意轻率改动。

    纵观三个用途,最核心的其实是第二点。
    因此,一个稳定,永远保持在最新状态的 功能库,永远是开发的利器,它提供经过验证和测试的稳定代码,保证了质量,又避免了重复从而提高开发速度。
    而封闭源码,就是为了保证它的相对稳定。


[ 本帖最后由 辛昕 于 2013-6-19 21:43 编辑 ]
此帖出自编程基础论坛

最新回复

我觉得库是个好东西,可以更好的保护自己的知识产权啊!  详情 回复 发表于 2013-6-19 23:00
点赞 关注
 

回复
举报

1729

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
我觉得库是个好东西,可以更好的保护自己的知识产权啊!
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表