7.8 观点6:面向对象编程通过在对象间传递消息驱动程序
假设要编写这样一个程序,玩家A和玩家B玩石头剪刀布,由裁判判定输赢。如果使用作为非面向对象编程语言的C语言编写,程序就会像代码清单7.3中那样;如果使用作为面向对象编程语言的C++编写,程序就会代码清单7.4中那样,能看出其中的差异吗?
代码清单7.3 未使用面向对象编程语言的情况(C语言)
/*玩家A确定手势*/
a=GetHand();
/*玩家B确定手势*/
b=GetHand();
/*判定胜负*/
winner=GetWinner(a,b);
代码清单7.4 使用了面向编程语言的情况(C++)
//玩家A确定手势
a=PlayerA.GetHand();
//玩家B确定手势
b=PlayerB.GetHand();
//由裁判判定胜负
Winner=Judge.GetWinner(a,b);
在C语言的代码中,仅仅使用了GetHand()和GetWinner()这种独立存在的函数。与此相对在C++的代码中,因为函数是隶属于某个类的,所以要使用PlayerA.GetHand()这样的语法,表示属于类PlayerA的函数GetHand()
也就是说C++等面向对象编程语言编写程序的话,程序可以通过由一个对象去调用另一个对象所拥有的函数这种方式运行起来。这种调用方式被称为对象间的“消息传递”。在面向对象语言中所说的消息传递指的就是调用某个对象所拥有的函数。即便是在现实世界中,我们也是通过对象间的消息传递来开展业务或消磨时间的。在面向对象编程中还可以对对象的消息传递建立模型
如果未使用面向对象编程语言,那么可用到流程图表示程序的运行过程。流程图表示的是处理过程的流程,因此通常把非面向对象语言称为“过程型语言”。而且可以把面向对象编程语言和面向过程型语言,面向对象编程和面向过程编程分别作为一对反义词来使用。
如果使用的是面向对象编程语言,那么可以使用UML中的“时序图”和“协作图”表示程序的运行过程。在图7.5中对比了流程图和时刻图。
图7.5 流程图和时序图的对比
关于流程图已经没有必要再介绍了。在时序图中,把用矩形表示的对象横向排列,从上向下表示时间的流逝,用箭头表示对象间的消息传递(即程序上的函数调用)。在这时只需抓住图中的大意即可
沉浸在面向过程编程中的程序员们通常都习惯于用流程图思考程序的运行过程,可是为了实践面向对象编程,就有必要改用时序图来考虑程序的运行过程
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论