powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тема про АОП в cpp
38 сообщений из 38, показаны все 2 страниц
Тема про АОП в cpp
    #38113997
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья, не пойму весь троллоло про АОП. Вот читаю статью про пхп и там цитата:

авторДумаю, каждому программисту знаком принцип единственной ответственности, ведь не зря он существует: соблюдая его, можно написать код лучше, он будет более понятным, его будет легче дорабатывать.

Но чем больше каждый из нас работает с кодом, тем больше приходит понимание того, что на существующем уровне языка — объектно-ориентированном — этого сделать невозможно. А мешает нам в соблюдении принципа единственной ответственности такой факт, как сквозная функциональность.


класть на пхп. книги и статьи по AsprctJ пишут идите как форель под нашу трелль.
Подскажите почему эти люди думают что АОП не влезает не в одну из языковых реализаций ООПа. "Сквозная функциональность" - думаю что легко реализуется через множественное наследование с резвым урезанием типов через rtti, или например через шаблоны метапрограммированием из mpl например, нет, может всё и гораздо прощще реализовать.
просто динамический и статический полиморфизм - хардкор, книги про шаблоны мне кажется уже лет десять как назад об этом писали.

На ваш взгляд АОП в С++ как выглядит?
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38114031
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
#include <iostream>
#include <string>

template<typename OutputPolicy, typename LanguagePolicy>
class HelloWorld: private OutputPolicy, private LanguagePolicy {
	using OutputPolicy::print;
	using LanguagePolicy::message;

public:
// Behaviour method
	void run() const {
// Two policy methods
		print(message());
	}
};

class OutputPolicyWriteToCout {
protected:
	template<typename MessageType>
	void print(MessageType const &message) const {
		std::cout << message << std::endl;
	}
};

class LanguagePolicyEnglish {
protected:
	std::string message() const {
		return "Hello, World!";
	}
};

class LanguagePolicyGerman {
protected:
	std::string message() const {
		return "Hallo Welt!";
	}
};

int main() {
	/* Example 1 */
	typedef HelloWorld<OutputPolicyWriteToCout, LanguagePolicyEnglish> HelloWorldEnglish;

	HelloWorldEnglish hello_world;
	hello_world.run(); // prints "Hello, World!"

	/* Example 2
	 * Does the same, but uses another language policy */
	typedef HelloWorld<OutputPolicyWriteToCout, LanguagePolicyGerman> HelloWorldGerman;

	HelloWorldGerman hello_world2;
	hello_world2.run(); // prints "Hallo Welt!"
}


Модератор: Отредактировано с форматом исходников

первая ссылка гугла , да и смысл описывать ве возможности шаблонов. И понятно что в контейнер фабрики тоже можно через шаблоны накидать указателей буста, .....но щас подумал, и что то засомневался.



без мазы, это всё лишнии движения, хотя ..получается вопрос теперь где писать код, вот)))
т.е. писать полюбому руками, и АОП тоже надо описывать, и вопрос где писать или что)).

я выбрал бы шаблоны, как то они адекватней что-ли)))
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38118906
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AOP = OOP + goto



:)
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38118907
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38118909
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

latest release dates from 21.12.2005
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38119538
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________, официальный язык форума - русский. Исключение составляют пожалуй
квотирование англоязычной документации в тех случаях когда оно важно.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38120955
спп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лучше ооп ещё ничего не придумали и не придумают.
Разве что на типа проложной машины вывода - но это уже из другой оперы.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38122496
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё в кучу смешал.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38215762
laphroaig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот одна из реализаций АОП на чистом c++, на шаблонах, без rtti и макроподстановок: http://faslib.com
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38215934
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите почему эти люди думают что АОП не влезает не в одну из языковых реализаций ООПа.

Я не большой специалист, но на сколько я знаю, весь шум про АОП в мире в основном в районе Java и движения Spring.
И в основном проблемы в том, что в мире Java есть великолепная платформа, куча замечательного, полезного кода,
но дерьмовый, плохо развивающийся язык программирования. Поэтому люди пишут под Java-машину новые, более хорошия языки,
с той или иной парадигмой.

