什么是对象, 什么是类

"为什么要写类"

对于很多OOP的程序员来说, 就是class
写一个类,
是因为这个语言必须从写一个类开始,
是因为学的时候就是要写一个类,
是因为框架里要写一个类,
...

造一个房子

我打算造一间屋子, 但只有一些最原始的材料, 树, 泥土, 草(基本数据类型: int, bool...)。我是如此的心灵手巧, 聪明地使用这些原始材料搭出了一间茅草屋。为了顺利地建造第二间茅草屋, 我们还把建造的过程记录了下来。这样我们就可以造出一间一模一样的茅草屋。

我的朋友汤姆也想要造一座和我一样的屋子, 这没有什么困难的, 把建造方法告诉他就好了。但是汤姆很高, 之前的门太低了。 他必须要把门造的更高。 但是这样建造的步骤就和之前有些不一样了。 他造出来的门有个洞, 他这可不乐意了。

我发现其实造个大的门, 和之前基本一样。 造门前, 需要把树木加工成木板。 也就是说, 木板这个相对高级的材料(对象, 抽象数据类型), 是由原始材料加工而来。把加工木板的材料和工序单独记录下来, 我以后就可以重复利用木板这个高级材料了啦。

我发现木板还不止能造门, 还能用来造桌子, 造床。 这个高级材料真是太好用啦
同理还有由泥沙造出来的砖头, 用草编的绳子...我创造了世界!!!

抽象数据类型与类

如果说木材是对树木的加工做制成, 对象就是我们对数据类型的自定义。而则是制造木材的工序, 是定义这种数据类型的模板

这里就引出了我们对对象的定义: 对象是一种抽象数据类型, 而抽象数据类型由一组数据及其对数据的操作组成的。

面向对象编程(OOP)就是以定义抽象数据类型为中心的编程方式。

类的'分类'

如果说定义了一种抽象数据类型的类才是我们想要的「真类」, 那么想对应的, 也有我们为了利用class的方便, 把过程式的想法塞在class中的「伪类」
比如在定义了一堆静态方法的工具类, 就是我们为了方便地分门别类地存放各种函数

在编程了一段时间之后, 我们写出来的类越来越越不像类了, 就是因为那些类不再是抽象数据类型了。
当然, 并不是说在编程过程中所有的类都是「真类」就是好的, OO的本质是复用, 把握好抽象的尺度, 才能让我们的程序最有效率地实现复用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容