外观
05.进阶面向对象、类与封装的概念、类的真正形态
约 2117 字大约 7 分钟
类与封装C++编程语言个人
2022-06-15
十三、进阶面向对象(上)
1、你考虑过吗
日常生活中,我们都习惯于对事物进行分类。那么,这种分类的思想是否可以引入程序设计中呢?
2、面向对象基本概念
面向对象的意义在于
- 将日常生活中习惯的思维方式引入程序设计中
- 将需求中的概念直观的映射到解决方案中
- 以模块为中心构建可复用的软件系统
- 提高软件产品的可维护性和可扩展性
类和对象是面向对象中的两个基本概念
- 类:指的是一类事物,是一个抽象的概念
- 对象:指的是属于某个类的具体实体
- 类是一种模型,这种模型可以创建出不同的对象实体
- 对象实体是类模型的一个具体实例
一个类可以有很多对象,而一个对象必然属于某个类。
3、生活中的类和对象


4、类和对象的意义
类用于抽象的描述一类事物所特有的属性和行为
- 如:电脑拥有CPU,内存和硬盘,并且可以开机和运行程序
对象是具体的事物,拥有所属类中描述的一切属性和行为
- 如:每一只老虎都有不同的体重,不同食量以及不同的性情
5、一些有趣的问题
- 类一定存在实际的对象吗?
- 类的对象数目是确定的吗?
- 类一定都来源于现实生活中吗?
- 类都是独立的吗?类之间存在关系吗?
- 对象实例一定只属于一个类吗?
- 对象实例可能完全相同吗?
6、小结
- 面向对象是当今软件开发中的重要方法
- 类和对象是面向对象理论中的基本概念
- 类和对象均来源于日常生活中
- 每个类可以有多个对象
- 每个对象必然属于某个类
十四、进阶面向对象(下)
1、面向对象基本概念
类之间的基本关系
继承
- 从已存在类细分出来的类和原类之间具有继承关系( is-a )
- 继承的类(子类)拥有原类(父类)的所有属性和行为
组合
- 一些类的存在必须依赖于其它的类,这种关系叫组合
- 组合的类在某一个局部上由其它的类组成
类之间的基本关系 - 继承

- 类之间的基本关系 - 组合

2、类的表示法

3、类的表示法 - 简化

问题︰
1、类之间的继承关系没有表示出来
2、继承而来的属性和行为需要重复声明
4、类的表示法 - 改进1

问题:需要使用划线来表示属性和行为,不适合于编程开发!
5、类的表示法 - 改进2

问题:使用中文进行属性和行为的描述,绝大多数编译器无法接受!
6、类的表示法 - 改进3

思考:如何用程序设计中的概念描述类的属性和行为?
7、类的表示法 - 改进4

8、编程实验:类的表示法

9、小结
- 类之间可以存在继承关系或组合关系
- 继承关系中子类拥有父类的一切属性和行为
- 组合关系是类之间整体和部分的关系
- 类及类之间的关系可以有不同的表示法
- 编译器对类的表示法有具体的要求
十五、类与封装的概念
1、类的组合
电脑一般而言是由CPU,内存,主板,键盘和硬盘等部件组合而成。

思考:
学习电脑组装需要多少时间?
学习电脑组装是否需要学习显示器,内存,主板,键盘和硬盘等部件的设计与制造?
2、类的封装
- 类通常分为以下两个部分
- 类的实现细节
- 类的使用方式

- 当使用类时,不需要关心其实现细节
- 当创建类时,才需要考虑其内部实现细节
例:
普通用户使用手机
只需要学习如何发短信,打电话,拍照,等等
手机开发工程师
要考虑手机内部的实现细节
封装的基本概念
根据经验:并不是类的每个属性都是对外公开的
- 如:女孩子不希望外人知道自己的体重和年龄
- 如:男孩子不希望别人知道自己的身高和收入
而一些类的属性是对外公开的
- 如:人的姓名,学历,国籍,等
必须在类的表示法中定义属性和行为的公开级别
- 类似文件系统中文件的权限
C++中类的封装
- 成员变量:C++中用于表示类属性的变量
- 成员函数:C++中用于表示类行为的函数
- C++中可以给成员变量和成员函数定义访问级别
public
- 成员变量和成员函数可以在类的内部和外界访问和调用
private
- 成员变量和成员函数只能在类的内部被访问和调用
3、编程实验:类成员的访问属性

4、类成员的作用域
- 类成员的作用域都只在类的内部,外部无法直接访问
- 成员函数可以直接访问成员变量和调用成员函数
- 类的外部可以通过类变量访问public成员
- 类成员的作用域与访问级别没有关系
- C++中用struct定义的类中所有成员默认为public
5、编程实验:类成员的作用域

6、小结
- 类通常可以分为使用方式和内部细节两部分
- 类的封装机制使得使用方式和内部细节相分离
- C++中通过定义类成员的访问级别实现封装机制
- public成员可以在类的内部和外界访问和调用
- private成员只能在类的内部被访问和调用
十六、类的真正形态
1、问题:经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了!!!
2、类的关键字
- struct在C语言中已经有了自己的含义,必须继续兼容
- 在C++中提供了新的关键字class用于类定义
- class和struct的用法是完全相同的
- class和struct有什么区别?
- 在用struct定义类时,所有成员的默认访问级别为public
- 在用class定义类时,所有成员的默认访问级别为private

3、编程实验:class的初探

4、小实例
- 需求:开发一个用于四则运算的类
- 提供setOperator 函数设置运算类型
- 提供setParameter 函数设置运算参数
- 提供result函数进行运算
- 其返回值表示运算的合法性
- 通过引用参数返回结果
5、类的真正形态
- C++中的类支持声明和实现的分离
- 将类的实现和定义分开
.h 头文件中只有类的声明
- 成员变量和成员函数的声明
.cpp源文件中完成类的其它实现
- 成员函数的具体实现
6、实例分析:Operator类的分析



7、小结
- C++引进了新的关键字class用于定义类
- struct和class的区别在于默认访问级别的不同
- C++中的类支持声明和实现的分离
- 在头文件中声明类(使用方式)
- 在源文件中实现类(内部细节)
