
1 面向对象编程简介
例如,开发一个需要从串口读取数据的微控制器程序。然后,可以用C语言编写一个串口数据读取函数,在串口中断函数中触发,读取寄存器地址。对于这样的操作,用 C 编写就足够了。
但是,当程序规模很大时,C语言就变得无能为力了。比如用C语言写一个12306订票系统,显然是一个错误的选择。但是,使用C++、JAVA、C#等高级语言编写,构建大型软件架构既方便又快捷。
要构建大型软件,必须使用面向对象的设计思维。虽然C语言也可以实现面向对象的编程,但是C++语言的特性使得编写面向对象的程序更加容易。
通过下面对面向对象编程的深入学习,我们了解了什么是面向对象编程。学习C++的语言特性,甚至使用C语言实现面向对象编程。
注意:我这个时候才刚刚开始介绍面向对象编程,所有的介绍都是“理论”知识。你可以不用死记硬背。你大概可以看到和理解。
在后续的C++语法编程学习中,面向对象编程的这些特点会一点一点的体现出来,这些理论知识也会有所体现。所以,学完C++编程之后,再回头看看这些“理论”知识,也是完全可以理解的。
1.1 什么是面向对象编程
面向对象编程的思想类似于人们在日常生活中处理问题的方式。在自然界和社会生活中,一个复杂的事物总是由许多部分组成的。例如,一部手机由屏幕、外壳、CPU主板等部件组成;房子由客厅、卧室、厨房和浴室等组成;一所学校由许多学院、行政部门和学生班级组成。
人们在做手机的时候,不会先设计和制造CPU主板,然后是屏幕,然后是外壳。而是分开设计和制造 CPU 主板、屏幕和机箱。最后,把它们放在一起。在装配过程中,各个零件之间有一定的联系,以协调工作。例如,当用户按下开机键时,CPU主板启动,屏幕亮起等等。这是面向对象编程的基本思想。为了进一步说明问题,下面讨论一些相关概念。
1.1.1 个对象
客观世界中的任何事物都可以看作是一个对象,或者说,客观世界是由成千上万个对象组成的。物体可以是自然物体(如手机、房子、狗等),也可以是社会生活中的工作,如做饭、开会等。甚至一篇文章、一张图片、一个计划等都可以被视为对象。
例如,一所学校由教室、教师、学生等数据组成,这些数据可以看作是一个对象。学校可以被认为是一个系统。因此,对象是系统内置的基本单位。
那么,当手机作为物体使用时,它具有以下两个特点:
(1)手机的静态特性,比如手机的外壳、屏幕、内存芯片等,这样的静态特性称为:属性。
(2)手机的动态特性,比如开机、打电话、玩游戏等,这样的动态特性就叫做:行为。
例如,当用户使用手机拨打电话时,需要先按下要拨打的号码,最后按下按键才能拨打电话。这样的操作是用户向手机对象指定的信息,以便手机对象可以拨打电话。那么,赋予手机对象的信息一般称为:消息。
任何对象都应该具备这两个特性,即属性和行为高级语言程序设计(c语言描述)第2版,能够根据外界给出的信息进行相应的操作。一个对象通常由一组属性和一组行为组成。例如,手机是一个具有外壳、屏幕、CPU主板等属性的物体。而且,它可以在没电的情况下自行关闭;当它收到来电时,铃声会响起等等。用户在操作手机时,可以给手机发送指定的消息,并用它来拨打电话。
最终,我们可以看到我们周围的一切都可以被视为一个物体。对象可以有自己的属性和行为。此外,可以受其他对象的影响以执行不同的动作。
因此,面向对象编程的思想更接近于人类日常行为的运作方式。更接近人类的思维方式。
使用面向对象编程设计复杂的软件系统时,首要问题是确定系统由哪些对象组成,并设计这些对象。在C++中,每个对象由“数据和函数(即操作码)”两部分组成,如下图:
数据体现了前面提到的“属性”,比如一个三角形对象,它的3条边长就是它的属性。函数用于对数据进行操作以实现某些功能。例如,一个三角形的面积可以从边长计算出来。计算一个三角形的面积并输出相关数据就是上面提到的“行为”,在编程中称为“方法或函数”。在对象中调用函数就是向对象发送消息,要求对象执行一个动作。
所以,我们可以得出结论:
(1) 对象由属性和行为组成;
(2) 对象的属性,C++编程中调用:data;
(3) 对象的行为,在 C++ 编程中调用:函数;
1.1.2 封装与信息隐藏
例如,在手机中,用户只看到它的外壳和屏幕,却看不到CPU芯片等内部电子元件。那么,对于手机对象,有些属性是对外可见的,有些属性是对外屏蔽的。对于用户来说,我们只需要按一下电源键就可以开机。用户无需了解手机内部的开机动作和原理。那么,这大大降低了用户使用手机的复杂度。
因此,对于手机对象来说,它的一些属性和行为是隐藏的,有些是对用户开放的。这是电话对象的基本定义。
那么,我们在定义一个手机对象的时候,一定要仔细考虑如何封装和“隐藏”那些用户不需要知道的部分。即“将对象的内部实现与外部行为分离”。人们在外部控制它,而特定的操作细节在内部实现并且对用户是不透明的。
面向对象编程方法的一个重要特征是“封装”。所谓“封装”是指两个方面:
(1) 将相关数据和操作代码封装在一个对象中,形成一个基本单元,每个对象相互独立,互不干扰。
(2)对外界隐藏了对象的某些部分,也就是隐藏了它的内部细节,只留下少量的接口,以便与外界联系,接收外界的消息。
这种向外界隐藏的做法被称为:信息隐藏。信息隐藏也有利于数据安全,防止无关人员了解和修改数据。
C++对象中的函数名是对象的对外接口,外界可以通过函数名调用这些函数来实现一定的行为(函数)。
1.1.3 抽象
在编程方法中,经常使用术语“抽象”。其实,“抽象”这个概念并不是抽象的,它是非常具体的高级语言程序设计(c语言描述)第2版,人们已经习惯了。例如,我们常用的名词“人”是一种抽象。因为,这个世界上只有特定的人,比如张三、李斯、王舞。所有具有中国国籍的人都归为一类,称为“中国人”。这是一个抽象,所有国家的人,比如中国人、美国人、日本人等等,都被抽象为“人”。
在现实生活中,你只能看到一个具体的人,而不能看到一个抽象的人。抽象的过程是对相关事物的共性进行概括和浓缩的过程。例如,所有具有可以向前滚动的车轮的陆地车辆统称为“汽车”。以汽油机为动力的抽象为“汽车”,以马为动力的抽象为“马车”。“整数”是对 1、2、3 等所有不带小数点的数字的抽象。
抽象的作用是对同类事物的相同本质进行概括和概括。如果你用自己的电视,你去别人家看不同品牌的电视,你肯定可以操作,因为它具有所有电视节目的共同特点。C 和 C++ 中的数据类型是一组具体数字的抽象。例如,“整数数据”是对所有整数的抽象。
1.1.4 继承与重用
如果汽车制造商想要生产一种新型汽车,一般不会从头开始设计,而是选择现有车型作为基础,增加一些新功能,开发出新车型。这是提高生产力的常用方法。
如果在软件开发过程中已经建立了一个名为A的“类”,而你想再创建一个名为B的“类”,那么A类和B类的内容基本相同,B类只是基于A类. 添加一些属性和行为,显然没有必要从头设计一个新的类,而只需在A类的基础上增加一些新的内容就可以得到B类。
这就是面向对象编程中的“继承”机制。使用继承可以简化编程的步骤。例如:如果大家已经充分了解了猫的特征,那么现在我们将描述“小猫”的特征,说明不需要从头开始介绍猫是什么,只需要说明“小猫是年龄小猫”。这简化了人们对事物的理解和叙述,简化了工作程序。
C++提供了继承机制,可以很方便的利用已有的类创建新的类,可以重用部分甚至大部分已有的软件。大大节省了编程工作量。这就是“软件可重用性”的思想,也就是我们常说的“软件可重用性”。不仅可以使用过去构建的类,还可以使用别人使用的类或类库中存储的类来正确处理这些类。可以使用,大大缩短了软件开发周期,对大型软件的开发具有重要意义。
1.1.5 多态性
如果有几个对象相似但不相同,有时人们会要求它们在发送相同消息时做出不同的响应并执行不同的操作。这种情况称为“多态性”。比如张三、李四、王武是同一所学校的学生,所以他们的属性和行为基本相同。不过,他们不在同一个班,所以当他们听到铃声响起时,他们会去三个不同的教室。
因此,当张三、李四、王舞收到与“上课铃声响起”相同的信息时,他们分别做出了不同的动作。这种状态称为多态性。
比如在Windows系统下,用鼠标双击一个文件对象(这是给对象发送消息),如果对象是可执行文件,程序会被执行,如果对象是文本文件,启动文本编辑器并打开文件。像这样的情况很多。
在C++中,所谓的“多态性(polymorphism)”是指:相关的不同类通过继承生成,它们的对象对同一消息会做出不同的反应。多态性是面向对象编程的一个重要特性,它可以增加程序的灵活性。
1.2 面向对象编程的特点
传统的过程式编程围绕函数展开,一个函数对应一个函数。所有数据都是公开的,一个函数可以使用任意一组数据,一组数据可以被多个函数使用,如下图:
可以看出,程序是从main()函数开始,然后调用各个功能模块函数来工作的。同时,各个功能模块可以任意调用各个子模块功能,任意操作各种数据。
那么,当程序功能非常复杂的时候,这种面向过程的设计就显得力不从心了。容易造成程序异常,无法满足复杂、大规模的软件功能设计需求。
面向对象编程采用不同的方法。它面对一个物体。实际上,每组数据都有特定的用途,是某种操作的对象。也就是说,一组操作调用一组数据。比如a,b,c是三角形的三个边,只与计算三角形面积和输出三角形的操作有关,与其他无关。我们把这三个数据和三角形的操作码放在一起,封装成一个对象。
程序员的任务包括两个方面:
(1) 设计所需的各种类和对象,即决定哪些数据和操作封装在一起。
(2) 考虑如何向对象发送消息以完成所需的任务。
设计程序的逻辑就是不断地向各种对象发送命令,让这些对象工作,完成它们职责范围内的工作。当每个对象的工作完成时,整体任务也完成了。显然,面向对象编程对于大规模任务非常有效。可以大大降低程序员的工作难度,减少出错的机会。
总结
在本章中,我们将介绍“面向对象编程”的特点。面向对象编程主要有以下特点:
(1) 数据定义;
(2) 数据封装和隐藏;
(3) 数据抽象;
(4) 数据的可重用性;
(5) 数据的多态性;
因此,我们知道要进行“面向对象编程”,需要考虑这些方面的设计。下一章,我们开始介绍C++的面向对象语言特性,并使用C++的语法编写程序。了解 C++ 中的面向对象编程。
读者要仔细分析,掌握每个知识点,然后总结自己对知识点的理解。自己总结出来的知识,理解深刻,是自己掌握的知识。
请登录后发表评论
注册
社交帐号登录