Wikipedia suggests
Object-oriented programming is an approach to designing modular reusable software systems. It is a programming paradigm based on the concept of objects.
Classes and objects are the two important aspects of OOP. As we saw earlier an object is an instance of class and it has its own attributes & methods, class is where all these attributes & methods are defined.
OOP helps in reducing code complexities & redundancy by promoting better software design practices as opposed to structural/procedure-oriented programming using the concept called objects. OOP really shines when designing large software systems which typically require huge amounts of inter-dependencies among the blocks of code. By following the OOP approach, a software system becomes more reusable, maintainable, scalable, secure and overall less complex compared to structural programming. There are four main principles of OOP: Inheritance, Abstraction, Encapsulation and Polymorphism. Let's cover them now.