OOP

OOP is a programming paradigm to model real-world problems using objects.
Most programming languages support OOP, except C, which is the only system programming language.
OOP has four principles that add modularity and boost reusability. 
* Encapsulation, which bundles data and methods that work on that data within one unit. 
* Abstraction, which shows only essential attributes and hides unnecessary information. 
* Inheritance, which means one class acquires the property of another class.
* Polymorphism, which means the behavior of the object may change according to state or context.

OOP has two styles.
* Class-based OOP is one style of OOP. Where an object’s behavior is determined before is created. Class is a code block that stores the blueprint or template of objects and can't be changed later. Here, inheritance is attached to the class, and later every object will receive one copy of the inherited properties and its own properties. It forms a tight rigid hierarchical taxonomy between parent to children.
* Prototype-based OOP is another style of OOP. Where programming methodology focuses on what an object does rather than what it will be don’t need to predict the future. Here, inheritance is attached to a live working object that is called prototype and accessed by all the children. Objects don’t get copies of inherited behaviors, they receive the prototype object, and can be changed later. It doesn’t form tight and rigid taxonomy. It is as effective as a class-based inheritance.