Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тема про АОП в cpp / 25 сообщений из 38, страница 1 из 2
17.01.2013, 14:30
    #38113997
kT_________
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тема про АОП в cpp
Друзья, не пойму весь троллоло про АОП. Вот читаю статью про пхп и там цитата:

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

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


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

На ваш взгляд АОП в С++ как выглядит?
...
Рейтинг: 0 / 0
17.01.2013, 14:44
    #38114031
kT_________
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тема про АОП в cpp
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
22.01.2013, 01:30
    #38118906
kT_________
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тема про АОП в cpp
AOP = OOP + goto



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А как Вы вызываете где надо??? :)
...
Рейтинг: 0 / 0
17.09.2013, 13:37
    #38398842
kT_________
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тема про АОП в cpp
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
17.09.2013, 13:47
    #38398862
kT_________
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тема про АОП в cpp
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
17.09.2013, 19:17
    #38399313
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тема про АОП в cpp
kT_________,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


слушаю Вас
(круглый)
...
Рейтинг: 0 / 0
28.09.2013, 01:42
    #38410575
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тема про АОП в cpp
Современные методологии разработки уже давно ушли вперёд от ООП.
Это не значит что ООП мёртв. Просто runtime стал настолько сложен
что просто применяя ООП трудно объяснить все явления и процессы
которые в нём происходят. Скорее нужно брать ООП+нечто.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тема про АОП в cpp / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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