о типах (программистское)
Nov. 27th, 2009 02:49 amЯ искренне пытался понять эту статью, сравнивающую объекты и абстрактные типы данных, но в итоге всего лишь сломал мозг. Основной аргумент мне кажется то ли невнятным, то ли очевидно неверным. В результате ее прочтения я решил, что объекты и ADTs более похожи друг на друга, чем до того считал (т.е. пришел к выводу, противоположному утверждениям статьи).
Скорее всего, виноват я, а не автор, и у меня просто не получается понять, что он говорит (главным образом, когда он говорит об OOP). Кстати, если вы понимаете эту статью и согласны с ней, я был бы рад задать вам пару вопросов. Короче, основным результатом моей фрустрации стало то, что я начал читать Types and Programming Languages Пирса. Вот прочитаю и буду все знать про типы. Пока что очень нравится, отлично объясняет и заинтересовывает. Кстати, обнаружился черновик русского перевода. Мне он ни к чему, но может кому-то пригодится.
Скорее всего, виноват я, а не автор, и у меня просто не получается понять, что он говорит (главным образом, когда он говорит об OOP). Кстати, если вы понимаете эту статью и согласны с ней, я был бы рад задать вам пару вопросов. Короче, основным результатом моей фрустрации стало то, что я начал читать Types and Programming Languages Пирса. Вот прочитаю и буду все знать про типы. Пока что очень нравится, отлично объясняет и заинтересовывает. Кстати, обнаружился черновик русского перевода. Мне он ни к чему, но может кому-то пригодится.
no subject
Date: 2009-11-27 02:37 pm (UTC)Я могу попробовать коротко написать, что мне кажется сутью статьи, но я не уверен, что вы хотели спросить именно про это.
Общее то, что ADT и объекты скрывают реализацию от пользователей, то есть от функций, которые работают только с интерфейсами экземпляров ADT и класса. Различие в том, что некоторые "сложные" операции в случае ADT могут быть частью определения типа и поэтому знать, что оба аргумента реализованы одинаково, а в случае "объектов" (как их определяет автор, Smalltalk или COM) сложные операции могут работать только с интерфейсами, возможно, по-разному реализованными.
В первом случае мы в программе не можем смешивать различные реализации множества, во втором - можем, но ценой неэффективной реализации сложных операций, либо жирного интерфейса, ограничивающего разнообразие реализаций (вплоть до единственной и тогда всё вырождается в ADT).
no subject
Date: 2009-11-29 05:35 am (UTC)no subject
Date: 2009-12-02 03:05 pm (UTC)Пользователи обращаются к методам объекта косвенно (через virtual method table, dynamic dispatch или ещё что-то), это позволяет писать код, который может работать с разными реализациями абстрактного интерфейса, но из-за этого же такой код не может знать ничего про реализацию объектов. Если функция использует два объекта, то даже если она является член-функцией класса одного из объектов, она не имеет понятия о реализации второго объекта.
В случае ADT косвенного обращения нет, и это позволяет писать функции, имеющие доступ к реализации обоих аргументов.
no subject
Date: 2009-12-02 06:22 pm (UTC)