Сижу вот я на завалинке, читаю книжку про аспектное программирование. Блин, умные же люди бывают. И придумается им такое.
В общем, если вы не слышали, то в двух словах идея следующая. Ну скажем у нас есть 3 класса и в каждом несколько функций и вот в каждой функции мы в самом начале например проверяем, что у пользователя есть права делать действие, которое там в функции описано. То есть получается, что вроде требование у нас одно — проверять права, а код размазан по черт знает какому количество мест (что соответственно не есть хорошо). Плюс, не просто код размазан, но еще и разбираясь и так с непростыми классами постоянно взглядом елозишь по кучи вот такого размазанного кода.
Так вот, возвращаясь к умным людям. Они, что же придумали. Что можно описать в отдельном файле что-нибудь типа — в начале всех функций класса A, и функций x,y класса B — делать проверочку прав и только если она прошла то вызывать саму функцию. Выходит, что и овцы целы (классы продолжают делать, что им положены) и волки сыты (авторизацию проводим).
Скажу сразу, что пока я не добрался до места в книге, где описано, как это реализовано. Какое-то странное предчувствие, что для языков с сложным синтаксисом и большим количеством разных изысков (читай C++) , движок это поддерживающий должен быть мягко говоря сложным.
Тем не менее, думаю, что это действительно следующий шаг за ООП. Хотя он конечно, призван не заменить, а дополнить его.
Интересно вообще, какого граница декомпозиции и компактности языков программирования? Думаю вопрос на самом деле не корректный, но тем не менее…
Просто, по большему счету фактически все развитие языков идет по следующему циклу
а. Решаем задачу
б. Обнаруживаем, что с одной стороны, у нас есть какое дублирование и с другой стороны есть размазанность связанного кода и нету языковых методов решить это.
в. Изобретаем новые методы, решаем этими методами проблему из б)
г. Увеличиваем размер задач. Переходим на пункт а)
Собственно интересует предел буковки в). Ведь можно себе представить ситуация, когда попытка оптимизации и упрощения уже не будет приводить к результатам (ну типа, как попытка заархивирвоать уже заархивированный файл).
Вот такая, вот сборка мыслей по поводу аспектного программирования.
Так что, очень рекомендую почитать что-то по этому поводу. Прекрасно прочищает мозги.
Кстати, у меня есть стандартный вопрос на собеседование — «Чем вам НЕ нравиться язык X (вставить нужное)?».Похоже, добавлю в свой список вопрос — «Чем вам НЕ нравиться ООП»? Вот будет забавно поглядеть, как люди буду дергаться и нервничать.