Object Oriented Design; designing (or modelling) a software architecture with classes and objects, which model the real and abstract objects in the domain model of the software.

The key components of object oriented design are objects, classes, messages and properties. Each object is an instance of a class, which describes the messages that the object can receive and the properties that the object has.

One of the key objectives of object oriented design is encapsulation of the implementation of objects, so that different implementations of objects with the same interface (i.e. they support the same messages) are interchangable.

Many object oriented languages also include inheritance as a core feature, although the code reuse and polymorphism one gains from this can be implemented in other ways, so it is often not counted as a requirement of object oriented design.