1700415810
如果使用的是面向对象编程语言,那么可以使用UML中的“时序图”和“协作图”表示程序的运行过程。在图7.5中对比了流程图和时刻图。
1700415811
1700415812
图7.5 流程图和时序图的对比
1700415813
1700415814
1700415815
1700415816
1700415817
关于流程图已经没有必要再介绍了。在时序图中,把用矩形表示的对象横向排列,从上向下表示时间的流逝,用箭头表示对象间的消息传递(即程序上的函数调用)。在这时只需抓住图中的大意即可
1700415818
1700415819
沉浸在面向过程编程中的程序员们通常都习惯于用流程图思考程序的运行过程,可是为了实践面向对象编程,就有必要改用时序图来考虑程序的运行过程
1700415820
1700415821
1700415822
1700415823
1700415825
计算机是怎样跑起来的 7.9 观点7:在面向对象编程中使用继承、封装和多态
1700415826
1700415827
“继承”(Inheritance),“封装”(Encapsulation),“多态”(Polymorphism,也称为多样性和多义性)被称为面向对象编程的三个基本特性。在作为面向对象编程语言的C++,Java,C#等语言中,都已具备了能够用程序实现以上三个特性的语法结构
1700415828
1700415829
继承指的是通过继承已存在的类所拥有的成员而生成新的类。
1700415830
1700415831
封装指的是在类所拥有的成员中,隐藏掉那些没有必要展示给该类调用者的成员。
1700415832
1700415833
多态指的是针对同一种消息,不同的对象可以进行不同的操作
1700415834
1700415835
其实仅仅介绍如何在程序中使用这三个基本特性,就已经需要一本书了。因而有很多人就会被所学到的语法结构和编程技术中涉及的大量知识所束缚,以致不能按自己的想法编写程序。其实只要沉静下来,不拘泥于语法和技术,转而去关注使用这三个特性所带来的好处,就能顺应自己的需求恰当地使用面向对象编程语言了
1700415836
1700415837
只要去继承已存在的类,就能高效地生成新的类。如果一个类被多个类所继承,那么只要修正了这个类,就相当于把继承了这个类的所有类都修正了。只要通过封装把外界不关心的成员隐藏起来,类就可以被当作黑盒,变成了易于使用且便于维护的组件了。而且由于隐藏起来的成员不能被外界访问,所以也就可以放心地随意修改这些成员。只要利用了多态,生成对同一消息可以执行多种操作的一组类,使用这组类的程序员所需要记忆的东西就减少了。总之,无论是哪一点,都是面向对象编程所带来的好处,都可以实现开发效率和可维护性的提升。
1700415838
1700415839
稍后将介绍如何在实际的编程中使用继承。为了对类进行封装,需要在类成员的定义前指定关键词public(表示该成员对外可见)或是private(表示该成员对外不可见)。之前的代码清单7.2中省略了这些关键词。实现多态可以有多种方法,感兴趣的读者可翻阅面向对象语言的教材等相关资料。
1700415840
1700415841
1700415842
1700415843
1700415845
计算机是怎样跑起来的 7.10 类和对象的区别
1700415846
1700415847
前面介绍了有关面向对象的几种观点,应该已了解了面向对象编程。但再补充一些面向对象编程必不可少的知识。
1700415848
1700415849
首先,要说明一下类和对象的区别。在面向对象编程中,类和对象被看作是不同的概念而予以区别对待。类是对象的定义,而对象是类的实例(Instance)。经常有教材这样说明二者之间的关系:类是做饼干的模具,而用这个模具做出来的饼干就是对象。虽然这是个有趣的比喻,但如果这样类比的话,就有可能无法看清二者在实际编程中的关系(如图7.6所示)
1700415850
1700415851
图7.6 类和对象的关系就像饼干模具和饼干的关系
1700415852
1700415853
1700415854
1700415855
1700415856
在之前的代码清单7.2所示的程序中,定义了一个类MyClass。但是还无法直接使用类MyClass的成员,要想使用就必须在内存上生成该类的副本,这个副本就是对象(如代码清单7.5所示)
1700415857
1700415858
代码清单7.5 先创建类的对象然后再使用(C++)
1700415859
[
上一页 ]
[ :1.70041581e+09 ]
[
下一页 ]