aspect-oriented software development
software development technology that seeks new modularizations of software systems in order to isolate secondary or supporting functions from the main program's business logic
top-down and bottom-up
programming approaches