For large objects that can't be efficiently handled by object-oriented programming
For common concerns, such as security, that go across many objects
For code that can't be converted to byte code by the JVM