the idea that an application is controlled from the top down
the idea that a class (aspect) should do one job and do it well
the idea that you define and code to work interfaces
mostly lightweight nowadays where you add a chain of interceptors around a method call that can handle orthogonal concerns
the idea that you decompose your software into components
where you use a declarative-style language (usually xml) to determine things like component wiring (i.e. your average tomcat config file, generalized)
basically making the inter-object method call asynchronous and encapsulating such a call into some kind of event object that can be queued, modified, etc
http://c2.com/cgi/wiki?SeparateInterfacesFromImplementation