Примеры аспектно-ориентированного программирования [закрываются]

Нет, если a представляет собой динамически выделенный массив необработанных указателей, delete[] a; просто удаляет память, занятую массивом необработанных указателей, но not вызывает деструкторы для объектов

.

Итак, если эти исходные указатели являются владеющими указателями , у вас есть leaktrocity :)

Используйте контейнер STL класс с интеллектуальными указателями, например std::vector<std::unique_ptr<X>>, для более современного и более простого подхода: таким образом вы получаете как исключение-безопасность , так и автоматическое уничтожение как массива указателей, так и объектов, указывающих к.

45
задан Dave Hillier 28 November 2008 в 11:34
поделиться

11 ответов

Один из примеров, который был дан взаймы прямо от этого Аспектно-ориентированное программирование: Радикальное Исследование в Модульном принципе, видео YouTube красило к дисплею. В примере у Вас есть графический редактор, который состоит из точек, форм, и т.д. и когда изменения в тех объектах происходят, необходимо сказать дисплею обновлять себя. Не обрабатывая его в аспекте Вы заканчиваете тем, что повторили себя вполне немного.

AOP, поскольку я понял его, был создан для того, чтобы не повторять себя для сквозных проблем, которые не могли бы иметь никакого отношения к бизнес-логике. С аспектами можно построить эти проблемы из модулей к аспектам. Один из примеров регистрировался, но существует набор разных вещей, которые Вы могли бы закончить тем, что повторили. Это развивалось, с тех пор и это больше не об аспектно-ориентированном программировании, но существует также аспектно-ориентированное моделирование.

[еще 1118] информация об аспектно-ориентированном программировании может быть найдена из этих источников:

33
ответ дан 2 revs, 2 users 98% 8 November 2019 в 01:07
поделиться

Безопасность

  • Вводит код, который проверяет полномочия и блокирует доступ

, Более дружественная ошибка msgs для asp.net webcontrols/webparts

Производительность

  • Вводит код, который устанавливает счетчики перфекта для получения обзора того, где приложение медленно
11
ответ дан Community 8 November 2019 в 01:07
поделиться

Реализация Шаблона разработки в Java и AspectJ (Hannemann и Kiczales): http://www.cs.ubc.ca/labs/spl/papers/2002/oopsla02-patterns.pdf

бумага показывает, как некоторые шаблоны разработки GoF могут реализованный лучшим способом в Java с помощью AspectJ

4
ответ дан Eyvind 8 November 2019 в 01:07
поделиться

Отмена - я называю сторонний блок, который поддерживает операции отмены. Это требует, чтобы вызывающие стороны создали контекст отмены, назвали некоторые методы в блоке, adn тогда уничтожают контекст отмены. Контексты могут быть вложены. Кроме того, если контекст создан, но оставлен в нежелательном состоянии, которое требует перезапуска приложения.

Обычно для использования отмены я записал бы что-то вроде этого

    void foo()
    {
        int id = lib.create_undo_context();
        try
        {
            lib.performsomeaction();
            lib.performsomeaction();
            lib.performsomeaction();

        }
        finally
        {
            lib.destroy_undo_context(id);
        }
    }

с PostSharp, я определяю названный атрибут [Отменяют], который создает контекст отмены, когда метод запускает и уничтожает его, когда метод выходит (даже если исключение выдается) - таким образом, код похож на это

    [Undo]
    void foo()
    {
        lib.performsomeaction();
        lib.performsomeaction();
        lib.performsomeaction();
    }

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

6
ответ дан namenlos 8 November 2019 в 01:07
поделиться

Проверка:

[NotNull]
public string Property1 { get; set; }

[Length(Min = 10, Max = 20)]
public string Property2 { get; set; }

[Regex(Expression = @"[abc]{2}")]
public string Property3 { get; set; }
6
ответ дан Paco 8 November 2019 в 01:07
поделиться

Другой классический пример (как вход) кэшируется. Но другие примеры более интересны.

4
ответ дан orip 8 November 2019 в 01:07
поделиться

Безопасность - проверяющий, что у пользователей есть соответствующие полномочия до выполнения определенных методов.

3
ответ дан Dan Vinton 8 November 2019 в 01:07
поделиться

У Вас не может быть множественного наследования в Java. Однако при помощи AOP можно было "ограничить" множественное наследование. Попытайтесь погуглить это для наблюдения некоторых примеров.

я также соглашаюсь с Eyvid. Статья Hannemann и Kiczales является замечательной для изучения основ на шаблонах разработки и получении некоторых больших примеров AOP.

3
ответ дан Chrys 8 November 2019 в 01:07
поделиться

Мой фотоальбом использование aspectj для трех вещей:

  1. Реализация наблюдателя "шаблон" как допускающая повторное использование часть кода.
  2. Уничтожение сессии для определенного типа вызова.
  3. Устанавливающие грязные флаги на DTOs, когда мутация происходит.

первое, в особенности было в значительной степени прямым из технический разговор Google о AOP. Это о модульном принципе по-другому, чем большинство людей рассматривает. Определенно рекомендуйте наблюдать что, если Вы интересуетесь тем, как использовать его навсегда.

2
ответ дан Dustin 8 November 2019 в 01:07
поделиться

Общедоступная инвариантная проверка. Так как PostSharp 1.5 будет идти с наследованием аспекта, даже через интерфейсы, это даст много новых возможностей.

2
ответ дан angry person 8 November 2019 в 01:07
поделиться

Управление транзакциями.

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

1
ответ дан 26 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: