Oct. 8th, 2014

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

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

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

Profile

thedeemon: (Default)
Dmitry Popov

October 2025

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728 29 3031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Nov. 5th, 2025 03:59 pm
Powered by Dreamwidth Studios