为什么在java中记录被认为是产品类型而类不是这样?

ruyhziif  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(323)

Java16将正式提供record特性,据作者之一说,这是一种产品类型。
我了解记录的内部状态范围是从成员字段构造的笛卡尔积空间,因此是积类型的一个示例。但是对于传统的oop类来说,这不一样吗?为什么程序员很少认为类是产品类型的一个例子?
(事实上,我倾向于认为对于继承,超类对于其子类来说也是一种较弱的求和类型。)

ulydmbyx

ulydmbyx1#

从类型理论的Angular 来看,笛卡尔积类型是一组元组,由单个“字段”类型的值组成。它不允许突变。java 14+ record 类型是不可变的,因此 record 和笛卡尔积类型。
从同样的Angular 来看,对象类型必须允许变异。然而,经典类型理论不允许(数学)值发生变异。这意味着必须将对象类型建模为一组函数(lambda表达式),这些函数从对象的一个状态Map到下一个状态。
(同样的方法也被用于在纯函数式语言中模拟突变。变异是通过从以前的状态/环境/上下文创建一个新的状态/环境/上下文来建模的。)
所以。。。。
但是对于传统的oop类来说,这不一样吗?
不;见上文。
为什么程序员很少认为类是产品类型的一个例子?
基本上是因为他们那样做是错误的。
类型理论不是意见问题。这是数学。一个数学命题要么被证明是正确的,要么是不正确的。为as编程语言提出的类型理论要么被证明是正确的(在一定的约束条件下),要么是不正确的。任何不支持变异的oo类型理论都是不正确的,因为对象状态的变异是oo的核心。
关于类型理论有很好的教科书。如果你真的想了解这些东西,你应该买一本读一读。

相关问题