thedeemon: (office)
[personal profile] thedeemon
Легкое чтиво на гуманитарную тему (ООП):
http://www.cs.cmu.edu/~aldrich/papers/objects-essay.pdf
На реддите обсуждения по существу не получилось, т.к. никто не стал читать.

Вкратце: повторное использование кода на уровне отдельных типов и модулей это маловато, более масштабный реюз получается при использовании фреймворков - скелетов приложений, куда надо вставлять свои куски. Для этого нужны интероперабельные4 модульно расширяемые3 нетривиальные2 абстракции1.
1) это первоклассные значения, предоставляющие некоторые сервисы (т.е. которые можно подергать за функции или попосылать им сообщения, а они что-то сделают или вернут), и скрывающие детали реализации.
2) нетривиальные - это когда функций/сервисов более одной. Если там лишь одна операция, то хватает и первоклассных функций. Но на практике часто нужно более одной доступной операции над некоторым абстрактным значением.
3) модульно расширяемые - когда можно свои реализации абстракций творить, не меняя их исходного определения.
4) интероперабельные - когда они могут друг друга за эти сервисы дергать, не зная конкретной имплементации, т.е. нужен рантайм полиморфизм, чтобы всякие Widget'ы единоообразно складывать и обрабатывать. В частности, это значит возможность обращаться как с одним типом с различными реализациями одного интерфейса (набора сервисов), т.е. простые хаскельные тайпклассы не годятся. И простые модули и Абстрактные Типы Данных тоже (подробности в статье).

Утверждается, что когда все перечисленное есть, тогда всем щастья, здоровья, успехов на работе и в личной жизни. В ОО языках это есть из коробки, а в диких, вроде Си и Standard ML, доступна имитация через ручное кодирование таблиц методов (используется вплоть до ядра линукса). От себя замечу, что в Окамле это есть даже в двух видах: собственно объектах и первоклассных модулях.

Date: 2014-10-08 10:58 am (UTC)
From: [identity profile] norguhtar.livejournal.com
Как это внезапно совпадает с моей картиной мира и тоталитарным навязыванием фреймворков ;)

Date: 2014-10-08 04:07 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Уровень статьи настолько 2000, джавабинзы, геттеры и сеттеры спасут мир, что не вижу смысла обсуждать. Зато в списке литературы первым нумером блистают Абади и Карделли. Ну пошли бы почитали их...

Date: 2014-10-08 06:21 pm (UTC)
From: [identity profile] sleepy-drago.livejournal.com
а что предлагается обсуждать? народу нравятся прикольные вещи. кому могут нравиться "объекты" ? =)

Date: 2014-10-09 03:03 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Ну, если не нравятся, можно аргументированно выразить свое отвращение, обложить х-ями (хаскелями). :)

Date: 2014-10-08 06:36 pm (UTC)
From: [identity profile] chaource.livejournal.com
Дѣло не въ "объектахъ", а въ томъ, что модули должны допускать разные интерфейсы, чтобы можно было пользоваться модулемъ, не зная реализацiи, и чтобы одинъ и тотъ же модуль могъ-бы имѣть въ принципѣ разные интерфейсы, равно какъ и разные модули имѣть одинъ интерфейсъ.

Въ ОО языкахъ есть только одна фича - объектъ - и черезъ него все приходится реализовывать, - и модули, и интерфейсы, и алгебраическiе типы, и subtyping, и рекурсивные типы, и вообще все, потому что въ ОО языкахъ ничего другого нѣтъ, кромѣ объектовъ. Это не есть хорошо. Спасетъ мiръ OCaml, возможно. Но вообще-то и въ Standard ML почти все есть, какъ мнѣ кажется.

Пошелъ читать статью.

Date: 2014-10-09 09:41 am (UTC)
From: [identity profile] thedeemon.livejournal.com
С модулями некоторая загвоздка в том, что если модули Button и Image оба реализуют интерфейс/сингатуру Widget, то типы значений из них Button.t и Image.t обычно все равно разные, в один список не посадишь. Если, конечно, не заниматься в явном виде приведением их к общему знаменателю, одинаковому представлению в рантайме, в результате чего и получаются объекты.

За чисто ОО языки тут никто и не агитирует, запрещать алгебраики, модули и прочие конструкции, заменяя все объектами, не предлагается. Утверждается лишь, что помимо них полезно иметь еще и вот такую штуку.

Date: 2014-10-09 09:20 am (UTC)
From: [identity profile] migmit.livejournal.com
Помнится, тот мужик из Jane Street говорил, что они в OCaml букву O практически не используют.

Date: 2014-10-09 09:34 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Да, мне тоже за несколько лет использования окамла лишь один или два раза объекты пригодились.

Date: 2014-10-09 08:19 pm (UTC)
From: [identity profile] valentin budaev (from livejournal.com)
> т.е. простые хаскельные тайпклассы не годятся.

Дык, а кто мешает в экзистеншнл завернуть? И будет чистой воды рантайм полиморфизм.

Date: 2014-10-10 03:46 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Почему и написал "простые", если добавить existential, то уже ок.

Они там и пишут "In type theory, we say that objects have existential types; the existential is opened on every access to each object".

Profile

thedeemon: (Default)
Dmitry Popov

April 2026

S M T W T F S
   1 234
567891011
12131415161718
19202122232425
2627282930  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 29th, 2026 06:06 am
Powered by Dreamwidth Studios