@regnad: Aspekt orientierte programmierung ist noch eine Abstraktstufe höher.
eigentlich wurde es zuerst mit java eingesetzt, mittels jaspect/aspectj, aber auch auf c++ portiert (aspectC).
So konnst du zB bei/vor/während einem funktionsaufruf einen aspekt einfügen (also Code) und denn zusätzlich oder anstelle vom anderen code ausführen.

pseudocode:

aspect SotierenNachErweitern
{
pointcut erweitern() : call (erweitereListe*());
after() : erweiter()
{
sortiereListe();
}
}

Was geschieht? Falls die Funktion erweitern() aufgerufen wird, wird dich liste nach(after) dem einfügen neu sortiert.

für mehr infos:
www.aosd.net
www.aspectj.org
www.aspectc.org