The point of all this OO stuff is better abstraction. If you are always calling Bar with methods (either class methods or object methods) you can completely change the implementation of Bar at any time. You can make it subclass from System::Bar, or Quux, or System::Quux, or all of them at once. All that matters is that you keep the public interface for Bar the same. You will never need to change code that calls methods on Bar unless you change the interface of Bar.