Procedure programming: Fortran, Pascal, etc.
OOPs isn't that difficult.
Think of a car. It is an object. You then interact with the object by calling its methods such as "accelerate", "stop", etc. As the one using the object, you don't need to know the mechanics behind performing an action, you just use the interface - pedals, steering wheel, switches, etc.
When writing OOPs programs, you look at the object, decide how your are going to interact with it and the data it contains, and then write methods to access, modify, etc, the data within.
Inheritance is how you reuse a lot of code. Start with something like "living creature". What are all the data elements that are part of a living creature: consuming energy, disposing of wastes, etc.
So now we move to mammal. Everything that is in living creature is inherited by mammal, but then there are unique elements to mammal such as "live birth". Next move to feline, inheriting the elements of living creature and mammal, add 4 legs, tail, whiskers, etc. So the object cat has all of the properties specifically written into it, plus all the properties and methods written for the objects which it inherited.
So writing a program comes down to implementing objects and then using their methods. It doesn't matter what sequence you use to access the objects, you can access any one at any time where procedural code requires you to perform step A, then step B, etc. OOPs allows you to do step B, then step C, then step A, then step F, etc,.