Bob 大叔前天更新了博客 Classes vs. Data Structures , 对 面向对象中的 Object 与面向过程当中的 Data Structure 做了一番比较,颇有意思。html
在文章中,Bob 大叔经过问答的形式,从 Class 与 DataStructure 的定义中推导出Class 与 Data Structure 是一对相对的存在。二者在三方面存在相对关系:编程
注意,这里讨论的 Class 与 Data Structure 是 C,Java 等类 C 语言中的概念,而不是 Lisp,Haskell 等函数式语言中的概念。数据结构
从第一条来看,咱们须要从新审视之前在语言中被认为是数据结构的对象。List
Map
等容器在日常的观点中是属于数据结构的,但它们其实只是暴露了可操做的函数而已,数据结构是隐藏在具体实现中的,所以其属于类而不是数据结构。开发中使用的 DTO
因为只含有数据,虽然是表面是类,本质倒是数据结构的。函数
类是对具体世界的建模,对外暴露的是 API,也就是它能作什么,这是咱们了解一个类的途径。若是咱们认同类对具体世界的建模是合理的话,咱们对具体世界的认识也是从世界展现给咱们的行为开始的。子曰:“察其言而观其行”,这应该是咱们认识一我的的第一步。设计
从第二条来看,类增长类型容易而增长行为困难,数据结构相反。人若要长出第三只胳膊来,不知道须要多少万年的进化,造我的就容易多了。code
第三条是从依赖方向上说的,全部依赖数据结构的源文件在数据结构有修改时都须要从新编译,耗时比较长;类将行为和实现分离,使用方只须要依赖接口就能够了,对实现不用关心,当实现有变化时,只须要编译变化的类,两者的关联是在运行时关联起来的。当你须要分配任务时,你只需指定谁谁干什么,不须要操心怎么作,各人有各人的实现方式,但最终你知道的就是活作完了。htm
类和数据结构其实就是面向对象和面向过程不一样设计哲学的体现,从分析来看,面向对象更符合咱们平时对世界的认知。面向过程的编程方法将数据彻底暴露出来,更符合计算机的认知,计算机就是 CPU 围绕着寄存器、内存来运算。从设计上看,面向对象比面向过程抽象层级更高,更适合大规模的业务,小巧的业务使用面向过程会更轻便一些。对象