1700415772
计算机是怎样跑起来的 7.8 观点6:面向对象编程通过在对象间传递消息驱动程序
1700415773
1700415774
假设要编写这样一个程序,玩家A和玩家B玩石头剪刀布,由裁判判定输赢。如果使用作为非面向对象编程语言的C语言编写,程序就会像代码清单7.3中那样;如果使用作为面向对象编程语言的C++编写,程序就会代码清单7.4中那样,能看出其中的差异吗?
1700415775
1700415776
代码清单7.3 未使用面向对象编程语言的情况(C语言)
1700415777
1700415778
/*玩家A确定手势*/
1700415779
1700415780
a=GetHand();
1700415781
1700415782
/*玩家B确定手势*/
1700415783
1700415784
b=GetHand();
1700415785
1700415786
/*判定胜负*/
1700415787
1700415788
winner=GetWinner(a,b);
1700415789
1700415790
代码清单7.4 使用了面向编程语言的情况(C++)
1700415791
1700415792
//玩家A确定手势
1700415793
1700415794
a=PlayerA.GetHand();
1700415795
1700415796
//玩家B确定手势
1700415797
1700415798
b=PlayerB.GetHand();
1700415799
1700415800
//由裁判判定胜负
1700415801
1700415802
Winner=Judge.GetWinner(a,b);
1700415803
1700415804
在C语言的代码中,仅仅使用了GetHand()和GetWinner()这种独立存在的函数。与此相对在C++的代码中,因为函数是隶属于某个类的,所以要使用PlayerA.GetHand()这样的语法,表示属于类PlayerA的函数GetHand()
1700415805
1700415806
也就是说C++等面向对象编程语言编写程序的话,程序可以通过由一个对象去调用另一个对象所拥有的函数这种方式运行起来。这种调用方式被称为对象间的“消息传递”。在面向对象语言中所说的消息传递指的就是调用某个对象所拥有的函数。即便是在现实世界中,我们也是通过对象间的消息传递来开展业务或消磨时间的。在面向对象编程中还可以对对象的消息传递建立模型
1700415807
1700415808
如果未使用面向对象编程语言,那么可用到流程图表示程序的运行过程。流程图表示的是处理过程的流程,因此通常把非面向对象语言称为“过程型语言”。而且可以把面向对象编程语言和面向过程型语言,面向对象编程和面向过程编程分别作为一对反义词来使用。
1700415809
1700415810
如果使用的是面向对象编程语言,那么可以使用UML中的“时序图”和“协作图”表示程序的运行过程。在图7.5中对比了流程图和时刻图。
1700415811
1700415812
图7.5 流程图和时序图的对比
1700415813
1700415814
1700415815
1700415816
1700415817
关于流程图已经没有必要再介绍了。在时序图中,把用矩形表示的对象横向排列,从上向下表示时间的流逝,用箭头表示对象间的消息传递(即程序上的函数调用)。在这时只需抓住图中的大意即可
1700415818
1700415819
沉浸在面向过程编程中的程序员们通常都习惯于用流程图思考程序的运行过程,可是为了实践面向对象编程,就有必要改用时序图来考虑程序的运行过程
1700415820
[
上一页 ]
[ :1.700415771e+09 ]
[
下一页 ]