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

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

Date: 2009-11-27 02:37 pm (UTC)
From: [identity profile] gdy.livejournal.com
Мне кажется, это отличие между Smalltalk и CLU. Или между программированием на С++ с помощью value types и programming to interface.

Я могу попробовать коротко написать, что мне кажется сутью статьи, но я не уверен, что вы хотели спросить именно про это.
Общее то, что ADT и объекты скрывают реализацию от пользователей, то есть от функций, которые работают только с интерфейсами экземпляров ADT и класса. Различие в том, что некоторые "сложные" операции в случае ADT могут быть частью определения типа и поэтому знать, что оба аргумента реализованы одинаково, а в случае "объектов" (как их определяет автор, Smalltalk или COM) сложные операции могут работать только с интерфейсами, возможно, по-разному реализованными.
В первом случае мы в программе не можем смешивать различные реализации множества, во втором - можем, но ценой неэффективной реализации сложных операций, либо жирного интерфейса, ограничивающего разнообразие реализаций (вплоть до единственной и тогда всё вырождается в ADT).

Date: 2009-11-29 05:35 am (UTC)
From: (Anonymous)
совершенно целиком и полностью согласен

Date: 2009-12-02 03:05 pm (UTC)
From: [identity profile] gdy.livejournal.com
Или так:
Пользователи обращаются к методам объекта косвенно (через virtual method table, dynamic dispatch или ещё что-то), это позволяет писать код, который может работать с разными реализациями абстрактного интерфейса, но из-за этого же такой код не может знать ничего про реализацию объектов. Если функция использует два объекта, то даже если она является член-функцией класса одного из объектов, она не имеет понятия о реализации второго объекта.
В случае ADT косвенного обращения нет, и это позволяет писать функции, имеющие доступ к реализации обоих аргументов.
Edited Date: 2009-12-02 03:19 pm (UTC)

Date: 2009-12-02 06:22 pm (UTC)
From: (Anonymous)
Кстати, здесь не учитывается такая дивная вещь как мультиметоды. Только что вот сообразил.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 04:43 pm
Powered by Dreamwidth Studios