Object-oriented programming (OOP) is a software programming model constructed around objects. This model compartmentalizes data into objects (data fields) and describes object contents and behavior through the declaration of classes (methods).
OOP features include the following:
Encapsulation: This makes the program structure easier to manage because each object's implementation and state are hidden behind well-defined boundaries.
Polymorphism: This means abstract entities are implemented in multiple ways.
Inheritance: This refers to the hierarchical arrangement of implementation fragments.
Object-oriented programming allows for simplified programming. Its benefits include reusability, refactoring, extensibility, maintenance, and efficiency.
OOP has been the programming model of choice for the last decade or more. OOP's modular design enables programmers to build software in manageable chunks rather than in large amounts of sequential code.
One of the great benefits of OOP is that of scalability, with objects and definitions having no finite limitation. Also, the separation of data from method prevents a common problem found in older linear software languages. If a bug appears in a linear code, it can be translated through a system and create masses of hard-to-trace errors. Conversely, an OOP program, with its separation of method and data, is not susceptible to such proliferated errors.
Popular OOP languages include Java, the C-family of languages, VB.NET and Python.
So-called "pure" OOP languages include Scala, Ruby, Eiffel, JADE, Smalltalk and Emerald.
Inheritance can be defined as the process where one object acquires the properties of another. With the use of inheritance, the information is made manageable in a hierarchical order.
When we talk about inheritance, the most commonly used keyword would be extended and implements. These words would determine whether one object IS-A type of another. By using these keywords we can make one object acquire the properties of another object.
Abstraction refers to the ability to make a class abstract in OOP. An abstract class is one that cannot be instantiated. All other functionality of the class still exists, and its fields, methods, and constructors are all accessed in the same manner. You just cannot create an instance of the abstract class.
If a class is abstract and cannot be instantiated, the class does not have much use unless it is subclass. This is typically how abstract classes come about during the design phase. A parent class contains the common functionality of a collection of child classes, but the parent class itself is too abstract to be used on its own.
Polymorphism is the ability of an object to take on many forms. The most common use of polymorphism in OOP occurs when a parent class reference is used to refer to a child class object.
Any Java object that can pass more than one IS-A test is considered to be polymorphic. In Java, all Java objects are polymorphic since any object will pass the IS-A test for their own type and for the class Object.
It is important to know that the only possible way to access an object is through a reference variable. A reference variable can be of only one type. Once declared, the type of reference variable cannot be changed.
The reference variable can be reassigned to other objects provided that it is not declared final. The type of the reference variable would determine the methods that it can invoke on the object.
A reference variable can refer to any object of its declared type or any subtype of its declared type. A reference variable can be declared as a class or interface type.