Divided into small parts called objects
Deals with data
Follows a bottom-up approach involving object invoking
More secure due to abstraction
Comparatively more code reuse
Overloading is possible
Adding new functions and data to the existing code is really easy
Has no access specifiers that can be used
Needs more memory than PP
Examples: .NET, Java, C++
Divided into small parts called functions
Deals with algorithms
Follows a top-down approach involving function calling
Less secure than OOP
Limited code reuse
Overloading is not possible
Adding new functions and data to the existing code is not easy
Has no access specifiers like public, private, and protected
Needs less memory than OOP
Examples: C, QBASIC, Fortran