A software program is an executable model of some part of a real or imaginary universe. The users of the program expect that the program accurately models the relevant universe so that manipulating the model allows understanding of the reality being modeled.
As human beings, we do the same sort of modeling when we think about the world around us. We observe the world and make mental models of portions of it that are of interest. We then understand the world based on the models we have made.
When we deal with the real world, the quality of our mental models, the degree to which the models accurately reflect reality, determines how well we think and thus how well we survive.
The same is true of the software we develop -- the quality of the models is of paramount importance.
With software, however, there are considerations in addition to the quality of the models:
We operate from a basic view of the process involved in software development.
Entities and Attributes
The universe is populated by entities -- individual objects. We characterize the state of an entity in terms of it attributes. We choose the attributes that we deem important based on the nature of the problem we are attempting to solve. The state of an entity at any point is time consists of the values of the set of attributes.
Relationships link entities to each other in various ways. Relationships may have attributes of their own.
Entities have behaviors. They respond to events by changing the value of some of their attributes.
Classes abstract features that collections of entities have in common.
Subclasses are specializations of their parent classes. This is the basis of inheritance, abstraction, and encapsulation.
Our world view supports multiple inheritance which allows a class to inherit from more than one parent class.
We admit multiple inheritance because it is closer to the way our mind works than the single inheritance model. The decision to use multiple inheritance or even single inheritance in developing a particular piece of software is a design decision that is made with regard to the specific problem to be solved and the features available in the language(s) to be used.
Object Oriented model
This is our view of the Object Oriented paradigm. It doesn't correspond completely with any of the prevailing models, but it is compatible with them all.