SOLID OO Principles
In Object Oriented Design, there are a handful of principles that should drive everything else. Ideally, we want everything to be "loosely coupled." There are a variety of ways to accomplish that but generally as long as we keep the internals of classes hidden from one another, we're on the right path. Further, we want everything to be "highly cohesive" where like things are together.. but is that enough?