"为什么要写类"
对于很多OOP的程序员来说, 类
就是class
写一个类,
是因为这个语言必须从写一个类开始,
是因为学的时候就是要写一个类,
是因为框架里要写一个类,
...
造一个房子
我打算造一间屋子, 但只有一些最原始的材料, 树, 泥土, 草(基本数据类型: int, bool...)。我是如此的心灵手巧, 聪明地使用这些原始材料搭出了一间茅草屋。为了顺利地建造第二间茅草屋, 我们还把建造的过程记录了下来。这样我们就可以造出一间一模一样的茅草屋。
我的朋友汤姆也想要造一座和我一样的屋子, 这没有什么困难的, 把建造方法告诉他就好了。但是汤姆很高, 之前的门太低了。 他必须要把门造的更高。 但是这样建造的步骤就和之前有些不一样了。 他造出来的门有个洞, 他这可不乐意了。
我发现其实造个大的门, 和之前基本一样。 造门前, 需要把树木加工成木板。 也就是说, 木板这个相对高级的材料(对象, 抽象数据类型), 是由原始材料加工而来。把加工木板的材料和工序单独记录下来, 我以后就可以重复利用木板这个高级材料了啦。
我发现木板还不止能造门, 还能用来造桌子, 造床。 这个高级材料真是太好用啦
同理还有由泥沙造出来的砖头, 用草编的绳子...我创造了世界!!!
抽象数据类型与类
如果说木材是对树木的加工做制成, 对象
就是我们对数据类型的自定义。而类
则是制造木材的工序, 是定义这种数据类型的模板。
这里就引出了我们对对象
的定义: 对象
是一种抽象数据类型
, 而抽象数据类型
由一组数据及其对数据的操作组成的。
而面向对象编程
(OOP)就是以定义抽象数据类型为中心的编程方式。
类的'分类'
如果说定义了一种抽象数据类型的类才是我们想要的「真类」, 那么想对应的, 也有我们为了利用class的方便, 把过程式的想法塞在class中的「伪类」
比如在定义了一堆静态方法的工具类, 就是我们为了方便地分门别类地存放各种函数
在编程了一段时间之后, 我们写出来的类越来越越不像类了, 就是因为那些类不再是抽象数据类型了。
当然, 并不是说在编程过程中所有的类都是「真类」就是好的, OO的本质是复用, 把握好抽象的尺度, 才能让我们的程序最有效率地实现复用。