Class 类是Algabraic数据类型吗?

Class 类是Algabraic数据类型吗?,class,types,algebraic-data-types,Class,Types,Algebraic Data Types,我正在阅读有关Algabraic数据类型的文章。所有关于它们的文章都是关于可以包含其他类型的容器的。对我来说,这门课也很相似。我说的对吗?我假设当你说“类”时,它指的是来自面向对象编程范例的类 答案是否定的 类是用于创建对象的模板。对象具有行为和状态。 代数数据类型更像并集和乘积类型。他们确实维护国家安全, 但他们没有任何行为。如果将ADT与对象进行比较,则ADT没有方法 但是,您可以使用对象和使用ADT的对象来模拟ADT(假设您支持存在数据类型)我假设当您说“类”时,它指的是来自面向对象编程范

我正在阅读有关Algabraic数据类型的文章。所有关于它们的文章都是关于可以包含其他类型的容器的。对我来说,这门课也很相似。我说的对吗?

我假设当你说“类”时,它指的是来自面向对象编程范例的类

答案是否定的

类是用于创建对象的模板。对象具有行为和状态。 代数数据类型更像并集和乘积类型。他们确实维护国家安全, 但他们没有任何行为。如果将ADT与对象进行比较,则ADT没有方法


但是,您可以使用对象和使用ADT的对象来模拟ADT(假设您支持存在数据类型)

我假设当您说“类”时,它指的是来自面向对象编程范例的类

答案是否定的

类是用于创建对象的模板。对象具有行为和状态。 代数数据类型更像并集和乘积类型。他们确实维护国家安全, 但他们没有任何行为。如果将ADT与对象进行比较,则ADT没有方法

但是,您可以使用对象和使用ADT的对象来模拟ADT(假设您支持存在的数据类型)

“代数数据类型的支持”意味着能够在元组
(A,B)
(产品类型)和不相交的并集
A | B
(总和类型)中组合任何给定类型
A
B

几乎所有现代语言都以某种方式支持产品类型。您可以将类视为产品类型

但是,和类型的概念在某种程度上与面向对象的建模方式(类来自哪里)不相容

“支持代数数据类型”是指能够在元组中组合任何给定类型
A
B
(A,B)(乘积类型)和不相交的并集
A | B
(求和类型)

几乎所有现代语言都以某种方式支持产品类型。您可以将类视为产品类型


但是,和类型的概念在某种程度上与面向对象的建模方式(类来自哪里)不相容

求和类型有点不利于面向对象的建模方式
为什么说不利于,请详细说明一下?求和类型和继承都是建模方式
是概念之间的关系<代码>动物=猫|狗
类猫扩展动物;类狗扩展动物
。使用sum类型,您可以枚举所有变量。有了继承权,你就不能。OOP方法告诉我们,
Animal
应该对新的变体进行扩展,而不应该试图将它们全部列举出来。几十年来,主流OOP语言一直没有提供一种方便的方法来建模和类型。OOP中最接近的解决方法是访问者模式。
sum类型有点不利于面向对象的建模方式
为什么说不利于,请详细说明一下?sum类型和继承都是建模方式
是概念之间的关系<代码>动物=猫|狗
类猫扩展动物;类狗扩展动物
。使用sum类型,您可以枚举所有变量。有了继承权,你就不能。OOP方法告诉我们,
Animal
应该对新的变体进行扩展,而不应该试图将它们全部列举出来。几十年来,主流OOP语言一直没有提供一种方便的方法来建模和类型。OOP中最能解决问题的是访问者模式。