Является ли класс типом данных Algabraic? - PullRequest
0 голосов
/ 07 ноября 2019

Я читаю о типах данных Algabraic. Все статьи пишут о них как о контейнере, который может включать другие типы. И мне кажется, похоже, что класс делают. Я прав?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Я предполагаю, что когда вы говорите «класс», это относится к классам из парадигмы объектно-ориентированного программирования.

Ответ - нет.

Класс - это шаблон для создания объектов. Объекты имеют как поведение, так и состояние. Алгебраические типы данных больше похожи на типы объединения и продукта. Они поддерживают состояние, но у них нет никакого поведения. У ADT нет методов, если вы сравниваете их с объектами.

Однако вы можете имитировать ADT, используя объекты и объекты, используя ADT (если у вас есть поддержка экзистенциальных типов данных)

0 голосов
/ 08 ноября 2019

«Поддержка алгебраических типов данных» означает способность объединять любые заданные типы A и B в кортежи (A, B) (типы продуктов) и непересекающиеся объединения A | B (типы сумм).

Почти каждый современный язык так или иначе поддерживает типы продуктов. Вы можете думать о классах как о типах продуктов.

Но концепция типов сумм несколько враждебна объектно-ориентированному способу моделирования вещей (откуда берутся классы).

...