关于C语言及面向对象编程.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于C语言及面向对象编程[转] 2010-09-29 11:25 原文:HYPERLINK /blog/cns!4501730E219BA9CE!1225.entry/blog/cns!4501730E219BA9CE!1225.entry 关于C语言及面向对象编程 一 前言 说到面向对象,我们似乎总会在第一时间想到 Java、C++、Python。对,这些都是提供了面向对象支持的语言。但事实上,面向对象就是语言本身吗?稍有点编程经验的人都会有一个否定的答案。但为什么之前所述的那些语言能称之为面向对象的语言?如果语言本身并不是答案,那用非面向对象的语言,比如C,也应该能够写出面向对象的代码了。我并不是想发表什么高见,我只是想把最近看到了一些东西做一个比较系统的记录而已。同时也希望自己能够时时记住这些方式,写更漂亮的code。 二 面向对象 什么是面向对象?似乎我还没有能力去下这个定义。是Class?Object?还是Interface?似乎都是。在我看来,也正是因为语言本身从语法的级别开始就支持这种概念,才使之有资格成为一种面向对象的编程语言。但当然这还不足以完全地定义一个面向对象的语言,因为这只是从封装的概念来描述面向对象的概念。 那然后呢?然后应该是多态。重载是一个重要的方面,它使得同样的接口在不同的对象中出现不同的行为。这样的特性其实源于封装,不单只把对象的状态封装起来,还把对象的接口也包含在内。正是因为这种封装形式的存在,才使的基于接口的程序设计方式能够在这个时代大放异彩。这样的特性带来了两个好处:代码重用和解偶。首先,把代码以类的形式封装,使得代码能够以一种更具逻辑性的方式在不同的地方得到重用。函数本身也是一种重用的概念,但它本是跟它所需要处理的数据没有显著的语法层次上的关联,类则使得方法与数据有机地组合在一起。因此,在重用的概念上,类不但重用了逻辑,还重用了逻辑所处理的数据。因此在面向对象的领域中,代码得到了更大程度的重用。关于怎么封装代码,大家可以参考“敏捷”、“测试驱动”之类的书籍。另外,现代程序设计更倾向于写“羞涩的”代码,也就是说,把内部的逻辑私有化。但同时它还有另外一层意思,不单只是类内部的逻辑不应该被外部所了解,就算是类本身的逻辑也应该分割成相互独立的部分,也就是说把代码正交化。程序的逻辑并不是永恒不变的,一旦需求发生了变化,环境出现的修改,代码本身也需要作出响应。正交的代码能使得这些改动变得容易实现,并把修改范围最小化。很大程度上,这些方法有多源于封装的概念。关于怎么写“羞涩的”代码,大家可看看“设计模式”、“重构”一类的书籍。 关于面向对象,应该会有更加全面描述,但我经验不多,阅历也浅,不好再为这种模糊的东西多费笔墨了。所以,此时此刻,我想面向对象的核心可能就是一个概念:封装。什么是封装?我们可以简单回顾一下历史。 Once upon a time。计算机科学的前辈们曾经用纸带来表示一条条指令,把它放到计算机里面,然后计算机就有了一些基于二进制的动作。比如说把地址线电平变成然后从数据线个内存字节上的内容取出来。这个时候,我们可以认为这些指令其实没有任何形式的封装。(哦,可能还是有的,比如说内存芯片自己会自动的内容放到数据总线上。)这个时候,每个动作都是一条指令,我们要从内存中读取数据,那起码需要两个动作:指定一个地址和读取一个数据。 后来,时代不同了,我们有了汇编。这个时候,我们读取一个内存数据,我们只需要用一条指令,比如:mov A, #0xa6。很好,我们把机器碼封装成了更加有意义的指令。我们还可以把一堆指令划分成不同的逻辑模块,然后通过一个call指令来调用。酷,我们还把一堆指令封装成函数了!但数据呢?似乎数据本身还没有任何意义上的抽象支持。 好,C用什么办法帮我们组织数据呢?类型!好,我们看到了已经不是0xa6上的一串0101010了,起码我知道它应该代表一个字符char*或者是一个数字int。我还可以帮这些数据起名字!不仅如此,我们还有struct跟tepydef来定义新的类型!太酷了!于是,我们把程序的数据变得更加有意义了。可能就只是C被成为结构化的编程语言的原因吧。 但人是不会轻易满足的。C好是好,但还不够好。第一,C的数据结构细节在语法上是无法隐藏的,这意味着任何人都可以访问,人们常常会因为便利的原因用一些跟这个数据结构关系不强的代码来访问结构的字段,造成了各种各样的模块耦合。第二,每一个功能类似,操作的数据相近的函数都需要重新定义,代码可以用函数的方式重用,但接口确用重新定义,导致调用者也要做相应修改,基于接口的解偶没有办法很好地操作。这都导致了用C写程序常常有牵一发而动全身的感觉。 好,到此,我已经把

文档评论(0)

max + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档