![f3b172c5a8cc9834e02f5e152d64019a.png](https://i-blog.csdnimg.cn/blog_migrate/4b71688ac007b333bf18971b28b49a7c.jpeg)
面向对象方法(深入理解一下为什么会有类)
什么是过程化程序设计?
"""
过程化程序设计,通常使用自顶向下逐步精细化的过程,把要解决的问题的功能进行分解,直到能用程序设计语言提供的工具解决为止。
注:当要解决非数值计算的问题,分解过程会很困难
"""
什么是面向对象的程序设计?
"""
程序设计的方法提供了创建工具的功能。
在解决一个问题时的步骤:
1. 程序猿首先考虑的是需要哪些工具
2. 创建这些工具
3. 用这些工具解决问题(工具即对象)
面向对象的主要解决问题:创建新的数据类型
"""
具体的例子?
问题:求圆的周长
过程化设计方法:
- 输入圆的半径或直径
- 利用S = 2πr 或 πd
- 计算周长
面向对象设计方法:
- 首先考虑需要什么工具
- 如果计算机能提供一个称为圆的工具,可以以某种方式保存一个圆,并能提供圆的一些特性(半径、直径、周长、面积,问题就简单多了)
- 程序只要定义一个圆类型的变量,以它的方式将一个圆保存在变量中,然后让这个变量提供这个圆的面积和周长。
- 这样,不必知道圆是如何保存,也不必知道圆的面积和周长,就像在过程化设计中一样,要保存一个整型值就定义一个整型变量,把值赋给变量,不用管这个值在内存如何保存。
- 当需要对这个整型变量进行运算时,只需写一个表达式,不管运算如何实现。
程序设计语言事先不知道要解决的问题,所以不可能提供需要的工具,因此,需要程序猿定义圆这样的类型。
用面向对象的思想讨论数据结构
每种数据结构主要针对一种逻辑结构,研究如何在计算机中存储这种结构以及这种存储方法中数据的操作如何实现。因此数据结构的实现体现为一个存储结构以及一组操作的函数。
面向对象思想主要是创建工具,从而提高代码的重用率,减少重复编码。将这种思想用于数据就是希望把每个数据结构做成工具,即一个数据结构封装成一个类。
当需要使用一个数据结构时,不需自己实现,直接定义对应类的对象。因此,学习数据结构不仅需要知道每种数据结构的存储和处理方法,还需要知道如何封装才能创造出更适合用户需求的工具。
面向对象方法中数据结构的描述和实现
过程化方法中的数据结构:
就是对每一个数据结构介绍其存储实现和运算实现。
- 存储实现:是一组存储数据元素及元素之间的关系的变量
- 运算实现:是一组算法,通常用伪代码、流程图描述
使用方法:程序猿需将这组变量和算法用使用的高级语言表示
面向对象中的数据结构:
考虑三方面:
- 数据的存储
- 操作的实现
- 如何将数据结构封装成一个类
这样的话,使用的时候,无须实现,而可以直接利用这个类的对象
思考:
面向对象的数据结构,除了要了解
- 如何实现这个数据结构
- 了解如何使工具更便于用户使用
- 如何规范话所制作的工具
用面向对象方法中的类讨论数据结构可从以下3个层面说明:
- 定义数据结构的需求,即对应的逻辑结构及运算
- 定义数据结构的用户接口,即工具的外形。同一类工具都必须用相同的使用方法
- 电视机:频道选择、音量控制、画面质量控制
- 在面向对象方法中,工具的外形对应为一个抽象的类
- 数据结构的实现。每种数据可以有若干中实现方法,每种实现就是一个类,就是产品的特定的设计。
- 它的对象就是根据这个设计制造出来的产品
- 每种实现都要实现数据结构的逻辑特性,并给用户一个统一的接口,为保证这一点,每个具体类都必须从对应的抽象类继承。
由于数据结构关注的是数据元素之间的关系是如何保存的,而数据元素可以是任意类型。因此,所有的数据结构的类(包括抽象类和非抽象类)都是类模板,模板参数为所处的数据元素的类型。