ООП вы не напишете без процедурного, а АОП - без ООП
википедия пишет, что АОП - это частный случай ООП
АОП - это тот же ООП, но управляемый событиями, а не вручную, как делают в обычном ООП
в ООП вы создаете классы разных "физических объектов" типа клиентов, продуктов, машин и тд, и потом ломаете голову как заставить их общаться между собой через разные интерфейсы, поэтому возникают тонны бесконечных вложенных колбэков, бардак скоупов, многократно повторяющийся код в разных вариациях итд
в АОП более абстрактный уровень классов типа item/asset/widget, а "клиенты, продукты, машины" являются не классами, а свойствами, или часто там совсем другие типы классов,
когда у вас есть один и тот же класс, то нет проблемы несовместимых интерфейсов, и все делается программно, управляется событиями, вместо того чтобы вручную писать какой должен быть найден объект и что конкретно в каждый момент он должен делать