设为首页 加入收藏

TOP

1.3.2 消息传递与方法调用
2013-10-07 15:26:45 来源: 作者: 【 】 浏览:75
Tags:1.3.2 消息 传递 方法 调用

1.3.2   消息传递与方法调用

使用面向对象方式设计和实现的程序具有与众不同的编程(www.cppentry.com)模式。在面向对象程序中,类和对象表现为服务器,使用类和对象的模块(如C++(www.cppentry.com)中的函数)表现为客户,客户通过特殊的方式请求服务,本小节着重讨论这种服务请求模式。

例1-2

一次橄榄球赛赌博由一个文件来描述,该文件包含一些记录,每条记录代表一个赌注,记录如下:

 

其意义为:

前四个字符是下注者的标志。本例中,A1Y4代表某位下注者。

接着的四个字符代表两个球队,每个球队由两个字符标志。本例中,两个球队是芝加哥熊队(CB)和底特律狮队(DL),CB出现在DL之前,表示下注者认为芝加哥熊队将打败底特律狮队。

其后三个字符是对胜负点数的猜测,三个字符中的第一个是+或-,分别表示至少或最多。本例中,+28表示下注者认为芝加哥熊队至少赢底特律狮队28分。

其后八个字符表示比赛日期。本例中为10/04/98,即1998年10月4号。

剩下的字符表示下多少注。本例中为5万美元。

赌注文件有一个2000年问题,因为表示比赛日期的年份只有两位数(如1998表示为98),因此,需要编写一个程序将bets.dat文件转换为y2kCompliantBets.dat文件,bets.dat文件中的日期都是20世纪的。程序清单1-1例举了一个用面向对象C++(www.cppentry.com)语言完成的程序。

程序清单1-1   对赌注文件进行转换的C++(www.cppentry.com)程序

 
在main函数中,只有一次对顶层函数getline的调用,其他调用都是采用消息传递机制,这种方式提高了代码的可靠性。请看程序段
 
即使没有文档这也是易于理解的,因为我们知道in和out分别为输入流对象和输出流对象。由于buffer是一个string对象,如下语句
 

的含义也是非常清晰的。但即使是在面向对象编程(www.cppentry.com)中,文档也是不可缺少的!

对string类的成员函数insert的调用也体现了信息隐藏的优越性。insert函数必须对字符串进行重构并移动当前的字符串,为新插入的字符留出空间。这些实现细节对客户来说是不可见的,客户也正是因为对这种细节的不可见而受益,因为它只需向string对象发送带有正确参数的消息即可,具体的低层实现细节就由服务器去完成了。 
由于设计良好的类仅输出客户所需的服务,因而类接口通常只包含高层的方法,类的数据成员通常为类的高层接口提供服务。如程序清单1-1所示,客户端代码工作于高层,而消息传递机制也强调了类和对象作为一种服务器,其接口实际上就是它所称的服务集。如果类和对象的服务难于请求,就别指望大家乐于使用,因此,一个设计良好的类应该提供清晰而易于使用的服务。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1.4 课后练习 下一篇1.3.1 客户/服务器模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)