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

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

У меня, собсно, нет претезний к C++/java, но вот странно, что эта мысль мне нигде не встречалась. Сие демонстрирует, вообще-то, ужасающий деффицит адекватной, содержательной информации. Если, конечно, считать эту заметку адекватной и содержательной... )))
From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.