"Сквозная функциональность" - думаю что легко реализуется через множественное наследование с резвым урезанием типов через rtti, или например через шаблоны метапрограммированием из mpl например, нет, может всё и гораздо прощще реализовать.

Проблема в том, что в Java нет множественного наследования.

На ваш взгляд АОП в С++ как выглядит?

Как мелкогранулированные хорошо продуманные классы. Возможно, иногда с делегацией.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38215938
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше ооп ещё ничего не придумали и не придумают.

Ну, это спорное заявление.

Разве что на типа проложной машины вывода - но это уже из другой оперы.

Пролог я лично не люблю. Да и не выстрелил он толком, не занял свои ниши.
В силу плохо предсказуемой производительности.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38382319
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ап. Хорошая тема протухла.

Мне кажется АОП никто специально не строил. Это побочный эффект от рефлексии
и интроспекции. И неудивительно что АОП возник именно в Java. Там есть благоприятная
среда для манипуляций с уже созданным кодом (байткодом). Разумеется, повторить
подобное в С++ можно хотя и будет труднее. Тут трудности даже не в самом языке
а в отсутвии рантайма.

Кстати по ссылкам вики http://ru.wikipedia.org/wiki/Аспектно-ориентированное_программирование

можно найти ключевые слова AspectC++ e.t.c.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38397138
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

смотрел эту либу, ч т хз. мне кажется ..я даже уверен, своё написать ..время потребует не до большого. препроцессор, немного спирита... и готово)
конечно компил_тайм, но зато быстро. ран-тайм.. надо подумать.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38397208
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Аоп возник не в java.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38397943
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________...На ваш взгляд АОП в С++ как выглядит?

странно всё это...
си плас плас - язык.
Объектно Ориентированный подход - технология.
АОП - заявляется как технология ээээээээ вроде как (не буду коменнтировать, а то будет очень грубо)..

более того. ОО идёт перед выбором языка. эээээ как бы это бОльше чем просто язык. Т.е. ОО это не есть _только_ классы, шаблоны, виртуализация и т.п. вещи. Это есть _методология_ перехода от замысла (читай бизнес идеи, мысли, задачи) к коду. Вот именно это оно решает. а на чём ваять - дело вторичное, если не десятичное...

удачи вам
(круглый)
ЗЫ
не удержался :)
кмк АОП - идёт от не понимания ОО методологии. Либо попытка своего пиара и нахождения своей финансовой ниши (читай сбыта).
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38398354
TimeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv "Сквозная функциональность" - думаю что легко реализуется через множественное наследование с резвым урезанием типов через rtti, или например через шаблоны метапрограммированием из mpl например, нет, может всё и гораздо прощще реализовать.

Я вот что-то сообразить не могу, почему сквозную функциональность нельзя реализовать через синглетон? Ну например, логирование, просто вызываем где надо Logger::instance().warning("а-та-та");
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38398760
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeCoder,

А как Вы вызываете где надо??? :)
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38398842
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0,

Да хоть процерудно пишите. Хрен редьки не слащще.
Вы в курсе, как например в Яве работает АспектДж?? Имею в виду чисто технически. Топик вобщем-то как раз об этом, что в Ява есть предпосылки накрутить побольше сахара использую нутря виртуальной машины.

И совсем просто описывать вещи типа:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import ...
public aspect TraceAspect {
        private Logger logger = Logger.getLogger(TraceAspect.class);
        
        pointcut inDomainType()
                                         : within(ajia.domain..*);
        pointcut inControllerType()
                                         : within(ajia.web..*);
        pointcut inRepositoryType()
                                         : within(ajia.repository..*);
        pointcut inTracedType()
                                         : inDomainType() || inControllerType() || inRepositoryType();
        pointcut traced()
                                         : (execution(* *(..)) || execution(new(..))) && inTracedType();
                                       
        ... advice to traced() ...
}




