首先不得不提的一个概念是, 类 与 对象;
这在 任何面向对象的语言中, 都是一个优先度极高的概念, 我首先了解到的概念则是: 类是对象的集合, 是对象的抽象化, 对象是类的实例, 是类的具象化. 在归纳总结中, 将具有某些共同属性 及 方法的概念, 实物, 进行抽象化, 就是在 java 中常常谈到的类;
而在事实上, 我也是这样做的. 如果要定义一个人:
就属性而言, 有 name, age, sex; 就方法而言, 有 eat, sleep, work 等等;
但属性本身的 类型定义, 方法的参数以及返回值定义, 更多的是从一种经验主义的角度出发, 来为它们进行定义, 将类与实际生活相联系, 进而完成定义. 我只是定义, 却不思考为什么这样定义, 如果需要作出必要的优化调整, 往往也无从下手, 类与类之间的组合依赖聚合等等关系, 也是从经验主义出发, 说到底, 是将程序 , 类的构架本身作为一种现实场景来看待, 使用.
但在 算法4 中, 却从另一个角度解释了类:
数据类型指的是一组值和一组对这些值的操作的集合, 定义和使用数据类型的过程, 又被称为数据抽象, 而在数据抽象中的一个基础概念: 对象是能够承载数据类型的值得实体.
由此扩展开来, 其实从小就在一直培养, 灌输着这样一种概念. 在数学中, 会接触到 : 整数, 正数, 负数, 小数, 未知数 种种概念, 而后会学习到各种各样的 函数.
稍稍分析则会发现:
数本身就拥有值, 而对不同的数, 我们定义了不同的操作, 以及对这些相应的操作拥有不同的结果(返回值). 正数: 可以 + - * / 对这些不同的操作, 会有不同的结果, 就像在 java中调用不同的方法, 取到不同的返回值. 对于 负数, 我们又额外定义了一条操作, 两个负数相乘, 结果为正, 对 0 又规定了 0 不能作为除数, 这种过程本身就是一种数据类型的定义, 用语言上的描述将数据类型可以进行的操作, 操作的规则进行进一步的限制与定义. 而之前却并没有意识到这样的联系, 有所不同的是, 在编程以前, 大多是使用数据类型, 赋予数据类型最基本的属性: 值, 并使用相应的函数操作这些值, 仅此而已.
而在编程的过程中, 由使用者变成了造物主, 我们自己定义并使用数据类型, 由我们本身来定义 它的属性, 定义它的方法, 由方法来限定数据类型的功能, 在使用数据类型的时候, 我们的注意力集中在API描述的操作上而不会关心数据的表示; 在实现抽象数据类型时, 我们的注意则集中在数据本身, 并实现对数据的各种操作.
数据类型指的是一组值, 和对这些值操作的集合.