模块化、对象和状态.ppt

模块化、对象和状态.ppt

ID:52452019

大小:72.00 KB

页数:18页

时间:2020-04-07

模块化、对象和状态.ppt_第1页
模块化、对象和状态.ppt_第2页
模块化、对象和状态.ppt_第3页
模块化、对象和状态.ppt_第4页
模块化、对象和状态.ppt_第5页
资源描述:

《模块化、对象和状态.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库

1、模块化、对象和状态前面我们介绍了组成程序的各种基本元素,并且看到了如何把基本过程和基本数据组合起来,构造出复合的实体,在此过程中我们认识到了抽象的重要作用。但是对于程序设计而言,这些手段还不够用。特别的,我们需要一些能够帮助我们构造起模块化的大型系统的策略。这一章里,我们要研究两种特点很鲜明的组织策略,它们源于对于系统结构的两种非常不同的“世界观”。第一种策略将注意力集中在对象上,将一个大型系统看成一大批对象,它们的行为可能随着时间的进展而不断变化。另一种组织策略将注意力集中在流过系统的信息流上,

2、非常像电子工程师观察一个信号处理系统。赋值和局部状态我们关于世界的常规观点之一,就是将它看作聚集在一起的许多独立对象,每个对象都有自己的随着时间变化的状态。所谓一个对象“有状态”,也就是说它的行为受到它的历史的影响。我们可以用一个或几个状态变量刻画一个对象的状态,在它们之中维持有关这一对象的历史,即能够确定该对象当前行为的充分的信息。一个由许多对象组成的系统里,其中的这些对象极少会是完全独立的。每个对象都可能通过交互作用,影响其他对象的状态。如果一个系统中的状态变量可以分组,形成一些内部紧密结合的

3、子系统,每个子系统与其他子系统之间只存在松散联系,此时将这个系统看作是由一些独立对象组成的观点就会特别有用。要使一个计算模型成为模块化的,就必须能把它分解为一批能够模拟系统里的实际对象的计算对象,其中每个计算对象有它自己的一些局部状态变量。特别的,如果我们希望通过程序设计语言里常规的符号名字去模拟状态变量,那么语言里就必须提供一个赋值运算符,是我们能用它去改变与一个名字相关联的值。赋值和局部状态下面看一个银行帐户支取现金的例子:我们用过程withdraw完成此对帐户的一次取款(假设帐户有金额100

4、),它有一个参数amount表示支取现金量。如果给定的支取额在相应帐户尚有足额余款,那么返回支取后帐户的剩余款项,否则返回Insufficientfunds(金额不足)的提示。如:(withdraw25);:75(withdraw25);:50(withdraw60);:“Insufficientfunds”(withdraw15);:35可以看到withdraw25求值了两次,但是产生了不同的结果。赋值和局部状态这种过程的新的行为方式,到目前为,我们还没有见到过。我们需要一些新的实现withdr

5、aw过程的方式。我们可以用一个变量balance表示帐户的现金余额,并且我们还要注意到balance应该只能有withdraw唯一直接访问,它只能是一个局部状态变量:(definewithdraw(let((balance100))(lambda(amount)(if(>=balanceamount)(begin(set!balance(-balanceamount))balance)"Insufficientfunds"))))这里使用了特殊形式set!,其一般语法表示为:(set!

6、)这里应该是一个符号,是任何表达式。Set!将修改,使它的值变成求值得到的结果。赋值和局部状态过程withdraw里还使用了begin特殊形式,一般的,对表达式的求值:(begin)将导致表达式按顺序求值,最后的值将作为整个begin形式的返回值。将set!与局部变量相结合,形成了一种具有一般性的程序设计技术,但采用这一技术也引起了一

7、个严重问题:一旦语言里引进了赋值,代换就不再适合作为过程应用的模型了。作为这种情况的一个结果,我们现在还没有办法在技术上理解为什么过程withdraw会有上面所说的行为方式。因此我们需要开发一个新模型,来解释这以过程。在此之前我们先来看看withdraw所提出的问题的几种变形。赋值和局部状态下面过程make-withdraw能够创建出一种“提款处理器”。其形式参数描述了有关账户的初始余额值。(define(make-withdrawbalance)(lambda(amount)(if(>=bala

8、nceamount)(begin(set!balance(-balanceamount))balance)"Insufficientfunds")))赋值和局部状态下面用make-withdraw创建了两个对象:(defineW1(make-withdraw100))(defineW2(make-withdraw100))(W150);:50(W270);:30(W240);:“Insufficientfunds”(W140);:10可以看到,W1和W2是相互完全独立的对象,每一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。