One which looks at the problem from a data perspective and one from a functional perspective. Ultimately this produces a double effort and often the two models are not compatible. Encapsulation solves this problem by tightly coupling both data and function. There is no way to access the data of an object without invoking an associated function and there is no way to call a function without referring to its associated data or object. Enforcing this close association between data and function allows the developer to concentrate on a single concept or model of his problem.
Inheritance is a key concept in facilitating code reuse.
Communication Through Messages Structured methodologies are based on the concept of a synchronous hierarchy of modules or subroutines. This reliance on subroutines combined with the lack of enforced encapsulation makes modifications of code more difficult. In an object oriented approach, the communication architecture consists of an asynchronous network of objects that communicate by sending messages to one another. Since these messages are tightly coupled with the objects themselves, knowledge of their internals is not only unneeded but is also greatly discouraged. Whenever a group or business makes such a significant change in the way it operates, there is an inevitable cost involved.