Encapsulate Functionality

To decouple functionality, write methods that tell objects what to do.  Do not ask for their state, then perform functions on behalf of those objects.  This will reduce query functions, encapsulate knowledge, and ensure compliance with The Law of Demeter.  While not always feasible, this should be followed as much as possible to promote adaptability.