avva: (Default)
[personal profile] avva
Я искренне пытался понять эту статью, сравнивающую объекты и абстрактные типы данных, но в итоге всего лишь сломал мозг. Основной аргумент мне кажется то ли невнятным, то ли очевидно неверным. В результате ее прочтения я решил, что объекты и ADTs более похожи друг на друга, чем до того считал (т.е. пришел к выводу, противоположному утверждениям статьи).

Скорее всего, виноват я, а не автор, и у меня просто не получается понять, что он говорит (главным образом, когда он говорит об OOP). Кстати, если вы понимаете эту статью и согласны с ней, я был бы рад задать вам пару вопросов. Короче, основным результатом моей фрустрации стало то, что я начал читать Types and Programming Languages Пирса. Вот прочитаю и буду все знать про типы. Пока что очень нравится, отлично объясняет и заинтересовывает. Кстати, обнаружился черновик русского перевода. Мне он ни к чему, но может кому-то пригодится.

Date: 2009-11-27 01:01 am (UTC)
From: [identity profile] kouzdra.livejournal.com
АТД легко выражаются через экзистенциальные типы. Но это сугубо двухуровневая иерархия - "интерфейс - множество реализаций" (присутствующая в куче языков - начниная с Clean и кончая почти стандартными уже расширениями Haskell), для представления же обектоности - с неограниченной иерахией наследования нужна система типов дикой мощности (это все 80-е было чуть ли не самой challenging задачей в области теории типов, пока ее в 1994 Пирс формально не решил (http://dblp.uni-trier.de/rec/bibtex/journals/jfp/PierceT94) - решение скучное и техническое, но требует очень мощной системы типов)

Date: 2009-11-27 01:03 am (UTC)
From: [identity profile] avva.livejournal.com
Кук вообще игнорирует наследование в своей статье; с его точки зрения разница между ADTs и объектами вовсе не в этом.

Date: 2009-11-27 01:13 am (UTC)
From: [identity profile] kouzdra.livejournal.com
Я при пролистывании не понял, попробую потом еще посмотреть. Но вообще - тема изрядно изъезженная и уже почти в mainstream перешедшая - в виде тех же Haskell и ML (АКА F#). Что там нового можно сейчас сказать, как-то уже не очень ясно.

Date: 2009-11-27 02:11 am (UTC)
From: [identity profile] psr1913plus16.livejournal.com
Если абстрагироваться от деталей (которые в каких-то случаях важны, в каких-то - нет), то OOP - это результат применения к ADT процедуры _популяризации_, в результате которой оно становится доступным для понимания простым (commodity) программистам. После чего им можно дать задание запрограммировать результат анализа предметной области и не беспокоиться, что они сломают на этом мозг. Для собственно Computer же Science, ее существенных и интересных задач, OOP не имеет никакого значения.

Date: 2009-11-27 09:41 am (UTC)
From: [identity profile] abreslav.livejournal.com
Мне кажется, в статье разница прописана довольно четко: в случае объектов есть позднее связывание, которое автор описывает как применение функций высших порядков, в случае АТД, как верно отметил [livejournal.com profile] kouzdra, все можно описать через экзистенциальные типы.

Если есть еще конкретные вопросы, я готов вчитаться глубже и попробовать пообсуждать.

January 2026

S M T W T F S
    1 2 3
4 5 6 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 7th, 2026 02:58 am
Powered by Dreamwidth Studios