Up until this point basic concepts and a possible methodology have been defined but it is still not clear why a system designer would want to bother using the Object Oriented approach instead of relying on other paradigms like formal, structured, logical or functional programming. It is specially important to answer this question in the context of this thesis where an Object Oriented model is being proposed as a general framework.
A lot has been written about the benefits of Object Orientation and the reasons why nowadays has become so popular. This is a brief list that tries to illustrate the main advantages usually attributed to OO.
Objects map more directly to real world concepts. As it will be later discussed, although the world is not made of objects, the object-oriented paradigm is the most suitable way to understand systems that reside in it. Objects are suited to model concepts related to whatever domain under analysis and these objects are closer to the actual software solution. Therefore, object- orientation bridges the gap between the problem space and the solution. It also brings common terminology between developers and domain stakeholders.
Objects enhance encapsulation. Every class encapsulates a concept. By defining a class we separate between state and behavior: attributes and their values represent the object state while the operations in a class define the behavior of that family of objects. According to the encapsulation principle, attributes should not be accessible from outside the class. Internal state can only be modified by an object responding to a message. Published operations represent the object accessible behavior, but objects can also have non-accessible private behavior.
Objects improve information hiding. Encapsulation is in fact the first step towards a more restrictive and stronger form of structuring object-oriented systems: information hiding. In an object-oriented system we may choose not to publish some information for different reasons such as limiting the system complexity and make it more understandable or ensuring system integrity. We may choose to hide private behavior or operations but even more, we may decide to hide all methods or implementation details and just publish an interface for some classes. This interface may be enough for using the whole system functionality while not becoming overwhelmed by its internal details.
Objects promote good structuring. Software systems resulting from object-oriented analysis and design are better structured. Both encapsulation and information hiding, as already commented, enhance good structuring.
Objects favor re-use. All the above properties make object-oriented systems more reusable, not only in what code respects but also conceptually.
It is interesting to note that although all the benefits of object-orientation are better understood when following a complete object-oriented development process, it is also useful to use some of the OO techniques to just some parts of the process. In [Meequel et al., 1997] they explain an approach in which object-oriented analysis techniques are used although the resulting code is not programmed in an object-oriented language due to platform restrictions (embedded software).