The network is one of the fussiest and most dynamic parts of the hardware being programmed, so having the ability to choose the most appropriate protocol for each situation is important. For network-mobile objects, the object's interface forms the contract. One important advantage of objects is the ease of changing their contracts over time. Coming up with a good design, whether for an API or a DTD, is difficult. Figuring out, agreeing upon, and communicating the design requirements is often a significant challenge.
Requirements evolve over time.
Consequently, a design's ability to gracefully accommodate future changes is usually an important quality. The hardest thing about getting a data model right is that data models evolve. Data modeling is, in part, the art of including enough generality to anticipate future schema changes without kicking the model up to such a high level of abstraction that it's inefficient or incomprehensible. Fortunately for API designers, Java pays close attention to the need to improve contracts. Similarly, the Java Object Serialization specification provides mechanisms that enable the exchange of serialized objects between parties familiar with different versions of the objects' classes.