т.е. топик как в С++ сделать.. возможно танцы с бубном РТТИ+меташаблоны, но это хардкод, кто использовал АОП в С++, поделитесь историей успеха, плиз))


кто пишет что ООП наше всё, а АОП от лукавого, ...расскажите нам, если Вы так хорошо прорубаете в АОП, что считаете его лишним.. расскажите нам, как задачи решаемые через АОП ..могут быть решены без него, и главное, в чем профит неиспользования АОП??
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38398862
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

На мой взгляд АОП - хак. ООП норм, но жизнь слишком коротка что бы писать на С++ (шутка)
АОП удобен:

Код: java
1.
Dynamic crosscutting in AspectJ modifies the behavior of the modules and consists of both pointcut and advice constructs. The advice constructs provide a way to express actions at before, after, or around the desired join points. With context-collecting pointcuts, advice can support static typing that is natural to a Java programmer. The reflection support in AspectJ provides access to the join point’s static and dynamic information through a small number of interfaces. You can use this context to tailor the advice based on the actual values (method parameters or return value) being used at runtime. Alternatively, you can use this information in tracing aspects to gain more insight into the system’s inner workings. The dynamic and static information together can produce an enriched log output with a simple tracing aspect. Although dynamic crosscutting forms a major part of support for crosscutting functionality, elegant solutions need to modify the static structure of the system.




И полноценная реализация возможна за счет доп.уровней абстракции и на них, какой-нить ДСЛ и накручивать логику на интерпретаторы, но вот что бы так близко как в Ява - нет.

Или я ошибаюсь?
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38399313
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

Например, при помощи шаблона проектирования Декоратор можно попытаться реализовать функционал before и after .
kT_________но вот что бы так близко как в Ява - нет. +100500 100500
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38399469
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeCoderMasterZiv "Сквозная функциональность" - думаю что легко реализуется через множественное наследование с резвым урезанием типов через rtti, или например через шаблоны метапрограммированием из mpl например, нет, может всё и гораздо прощще реализовать.

Я вот что-то сообразить не могу, почему сквозную функциональность нельзя реализовать через синглетон? Ну например, логирование, просто вызываем где надо Logger::instance().warning("а-та-та");

Там проблема не в том, чтобы сделать, а в том, чтобы, например, лолирование какой-то функции добавлялось без изменения кода этой самой функции и её вызывающих .

Проблема инжекции кода главное.

В некоторых языках это просто, в java пишут специальные компиляторы, а в С++ вот -- никак, тоже компилятор надо писать специальный, наверное. С++ и так суперсложный, а ещё и это ... Не думаю, что оно того стоит.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38400224
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________На ваш взгляд АОП в С++ как выглядит?

АОП в С++ выглядит так же, как и во всех других языках: есть основной код, не замусоренный второстепенными действиями, и есть дополнительный код, выполняющий что-то второстепенное (например, логирование), который внедряется в основной через аспекты.

А вот реализуется АОП в С++, да и в любом другом языке, чисто по своему. В С++ можно только на этапе компиляции внедрять второстепенный код в основной, и затем компилировать полученное компилятором.

А в таких языках, как C#/Java можно применять и этот способ (внедрение одних исходников в другие до компиляции), и изменение байт-кода (IL-кода) после компиляции, ведь в нём сохранена метаинформация, значит можно получить доступ к любому нужному куску, и третий способ: перехват вызовов методов/свойств в рантайме (опять же благодаря наличию метаинформации).
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38400289
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivа в С++ вот -- никак, тоже компилятор надо писать специальный, наверное.

Всё уже написано. У MSVC есть /Gh, у GCC - -finstrument-functions.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38400442
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________...ООП наше всё, а АОП от лукавого, ...АОП, что считаете его лишним..как задачи решаемые через АОП ..могут быть решены без него, и главное, в чем профит неиспользования АОП??

Вы как то бурно среагировали. Подозреваю, что Вы видите только этот идол идеал. предлагаю немного по другому:

