?

Log in

No account? Create an account
о типах (программистское) - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

о типах (программистское) [ноя. 27, 2009|02:49 am]
Anatoly Vorobey
Я искренне пытался понять эту статью, сравнивающую объекты и абстрактные типы данных, но в итоге всего лишь сломал мозг. Основной аргумент мне кажется то ли невнятным, то ли очевидно неверным. В результате ее прочтения я решил, что объекты и ADTs более похожи друг на друга, чем до того считал (т.е. пришел к выводу, противоположному утверждениям статьи).

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

Comments:
[User Picture]From: ygam
2009-11-27 12:56 am

Книжка Пирса - очень хорошая!
(Ответить) (Thread)
[User Picture]From: alexeybobkov
2009-11-27 12:59 am
Прекрасная книга.
Пирс вообще крут. При описании даже самого тривиального, казалось бы, понятия находит нетривиальные примеры и неочевидные тонкости.
(Ответить) (Thread)
[User Picture]From: kouzdra
2009-11-27 01:01 am
АТД легко выражаются через экзистенциальные типы. Но это сугубо двухуровневая иерархия - "интерфейс - множество реализаций" (присутствующая в куче языков - начниная с Clean и кончая почти стандартными уже расширениями Haskell), для представления же обектоности - с неограниченной иерахией наследования нужна система типов дикой мощности (это все 80-е было чуть ли не самой challenging задачей в области теории типов, пока ее в 1994 Пирс формально не решил - решение скучное и техническое, но требует очень мощной системы типов)
(Ответить) (Thread)
[User Picture]From: avva
2009-11-27 01:03 am
Кук вообще игнорирует наследование в своей статье; с его точки зрения разница между ADTs и объектами вовсе не в этом.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: tt_net
2009-11-27 02:02 am
Ну да, мозг ломается с разгону.
Странно, что на Peter Wegner ссылаются поищу эту статью, всегда считал его адоптом ООП.
Если совсем интересно внятное мнение могу рекомендовать обратится к Jim Wooley (http://geekswithblogs.net/cwilliams/archive/2008/07/25/124017.aspx), обращаться можно здесь http://www.thinqlinq.com/ он обычно отвечает почти сразу.
Для меня он стал ментором, подняв мой рейтинг очень сильно, думаю и ему будет интересно обсудить Types and Objects.
Кстати после "Тhe OO composite pattern is a poor tool for GUIs" мне стало скучно, похоже парень ушел глубоко в теорию и давно не занимался практикой...
Ему бы с Rockford Lhotka поговорить (http://www.lhotka.net/) - как десять лет назад он сломал мое понимание ООП, так и работаю с CSLA не останавливаясь

(Ответить) (Thread)
[User Picture]From: kmmbvnr
2009-11-27 06:26 am
>>как десять лет назад он сломал мое понимание ООП,
А у него есть что почитать такого, ломающего понимание ООП?
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: kmmbvnr
2009-11-27 06:22 am
Интересно, а прочитав Concepts, techniques, and models of computer programming у меня сложилось мнение что ADT это всего лишь более общее понятие чем объекты.

В терминологии из этой книги объекты это Statefull, Closed and Secured ADT.
(Ответить) (Thread)
[User Picture]From: alexott
2009-11-27 08:14 am
а сделайте ссылку пожалуйста на главную страницу перевода - там есть координаты куда слать замечания и комментарии
(Ответить) (Thread)
[User Picture]From: avva
2009-11-27 11:41 am
Сейчас сменю ссылку.
(Ответить) (Parent) (Thread)
From: huzhepidarasa
2009-11-27 10:04 am
мне кажется, я понял, о чем статья, и готов отвечать на вопросы.
(Ответить) (Thread)
[User Picture]From: cousin_it
2009-11-27 11:41 am
The article is pretty poor. In truth Cook isn't comparing objects to ADTs; he's comparing his idea of a pure object system (no type checking, all objects are opaque so no binary operations, all classes freely subclassable) to his idea of a pure ADT-based system (statically typed, binary operations implementable, all types sealed). So in section 4 he points out some important-sounding theoretical differences, but in most industry languages those differences just evaporate completely (because objects are allowed access to other objects of the same class, etc.)
(Ответить) (Thread)
[User Picture]From: gdy
2009-11-27 02:37 pm
Мне кажется, это отличие между Smalltalk и CLU. Или между программированием на С++ с помощью value types и programming to interface.

Я могу попробовать коротко написать, что мне кажется сутью статьи, но я не уверен, что вы хотели спросить именно про это.
Общее то, что ADT и объекты скрывают реализацию от пользователей, то есть от функций, которые работают только с интерфейсами экземпляров ADT и класса. Различие в том, что некоторые "сложные" операции в случае ADT могут быть частью определения типа и поэтому знать, что оба аргумента реализованы одинаково, а в случае "объектов" (как их определяет автор, Smalltalk или COM) сложные операции могут работать только с интерфейсами, возможно, по-разному реализованными.
В первом случае мы в программе не можем смешивать различные реализации множества, во втором - можем, но ценой неэффективной реализации сложных операций, либо жирного интерфейса, ограничивающего разнообразие реализаций (вплоть до единственной и тогда всё вырождается в ADT).
(Ответить) (Thread)
From: (Anonymous)
2009-11-29 05:35 am
совершенно целиком и полностью согласен
(Ответить) (Parent) (Thread)
[User Picture]From: laformica
2009-11-29 07:44 pm
Лень читать статью, и не очень понимаю, почему сравниваются АТД и объекты, а не классы, но Bertrand Meyer дает следующее, довольно ясное определение:

A class is an abstract data type equipped with a possibly partial implementation.

т.е. как только появляется хоть какая-то имплементация, это уже класс, если только спецификация, это еще АТД. Объект, в свою очередь, это:

An object is a run-time instance of some class.

Сама книга называется Object Oriented Software Construction, и там хоть и есть спорные вещи, но я бы рекомендовал.
(Ответить) (Thread)
From: (Anonymous)
2009-11-30 06:01 am
эта книга чуть менее, чем полностью, состоит из спорных вещей, очень спорных вещей и откровенно неверных вещей. я ее в свое время купил за свои кровные $70 (кажется) плюс пересылка. мне случалось разбазаривать более крупные суммы на куда как менее полезные вещи, но такого расстройства от потраченных зря денег не испытывал никогда. если бы взял в библиотеке, наверное, не был бы так разочарован.

что касается данного определения класса, то все содержание статьи состоит из объяснения, почему оно неверно. понятно, что формально определение не может быть неверным. но (если верить статье и продолжать подходить формально) множество классов, определенное таким образом, пусто или слишком тривиально, чтобы о нем говорить на протяжении всего OOSC. привет из поста про английский язык. содержательно же это значит, что определение все-таки неверно.

наконец (идем от конца к началу) статья рассматривает типы и значения, не слишком стараясь разграничить их на уровне слов (из контекста понятно, о чем речь). под объектом часто понимается объектный тип, а под ADT — значение абстрактного типа (пафос статьи заключается в том, что объектный тип и ADT — содержательно разные вещи). а классы могут отождествляться с типами, а могут и не, а могут и вообще отсутствовать как класс, поэтому лучше о них молчать.
(Ответить) (Parent) (Thread)
From: textrider
2009-12-05 04:21 am
Хмм. Объект - это ПЕРЕМЕННАЯ, сложного типа. Абстактный тип данных - это именно ТИП ДАННЫХ.
(Ответить) (Thread)
From: tr1gger
2009-12-05 09:59 am
Как вредный математик не могу не прокомментировать что статья содержит ошибки, а автор не разобрался о чем пишет:
1. Уже на второй странице insert неправильно реализован.

2. "Two standard approaches to describe sets abstractly are as an algebra or as a characteristic function." Множества стандартно определяются аксиомами Цермело-Френкеля.
"The sort, or carrier set, of an algebra is often described as a set, making this definition circular" в математике нет циклических определений, автор откровенно лжёт.

Дальше статью не читал.
(Ответить) (Thread)