- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
什么是面向对象编程-Read
第一部分 概念、实践和应用第1章 什么是面向对象编程
最近,软件行业中的几乎每个人都被面向对象编程所吸引,甚至经理、主管和市场人员都喜欢对象技术。几乎没有什么东西比面向对象更好。看起来,面向对象软件似乎成为每个人孜孜以求的东西。人们可能会奇怪,面向对象到底是什么,它与我们已经使用了数十年的方法有何不同。软件开发人员可能会有被忽视的感觉,而且认为,因为面向对象的出现,他们的许多经验以及历尽艰辛获得的技术变得没有用处。在这种情况下,理解下列内容会有所帮助:
究竟什么是面向对象软件开发?
它的优点是什么?
它和进行软件开发的传统方法有什么不同?
它对传统软件开发技能有什么影响?
如何成为面向对象编程人员?
1.1 背 景
程序员开发软件的历史已经有数十年了,他们使用各种不同的编程语言,例如Algol,COBOL,Lisp,C,Pascal等等,来实现各种规模的系统——从非常小的程序到大型系统。非常小的程序指小程序,例如汉诺塔的解决方法、纸牌游戏、简单的快速排序实现方法等等,我们编写这些程序作为课程指定的家庭作业或者仅仅用于学习。这些程序并没有任何商业价值。它们帮助我们学习新的概念和语言。相反,大型系统是指涉及到大型问题,例如库存控制、字处理、医院病人管理、天气预报、个人资金管理的软件系统。这样的系统需要由编程人员和设计人员组成的小组协同工作才能实现。并且,这些系统由公司出售,用以赚取利润。在设计和实现小型程序中学到的经验和教训对于解决大型问题会有帮助。在日常生活中,我们使用以各种语言实现的系统。我们也在使用这些语言和系统的经验中学到了许多知识。所以,为什么我们要转换到不同的编程方式?继续阅读下面的内容,在阅读下面的内容之后,答案应该是显而易见的。
1.1.1 面向对象编程示例
在提出一个问题后(例如,问题的口头或书面说明),如何使用某种语言(例如C)设计和实现解决这个问题的方案呢?将它分解为多个便于处理的部分,这些部分便是模块。然后,我们设计许多数据结构,并在其中保存数据,我们还实现许多函数(也称为过程,或者例程)以对这些数据进行操作。函数修改数据结构,将它们保存到文件中并打印数据。我们对系统的所有了解都转换成了一组函数。我们工作的重点就是这些函数,因为没有它们,就无法完成任何有用的操作。这种编程方法称为面向过程编程,在这种方法中,函数是根本要点。之所以这样称呼它,是因为它的重点在于过程。它以函数的形式来思考问题,所以,它也称为问题的功能分解。
注意:
在C和C++中,术语过程、函数、子程序和例程之间没有差别。然而,在Pascal、 Modula-2和Eiffel中,术语函数是指返回计算值的例程,术语过程是指接收某些参数和执行某个操作,但是不向调用者返回任何值的例程。在本书中,术语过程、函数和例程将互换使用,它们的含义是相同的。Algol、Fortran、Pascal和C等编程语言都称为过程语言。
然而,当我们更详细地研究这种实现时,我们发现,在数据结构中的信息对我们更加重要。让我们最感兴趣的是保存在那些数据结构中的值,它已经处于次要地位。过程只是一些修改数据结构的简单工具,在没有这些数据结构的情况下,过程不能做任何有用的事情。我们花费了大量时间来设计这些过程,甚至在关键不在这里的时候也把主要精力放在这些过程上。而且,在正在运行的程序中,这些过程中的代码永远不会改变。正是不同数据结构中的数据在程序的生存期内不断改变。从这种意义上说,过程是非常没有趣味的,因为它们是静态的。我们来举一个简单的例子,想像一个银行系统,在这里,客户可以有各种不同的银行帐号(例如存款帐号、支票帐号和贷款帐号),允许客户存款、提款和在帐号之间转帐。如果这个系统用C实现,我们可能看到这样的一组过程1。
typedef unsigned long AccountNum;
typedef int bool;
bool MakeDeposit(AccountNum whichAccount, float amount);
float WithDraw(AccountNum whichAccount, float howmuch);
bool Transfer(AccountNum form, AccountNum to,
float howmuch);
AccontNum可以仅仅是一个正整数。我们可以用一个简单的数据结构来管理帐号:
// Just a plain bank account record
struct Account {
char* name; /* name of account holder */
AccountNum accountId;
/* and many other details */
f
原创力文档


文档评论(0)