The object-oriented approach helps to handle the complexity of the software development and also in the development of adaptable and extensible systems.
Software developed with the OO approach is composed of discrete objects interacting with each other to give rise to the overall (complex) behaviour of the system. Take a look at this diagram.
In C Programming we follow a structured/procedural approach wherein we have data declared in the form of variables and behaviour in the form of functions. We call a series of functions and every function call achieves a particular functionality. In this case, we are very much concerned about the functionality and not about the data.
In object-oriented we take more real-world approach because data and functionality are not two different things. Actually, we have entities in the real world that perform some task (functionality) and we use attributes to describe those (data). (An entity is something that exists as itself, which might be tangible, intangible or conceptual.) For an example let’s assume a CAR as some real-world entity car moves so move() can be considered as performing some task or functionality and we can use a model name, colour, make, flue type etc. attributes to describe a car so that becomes data.
In object-oriented methodology we have multiple such entities that have their own functionalities and data (Attributes and behaviours), they interact (calls each other’s functions) with each other and the functionality is achieved. These entities are called as objects in object-oriented terminologies.