АОП отличается от ООП, совершенно разные подходы к разработке.
По сути, если у вас есть логирование, проблемы аутентификации, код проверки производительности, они будут примерно одинаковыми, примерно, в разных частях программы, в разных классах. Таким образом, вы можете написать свое приложение так, как вы его себе представляете, в Java, а затем, когда вам нужно добавить эти другие типы кода (сквозные задачи), вы просто внедряете их в программу, чтобы их можно было скомпилировать, но когда вы смотрите на исходный код, просто видите бизнес-логику, которая вам там нужна.
Что касается того, когда использовать AOP или OOP, я бы посоветовал вам написать программу, заставить ее работать, затем, когда она заработает, посмотрите на удаление кода, который на самом деле не имеет отношения к функции, но служит некоторым другая цель. Например, если вам нужно проверить правильность входных параметров перед их использованием, используйте для этого аспект. Если у вас аналогичная обработка событий, например, все исключения, выдаваемые на уровне доступа к данным, записывают в файл журнала, то создайте для этого аспект.
Когда вы уберете эти проблемы, ваш код станет меньше.
По мере того, как вы приобретаете больше опыта, вы увидите больше применений для АОП, но сначала я бы предложил написать его, а затем рефакторинг с использованием АОП.
Используйте Eclipse, если используете Java, для AOP, так как плагин AJDT будет очень полезен, чтобы увидеть, куда вы добавляете аспекты.