Только что вы сами говорили об указателях на функции. Это ровно то же самое
Касаемо С++ есть сильная разница между указателями на функции и указателями на методы, которые есть в языке, а делегаты вообще отсутствуют в том смысле в котором в них возникает потребность и их пилят и велосипедят десятками, включая std::function в С++11. Если бы они были в языке, к примеру, можно было бы написать такое:
Код:
vector<point> points;
circle c;
...
auto it = find_if( points.begin(), points.end(), c.is_inside );
Но это немного другая тема.
надеюсь, вы не считаете, что вам должны верить на слово.
Мне не верьте, Алану Кэю поверьте. =)
Есть такая концепция "объекты обмениваются сообщениями". Так вот не надо пытаться зауживать картинку какими то конкретными реализациями. Что есть "метод" а что не есть.
Т.е. выше мне возразили что указатели на функции в структурах это не ООП, потому что не методы, а что-то другое. Делегаты типа. С классом какие то не такие соотношения.
Так вот - это может и не _метод_класса_ в смысле С++. Но это всё такой же способ отправки сообщения.
Еще раз - если процедурную парадигму можно сформулировать как "пишем код который может работать с известной (конкретной) сущностью и переиспользуем его многократно" (вызов процедур). То ООП это "пишем код который может работать с заранее неизвестной сущностью и переиспользуем его многократно". Коренное отличие именно в том, что сущность заранее неизвестна, от неё ожидается что она "сама знает" что и как ей сделать чтобы продвинуть процесс вперед. Ессесно мы не можем при этом полагаться на её конкретное внутренее устройство (без инкапсуляции таким образом это не взлетит) и естественно что нам нужна какая то техника чтобы передать поток управления этой сущности. В целом это называется динамическая диспетчеризация. И реализована она может быть массой способов. От лукапов по таблицам идентификаторов, до указателей на функции (привет WndProc) и там до делегатов. Это всё разные способы, но смысл их один - "послать объекту сообщение".
Поэтому неправильно говорить что WndProc это не ООП. Делая ГУИ ты всегда делаешь ООП.
-- 12.05.2015, 08:19 --Собственно потому что есть действительно ряд задач которые кто бы не брался реализовывать, Кармак там или Microsoft, а в итоге получаются объекты обменивающиеся сообщениями - ООП - я и глубоко сомневаюсь что идея всплыла "неожиданно как озарение". Тут пахнет лишь последовательной эволюцией мысли.