May. 23rd, 2017

yigal_s: (Default)
Вроде, за долгие годы я так и не разобрался теоретицски, что такое Object Oriented и с чем его едят. Пытался читать всякие полу-популярные и полу-научные книги и статьи, но воз и ныне там.

Но вот что интересно. Нигде мне не встречалось упоминание одного нетривиального различия реализации типов в C++/java и, скажем, в Haskell, непосредественно касающегося OOP. В объектных языках вроде С++ отчего-то считается правильным передавать функции в качестве параметра ссылку(указатель) на интерфейс объекта, тем самым обеспечивая run-time полиморфизм. А между тем, сей подход в корне неверен недостаточен. Объекты могут реализовывать несколько интерфейсов, функция может нуждаться в нескольких интерфейсах объекта, опять же, поэтому адекватный способ полиморфной передачи объекта в типизированных языках - передача множества интерфейсов. Что, разумеется, желательно поддерживать на уровне самого языка, а не каких-нибудь темплейтных tuple-объектов. В отсутствие данного механизма в С++ приходится извращаться, придумывать связи между интерфейсами там, где их нет, наследовать один интерфейс от нескольких только лишь ради того, чтобы передавать такой композитный интерфейс в функции, упрощать и выхолащивать код, итд итп. Мне, кстати, вспоминается, что как-то я даже умудрился написать функцию, которой требовалось передавать два параметра - указателя на интерфейсы, которые указывали бы на один и тот же объект. От этого было рукой подать до понимания того, что это-то и есть принципиально-правильный способ работы с OOP полиморфизмом, но я как-то не докумекал тогда.

У меня, собсно, нет претезний к C++/java, но вот странно, что эта мысль мне нигде не встречалась. Сие демонстрирует, вообще-то, ужасающий деффицит адекватной, содержательной информации. Если, конечно, считать эту заметку адекватной и содержательной... )))

Улёт

May. 23rd, 2017 08:43 pm
yigal_s: (Default)
На курсере через неделю начнется курс по квантовой оптике, который читает...

Алан Аспект.