Classes vs. Data Structures 读后思考

Bob 大叔前天更新了博客 Classes vs. Data Structures , 对 面向对象中的 Object 与面向过程当中的 Data Structure 做了一番比较,颇有意思。html

在文章中,Bob 大叔经过问答的形式,从 Class 与 DataStructure 的定义中推导出Class 与 Data Structure 是一对相对的存在。二者在三方面存在相对关系:编程

  • Classes make functions visible while keeping data implied. Data structures make data visible while keeping functions implied.(Classes 中函数是显性的而数据是隐含的,Data Structure 中数据是显性的而函数是隐含的)
  • Classes make it easy to add types but hard to add functions. Data structures make it easy to add functions but hard to add types.(Classes 易增长类型,不易增长函数; Data Structure 易增长函数而不易增长类型)
  • Data Structures expose callers to recompilation and redeployment. Classes isolate callers from recompilation and redeployment.(Data Structure 直接暴露给调用方,改变后须要从新编译和部署,Classes 改变后无需从新编译和部署)

注意,这里讨论的 Class 与 Data Structure 是 C,Java 等类 C 语言中的概念,而不是 Lisp,Haskell 等函数式语言中的概念。数据结构

从第一条来看,咱们须要从新审视之前在语言中被认为是数据结构的对象。List Map 等容器在日常的观点中是属于数据结构的,但它们其实只是暴露了可操做的函数而已,数据结构是隐藏在具体实现中的,所以其属于类而不是数据结构。开发中使用的 DTO 因为只含有数据,虽然是表面是类,本质倒是数据结构的。函数

类是对具体世界的建模,对外暴露的是 API,也就是它能作什么,这是咱们了解一个类的途径。若是咱们认同类对具体世界的建模是合理的话,咱们对具体世界的认识也是从世界展现给咱们的行为开始的。子曰:“察其言而观其行”,这应该是咱们认识一我的的第一步。设计

从第二条来看,类增长类型容易而增长行为困难,数据结构相反。人若要长出第三只胳膊来,不知道须要多少万年的进化,造我的就容易多了。code

第三条是从依赖方向上说的,全部依赖数据结构的源文件在数据结构有修改时都须要从新编译,耗时比较长;类将行为和实现分离,使用方只须要依赖接口就能够了,对实现不用关心,当实现有变化时,只须要编译变化的类,两者的关联是在运行时关联起来的。当你须要分配任务时,你只需指定谁谁干什么,不须要操心怎么作,各人有各人的实现方式,但最终你知道的就是活作完了。htm

类和数据结构其实就是面向对象和面向过程不一样设计哲学的体现,从分析来看,面向对象更符合咱们平时对世界的认知。面向过程的编程方法将数据彻底暴露出来,更符合计算机的认知,计算机就是 CPU 围绕着寄存器、内存来运算。从设计上看,面向对象比面向过程抽象层级更高,更适合大规模的业务,小巧的业务使用面向过程会更轻便一些。对象

相关文章
相关标签/搜索