Computer Programming is in some ways like art, there is often more than one way to accomplish a task, more than one type of program to solve a problem, and more than one programing paradigm to choose from. As computer programming becomes more popular, new programming languages are being adopted and new paradigms have also evolved to govern the implementation of such languages. Object Oriented Programming (OOP), is currently one of the widely accepted and practiced programming paradigms in use today.
A major advantage of OOP is that it is viewed in some quarters as a closer representation of how humans think than structural programming paradigm. As humans, our life is a series of interactions; we interact with other humans, animals, objects like books or even machines. We each have characteristics that help define who we are and such characteristics are either unique to us or similar with others who perhaps can be classified as members of the same group as us. We also perform activities during our interactions with other objects, and such interactions usually produce results which in some cases might even become a base for further interactions. The OOP paradigm embraces this view in programming, it allows the developer create classes which define the characteristics of an object and the different activities (called methods) the objects in a class can perform during interactions with other objects. (Brookshear, Smith and Brylow, 2012, p. 247, p. 276 – 282)
This approach allows a developer to break down large and often complex software projects into smaller units called modules. This modular nature of OOP encourages the reuse of existing codes to represent new objects, and it also allows the modification of such codes to properly reflect the differences between the new objects and the previously existing ones. This is due to the inheritance features in OOP that allow a developer not only define a super class (or parent class) with its properties, but also create sub classes (called child classes) that inherit some of the properties of the parent class and could have some additional properties or methods of their own as well as lack some properties that are naturally within the parent class (Cashman, Shelly, & Vermaat, 2004, p. 405).
Another interesting feature in OOP is that it encourages encapsulation; this allows a developer separate an objects’ implementation from its behavior and restricts access to the objects’ its internal data. This minimizes interdependencies between the modules and also helps in the creation of graphical user interfaces for the software project. It goes without saying that this approach to programming allows for easier maintenance of software as new additions or updates can be made without necessarily affecting the code the code in the super class or altering previous modules.
Personally, I think Object oriented programming actually reflects our natural way of thinking as humans, although I should also point out that this does not make it is easily understandable, especially to a developer who previously used structural programming languages and paradigm. Personally, it took me a while before I could properly understand how to use OOP concepts effectively in my projects. I also feel sometimes structural programming is a better approach for projects that are not so complex.
Cashman, T.J., Shelly, G.B, & Vermaat, M. E. (2004). p. 405 Discovering Computers: Fundamentals editions. Boston: Course Technology