вот чисто из опыта...
Объектно Ориентированный подход - это собственно методология перехода от замысла к реализации. Т.е. замысла в бизнесе(а не программиста). Посмотрите внимательно на любой бизнес(читай задачу) в жизни. _ВЕЗДЕ_ идёт речь о неких сущностях и их взаимодействиях. Ну например - кошка пъёт молоко, надо понять как быстро ей доливать если - магазин в соседней деревне, с учётом пробок. Самолёт летает на перехват с частотой раз в год, какой ресурс его турбины при условии брака в изготовлении его лопаток. Завод изготавливает теплообменники - когда будет брак, если загрузка его линии 100 теплообменников в сутки, а дорн сделан из стали марки... и т.п...

вот теперь присмотритесь. к ЛЮБОЙ задаче. вот ОО говорит следующее - выявить сущности. т.е. берём кошку(про неё же речь идёт в бизнесе!!!) = замечательная сущность. имеет глаголы, ходить, пить... и покатило... заметьте такую вещь - с точки зрения бизнеса кошка НИКОГДА НЕ ПРЕВРАТИТЬСЯ в МАМОНТА!!! ну никогда!!! или это уже ДРУГОЙ бизнес!!! понимаете о чём речь или нет? Т.е. написанный в дальнейшем код СТАТИЧЕН!!! т.е. это ОДИН ИЗ плюсов этого подхода. скажем так - то что на поверхности... Ышо один плюс - Вы общаетесь на языке заказчика. Т.е. если он говорит завтра - ой, блин я забыл что кошка может быть серой, белой или чёрной. скажите - Вам много труда будет дополнить Вашу программерскую сущность "кошка" свойством цвет кошки? я так думаю апсолютно легко... через год заказчик вам говорит - тут вот у нас кошка заболела, мы ей пришили пятую ногу. и надо учесть давление всех лап кошки на поверхность, с учётом новой пятой... легко вам будет модифицировать ваш код в рамках ОО? Ответ очевиден...

это я вот понимаю...

а вот теперь расскажите мне доходчиво всё то же самое про
АОП = Аспе́ктно-ориенти́рованное программи́рование

(заметьте ПРОГРАММИРОВАНИЕ!!! даже НЕ технология!!! сразу на опережение ООП - расшифровывается как Проектирование!!!).

я серьёзно, и с удовольствием хочу услышать ваше мнение, об АОП если это на таком-же уровне как и ОО методология! на полном серъёзе!!! Для себя уже давно хочу найти альтернативу ОО. пока (лично для меня) это передовое (как технология перехода от задумки к исполнению)...


слушаю Вас
(круглый)
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38410575
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Современные методологии разработки уже давно ушли вперёд от ООП.
Это не значит что ООП мёртв. Просто runtime стал настолько сложен
что просто применяя ООП трудно объяснить все явления и процессы
которые в нём происходят. Скорее нужно брать ООП+нечто.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38412044
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСовременные методологии разработки уже давно ушли вперёд от ООП...runtime стал настолько сложен
...применяя ООП трудно объяснить все явления и процессы которые в нём происходят...

Вы вдумайтесь в то что говорите. :)
Объектно Ориентированный подход идёт от задачи(читай жизни). Т.е. перефразируя Вас получаем:

"современные методологии разработки уже давно ушли вперёд от задач...рантайм стал настолько сложен,... что применяя подход от задачи трудно объяснить все явления и процессы которые в нём происходят"

поздравляю, это пёрл!!!
и попутно встаёт вопрос - может ну его нахрен так программировать, в отрыве от жизни то??? :)

(круглый)
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38412053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Встаёт другой вопрос. Обязательно - ли на любое программирование натягивать ООП ?
Я имею в виду Сишное ООП.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38412074
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...Обязательно - ли на любое программирование натягивать ООП ...Сишное ООП.

