Обновить

Комментарии 17

в Аспекты! Ну или миксины, кому как больше нравится

Трейты, миксины и аспекты не имеют к множественному наследованию никакого отношения. А миксины и аспекты — это два совершенно разных подхода.

Трейты, миксины и аспекты не имеют к множественному наследованию никакого отношения

Почему-то инженеры в интернетах с вами не согласны и обсуждают трейты и миксины именно в контексте наследования. Может быть потому что это наиболее распространённая реализация, м? А аспекты были нужны мне, и добавление их методом миксин оказалось очень удобным и безопасным.

инженеры в интернетах

Это что за интернеты такие? У меня другие.

добавление их методом миксин

Аспекты добавить «методом миксин» в принципе невозможно, но если у вас получилось, рад за вас.

что за интернеты такие?

инженеры здесь softwareengineering.stackexchange.com

Первая ссылка в поиске: stackoverflow.com, спорно, что там прям инженеры, но тем не менее.

в принципе невозможно

я же не про конкретную реализацию AspectJ/apache aspects и т.п говорю, а о концепции.

Концепция аспектов неотрывно связана с поинткатами и поздним связыванием. AspectJ — по сути первая реализация, создавшая и саму концепцию AOP в принципе — это рантайм. Да, современные реализации, типа Metalama для шарпов, — всё делают правильно, насмотревшись на реализацию макросов в эликсире, но всё равно концепцию аспектов невозможно реализовать на миксинах, потому что вся суть аспектов в том, что вызывающий код про них вообще ничего не знает.

Ссылка смешная, да.

Насколько я помню, в 2010-м коллеги-джависты грезили об аспектах, как способе внести ортогональную логику в код. Именно так я понимал АОП с самого начала. А как оно реализуется - дело техники. Меня подход EJB-6 вполне устраивал.

Так вы бы предупредили, что ли, что у нас тут дискуссия в стиле «я художник, я так вижу», — я бы и не полез.

Аспекты действительно казались прорывом, только не в 10-х, а в самом начале двухтысячных, меня тогда как раз занесло в Берлин на джаву, и в AspectJ даже есть некоторое количество моего кода. AOP — это устоявшаяся парадигма, весь смысл которой в расширении функциональности кода без его модификации. Даже просто к ООП эта парадигма не имеет никакого отношения, она процветает и в хаскеле, и где только не.

Вот, кстати, неплохая академическая работа на тему трейтов и миксинов: https://bracha.org/oopsla90.pdf (велосипед не мой, поэтому http://)

Спасибо, почитаем на досуге

Что такое "синтетический сахар" в Kotlin?)

в нём есть несколько синтактических отличий от явы с самого начала
А, прошу прощения, очепатка.

Кристаллы лунного сахара странного синего цвета. Получены синтетическим путём. :)

Где ещё есть mixins / traits / aspects

В Dlang же!

Забавно, что написанный по инженерным практикам из 90-х годов Qt, включающий в том числе странный QObject, который: 1) реализован через pImpl, т.е. безвариантную дополнительную косвенность обращения к данным; 2) содержит контейнер дочерних объектов и указатель на родителя, которые требуются "не только лишь всем", а только объектам, которым нужна такая иерархия - приводится в качестве примера "настоящего ООП".

я о том, что в Qt c++ работает в основном именно в парадигме ООП, то есть с классами, их наследованием, полиморфизмом, инкапсуляцией (для чего кстати внутренний объект тоже полезен - прячет реализацию из заголовков), а не в обобщённой парадигме. Что там поверх этого накручено - это уже другое дело. Кто на что горазд, тот то и прикручивает. В Джаве Аспекты, рантайм-генерация и вообще всякие EJB есть. В JS - всё, начиная с jquery и далее, потому что голый JS - ещё более низкоуровневый, чем Си и работать с ним нреально.

pImpl - это обход ограничений плюсов, уж извините, как-то работать с ними надо.

Наверное, имелось в виду "ПривЕдение указателей". Или в С++, как в старинных замках, завелись "привИдения"? :)

да, конечно

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации