写点什么

吐槽 OOP

用户头像
顿晓
关注
发布于: 2021 年 05 月 09 日
吐槽OOP

轮到 OOP 规范了,这块是重灾区,十分需要规范来支持。


首先要理解及时刻关注 OOP 的目的:让代码组织可维护,或降低维护难度,或规模增长时维护难度增长可控。

强调这点是为了区分可工作的代码和可维护的代码之间的天壤之别。这也是导致重灾区的头号因素,拿着可工作但不可维护的代码,然后发现和 OOP 没啥联系,或者发现了错误的联系并深信之。


OOP 基本概念澄清:类型有原始类型和复合类型,在大部分编程语言中都有实物对应,表示也基本一致;对象的表示差异就大了,需要吐槽一下。


不过,吐之前还是先强调下对象的作用,或设计目的:让代码维护变简单的一种方法。进一步明确一下,是组织代码逻辑的一种方法,代码除了逻辑,另一半是数据,组织数据的方法是类型,定义各自领域的复合类型。


槽点 1:本来数据和逻辑是正交分解的,数据管理用类型定义,逻辑管理用对象关系的定义。但在使用中,很容易一锅烩,分不清数据处理和逻辑处理。


这点很重要,需要多个角度来阐述。究其原因,造成混淆的因素有语言设计的问题,也有使用者的问题。不过就是语言设计存在问题,也可以借助编程规范来正确使用,所以主要还是使用者的问题。


语言设计方面,对象做的好的有 go,rust。去掉了 class 概念,因为用复合类型就够了,class 是过度设计。关键是能组合定义对象的方法。


小结一下,OO 是个很普世的方法,符合人脑概念的形成。编程方法从这个角度开始也是不错的,但编程需要精确性,所以人为把概念分成类型和对象。为了方便区分可以这样理解,类型之间是没有关系的,只有对象有关系。也可以从解决问题的角度理解,类型解决数据的组织,对象解决逻辑的组织。举个例子,函数参数传数据就用类型,传函数/回调就用对象。


vo,dto 这些就是为了避免对象滥用提出来的约束方法,统一为复合类型就很好理解,当然扩充了类型的分类也很有用。

对象的精华在接口,interface 尤其是能默认实现的接口。接口相当于关系的协议让逻辑表达变得简洁。

发布于: 2021 年 05 月 09 日阅读数: 9
用户头像

顿晓

关注

因观黑白愕然悟,顿晓三百六十路。 2017.10.17 加入

视频号「编程日课」 知识星球「俺的死党顶」

评论

发布
暂无评论
吐槽OOP