имхо - нет конечно же. первое что говорит нам ОО - идти от задачи. Т.е. все мы грамотные люди понимаем, что есть искуственные рамки, либо искуственные образования, где ОО мягко говоря будет поперёк. Например тот же БизТок от мелкомягких если взять. Или скажем я бы ставил под вопрос целесообразность ОО в пых-пыхе, гда на генерацию хэтэмээля не будет благотворно влиять глубокая вложенность объектов (но есть и другие аспекты - организация проекта в целом, распараллеливание разработки и т.п.). Т.е. надо считать плюсы и минусы целесообразности применения в конкретных случаях.

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

(круглый)
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38413566
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0но всё же повторюсь - на мой взгляд, это всё искуственные области (где не целесообразно применять ОО подходы). слабо относящиеся к жизни и задач от жизни.

А численные расчеты при моделировании физических явлений тоже слабо относятся к жизни?

kolobok0Объектно Ориентированный подход идёт от задачи(читай жизни)

А какой подход идет не от задачи? А если учитывать, что «объекты» в жизни существуют параллельно друг с другом, то может ну его нафик это ООП и да здравствуют параллельное и конкурентное программирование?
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38419589
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, позвольте...

Пошаговое описание даётся в книге AspectC++ Programming Guide, которая, к сожалению ещё не написана (с)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
"int C::%(…)"
Сопоставимо любому методу класса C, который возвращает значение типа int
"%List"
Сопоставимо любой структуре, классу, объединению или перечислению, чьё имя 
заканчивается на "List"
"% printf ( const char*, ... )"
Сопоставимо функции printf (в глобальной области видимости), первый параметр 
которой имеет тип const char* и возвращающей значение любого типа
"const %& …::%(…)"
Сопоставимо всем функциям, которые возвращают ссылку на константный объект



Вполне достойное начало, через несколько минут % перестает резать глаза. match expressions выбирают сущности с учётом их области видимости, типа и имени.


Код: plaintext
1.
2.
3.
4.
5.
"%List" && !derived ("Queue" ) 
Описывает набор классов с именами, заканчивающимися на “List”, и не наследуемых от 
класса Queue
call ( "void draw ( )" ) && within ( "Shape" )
Описывает набор вызовов функции draw, находящихся внутри методов класса Shape



Дальше идут возможности обьявлять чисто виртуальные поинткуты, переопределяемые в произвольных аспектах.

Прошу прощения за сумбур, но порядок аналогичен документации.
Адвайсы - ничего собенного.

Код: plaintext
1.
2.
3.
4.
5.
pointcut new_user (const char* name) =
 execution ("void login (…)") && args (name);
 advice new_user (name) : before (const char* name) {
 cout << "User " << name << " is logging in." << endl;
 }


И полность..
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
aspect Counter {
 static int m_count;
 Counting () : m_count (0) {}
 pointcut counted () = "Circle" || "Polygon";
 advice counted () : class Helper {
 Helper () { Counter::m_count++; }
 } m_counter;
 advice execution ("% main (…)") : after () {
 cout << "Final count: " << m_count << " objects" << endl;
 }
 };



если, не обращать на характерные для С++ символы пространства имен и потоков, то не отличаются от АспектДж.

Если Вы добрались до этого момента, значит Вы в теме, каментов становится меньше, кода больше.

Код: plaintext
1.
2.
3.
4.
5.
6.
aspect Counter {
 static int m_count;
 Counter () : m_count (0) { }
 pointcut virtual counted () = 0;
 …
 };


