现代新的简化”对象“和”面向对象“的定义

本文探讨了传统面向对象定义的局限性,并提出了新的对象定义:对象是能够被多态调用的顶级模块。多态性的概念被重新定义为运行时调用方式,强调了面向对象定义的动态性和适应性。文中还总结了对象的重要本质特性,如可变状态,并讨论了标识作为区分对象的关键作用。同时,文章指出类和方法定义、反射、并发对象等不应纳入新的对象定义中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传统面向对象定义已经过时,过去定义已经不能满足新语言新思想的发展,来自A Proposal for Simplified, Modern Definitions of "Object" and "Object Oriented" 一文试图提出一种新的对象定义,以容纳适应新的发展形势。

新的对象定义是:An object is a first-class module that is invoked polymorphically
对象是能够被多态调用的顶级模块。

这里模块module定义可以是传统语言的类Class,也可以是函数语言的函数function。这样,面向对象定义比以前更加宽广,可以包含Scala等新的函数语言。

多态性polymorphically被定义成运行调用方式,而传统OO语言的继承只是其中一个代码机制的实现,在运行时实现多态,包括运行时的Mixin实现,在不改变不变动原来代码情况下将新的代码混入运行。这就更加侧重运行时的对象定义,而不是传统意义上编码阶段的对象定义了。

作者还总结了对象哪些特性是对象的重要本质特性,其中最重要的是可变状态Mutable State,值对象是一种不可变对象,大部分函数语言试图通过回避可变状态来实现高并发性能,但是这也许有些激进,因为可变状态的应用越来越多。

我们有办法从可变性分离出不变性,我们也有办法去控制可变性(先容纳再控制的哲学),比如在GOF设计模式中只有State, Memento, Observer, Decorator, 以及Chain or Responsibility 和 Adapter都需要可变性. 通过模式,我们达到重点分界可变状态和不可变状态,然后围而分别歼之的策略,这样,不可变的安全区域才会变得更加广阔,变成一种缺省语境。

作者将标识Identity也归为对象必须的特性,在领域驱动设计DDD中我们知道实体的特点是标识,用来区别某个具体的对象,标识可以有能力来区别两个引用是否指向同一个对象,相同对象的定义是它们的引用都指向一个单一的对象创建事件的结果。

作者认为其他特性如类Class 或方法定义Multi-methods都不适合纳入新的对象定义之中,还有比如反射reflection, 静态类型static typing, 接口interfaces, first-class classes, 并发对象concurrent objects, 同步synchronization。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值