代码运行环境
本节教程所有代码都是在win11系统,Qt 5.12.12版本,mingw编译工具环境编写运行。创建的工程类型为Qt Console Application。
1.面向对象程序设计
面向对象(Object Oriented)是一种将显示问题抽象的一种方式,是一种以对象为中心的思维方式。面向对象是模拟自然界认识和处理的事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(Object),同类的对象还能抽象出共性,形成类(Class)。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类于外部的接口(interface),对象通过消息(message)进行通信。
面向对象的程序设计:
- 对象 = 数据结构 + 算法
- 程序 = 对象 + 对象 + 对象 + … + 发送消息
2.抽象
2.1 数据抽象
结构化设计方法应用的是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。
数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。
2.2 实体、类、对象之间的关系
1.现实中的实体可以抽象出类别的概念,比如老虎、豹子抽象出猫科动物这一类别。
2.计算机不会给类分配内存,因为类是抽象概念;计算机会为类实例化的对象分配内存。
2.3 对象的概念
对象是计算机内存中的一块区域。通过内存分块每个对象在功能上相对保持独立。
这些内存不但存储数据,也存储代码。这保证对象是受保护的,只有对象中的代码能访问存储于对象中的数据。这清楚地限定了对象所具有的功能,并且使得对象不受未知外部事件的影响,从而使自己的数据和功能不会因此遭受破坏。
对象之间只能通过函数调用也就是发送消息来实现相互通信。
当对象的一个函数被调用时,对象执行内部的代码来响应该调用,从而使对象呈现一定的行为。这个行为及其呈现出来的结果就是该对象所具有的功能。
3.封装
封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。通过限制对属性和操作的访问权限,可以将属性“隐藏"在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。
封装性增加了对象的独立性,从而保证了数据的可靠性。外部对象不能直接操作对象的属性,只能使用对象提供的服务。
例如:我们不用关心电视机的内部工作原理,电视机提供了选台、调节音量等功能让我们使用。
4.继承
继承表达对象的一般与特殊的关系。特殊类的对象具有一般类的全部属性和服务。
当定义了一个类后,又需要定义一个新类,这个新类与原来的类相比只是增加或修改了部分属性与操作,这时可以使用原来类派生出新类,新类中只需描述自己所特有的属性和操作,大大提高了程序的可重继承性大大简化了对问题的描述从而提高了程序设计、修改、扩充的效率。
5.多态
多态性:同一个消息被不同对象接收时,产生不同结果即实现同一接口,不同方法。
一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。
继承和多态性组合,可以生成很多相似但又独一无二的对象。继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对不同对象产生不同表现形式。这样不仅提高了程序设计的灵活性,而且减轻了分别设计的负担。