Код: plaintext
1.
2.
aspect MyCounter : public Counter {
 pointcut counted () = derived ("Shape");



Вспомогательная функция printvalue отвечает за форматированный вывод
аргументов, передаваемых в вызове функции.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
aspect Trace {
 pointcut virtual methods () = 0;
 
 advice execution (methods () ) : around {
 cout << "before " << JoinPoint::signature () << "(";
 for (unsigned i = 0; i < JoinPoint::args (); i++)
 printvalue (tjp->arg (i), JoinPoint::argtype (i));
 cout << ")" << endl;
 tjp->proceed ();
 cout << "after" << endl;
 }
 };





Чуть чуть о типах:
base (pointcut) N→Nc,f
derived (pointcut) N→Nc,f



Про потоки
Код: plaintext
1.
2.
3.
4.
class Bus {
 void out (unsigned char);
 unsigned char in ();
 };




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
aspect BusIntSync {
 pointcut critical () = execution ("% Bus::%(…)");
 advice critical () && !cflow (execution ("% os::int_handler ()")) :
 around () {
 os::disable_ints ();
 tjp->proceed ();
 os::enable_ints ();
 }
 };



cflow () условие времени выполнения advice. если управление потоком не пришло из дескриптора прерывания os::int_handler ()



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
aspect Logger {
 pointcut calls () = 
 call ("void transmit ()") && within ("Transmitter");
 
 advice calls () : around () {
 cout << "transmitting …" << flush;
 tjp->proceed ();
 cout << "finished." << endl;
 }
 };


Этот аспект вставляет код, регистрации всех вызовов transmit, которые
содержат методы класса Transmitter.




А вот, как думаете, что происходит здесь??
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
aspect Debug {
 pointcut fct () = "% MemPool::dealloc (void*)";
 pointcut exec () = execution (fct ());
 pointcut calls () = call (fct ());
 
 advice exec () && args (ptr) : before (void *ptr) {
 assert (ptr && "argument is NULL");
 }
 advice calls () : before () {
 assert (tjp->target () && "’this’ is NULL");
 }
 };



+конструкторы, деструкторы, шаблоны типов, зис, как по мне ..всё что нужно есть. И более чем интуитивно понятно, если до этого прочитать например: АспектДжи ин акнш.

ac++ препроцессор, код открыт.
После компилить как обычно ;)

Работает как:
Whole ProgramTransformation
Single Translation Unit
Weaving in Library Code

куча ключей для запуска + регекспы, но можно и так: ac++ -c main.cc -p.
Проверил, правда поставилась через:apt-get install aspectc++
Не понял что для маков и соляры, думаю исходники можно собрать всегда.
Модератор: Отредактировано
и ещё
ac++ does not yet support the latest language features introduced with the C++
11 standard. These features, such as lambda functions or move constructors,
will result in syntax errors reported by the parser. The translation process will be
aborted. C++ 11 support is planned to be introduced with version 2.0 of ac++
думаю если Вы дочитали и до этого места, то на англ. Вам будет понятней.

используется в ACE/TAO, COMET и FeatureC++ (Aspectual Mixin Layers (трэш по хожу, кто работал?))





Если кому-то интересно, но непонятно, рекомендую книгу про жабьи_аспекты.. там развернуто.

Если кому-то интересно узнать как долго компилится, как выглядят ошибки... кароче мясо, обязательно напишу.

4th Oct 2013 - AspectC++ Release 1.2
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38419593
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________, Хм... как-то всё у тебя сложно. Не формат форума. Скорее блог или статья.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38419594
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что бы холивар был пожирнее, те кто негативно настроен к АОП могут предложить свои реализации маленьких примеров указанных выше :)
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38419600
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ознакомился с http://faslib.com/ для ровного счета. Без комментариев (=
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38419609
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник




Ага, аннотаций для С++ не предвидеться, но как мне кажется ОРМ на аспект++ можно исполнить. (для ещё более жирного холивара)
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38428286
irokosovskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините за спам. Не видел своё сообщение. Думаю поможет этот код для работы со строкой.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
char * substr(const char *src, int from, int size) 
{
    char * c_TmpStr = new char[size + 1];
    int j = 0;
    for (int i = from; i < from + size; i++)
        c_TmpStr[j++] = src[i];
    c_TmpStr[size] = 0;
    return c_TmpStr;
}
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38460081
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38461026
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,
И зачем ты это up? У тебя остались вопросы? Ну так задай их.
...
Рейтинг: 0 / 0
Тема про АОП в cpp
    #38461029
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю закрыть. Раз никому АОП в не нужен.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тема про АОП в cpp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]