User559104930 posted
There are entire books written about this very subject so answering it in a paragraph or two is going to be tough, but here goes...
Objects are about behavior. The behavior and data that supports that behavior (properties) of, as in your first example, a forum are quite different from the behavior and properties of a thread in that forum. The behavior and properties of a message in that
thread is different from the thread itself. The objects each have a different set of concerns, just as each object within a layer has a definite set of concerns. By keeping a definite separation or boundary of those concerns, we create code that is more testable,
flexible, maintainable, and enduring.
As for your second example, a bus and a car do have similar or shared behaviors and properties (wheels, doors, steering wheel, transmission, etc.), but you would not use the same transmission in a or engine in a car as you would in a bus.
I recommend that you spend some time looking at the SOLID design principles to get a better idea of how they play a role is this as well:
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod