The difference between procedural programming and object oriented programming is basically all the entities are self contained functionalities to manage/operate themselves. But, in procedural programming, every entity (of-course data items) are passive, by the means they are simply information which doesn't contain managing/operating capabilities to transform themselves.
for example. In Object oriented programming, to represent a complex numbers we use complex number data type which is capable of performing operations itself like getting input from the user, performing arithmetic operations, display the complex number in the correct format, etc., these operations are defined through classes, properties and methods. But, in Procedural programming we use to have all data items required as counter parts of a complex number (such as imaginary part and real part) should be stored in separate variables, coordinating, managing and manipulating on these counterparts are only possible through external
functions/procedures and in-order to perform an operation on these counterparts of a complex number, we should call these procedures and pass them as parameters (carefully), get the result and store them in other set of variables.
In the case of procedural programming, keeping more entities (such as complex numbers) requires more effort in terms of independent variables, custom functions/procedures, etc.,
Each feature of Object oriented programming provides one or more benefit to us
The key features:
1. Abstraction - Makes the problem simple and neat enough to cop up with.
2. Encapsulation - Makes the problem particles self contained everything required.
3. Data hiding - Makes the internals of an object/entity protected from outside resources.
4. Inheritance - Makes the code reusable.
5. Polymorphism - Makes the entity and its interfaces generic and friendly.