Привет,
Это провокационный вопрос, цель которого - открыть дискуссию о том, как инверсия абстракции воспринимается сообществом разработчиков. Мне действительно любопытно узнать, что вы думаете.
Во-первых, вот цитата из примеров инверсии абстракции, приведенных в Википедии: http://en.wikipedia.org/wiki/Abstraction_inversion
Создание объекта для представления функции является громоздким в объектно-ориентированных языках, таких как Java и C ++, в которых функции не являются объектами первого класса. В C ++ можно сделать объект «вызываемым», перегрузив оператор (), но по-прежнему часто необходимо реализовать новый класс, например функторы в STL.
Для меня функции являются первоклассным гражданином Scala, но когда мы используем Scala для генерации байт-кода Java, Scala создает определенный класс «поверх» Java, чтобы сделать возможным функциональное программирование ... можем ли мы рассматривать это как инверсию абстракции ?
То же самое может относиться к Clojure или к любому функциональному языку для JVM ... или даже к коллекциям Apache, например:
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/Closure.html
Кстати, я не уверен в объективности статьи в Википедии. Например, когда речь идет о возможной инверсии абстракции в микроядре, в статье говорится: «Существует мнение, что конструкция микроядра является инверсией абстракции», но такого утверждения для функционального типа в ООП нет.