OOP isn’t just language features. It is a way of thinking about problems and solving problems combined with language features which help support that way of approaching a programming problem. To accomplish this way of solving problems we follow a number of practices.
An OOP developer look at the world as nouns. He/she tries to identify objects in the real world and model those in his/her program. It is all about objects and their relationship between each other. Individual objects are to be encapsulated and isolated from each other.
But there are many other ways of doing it. With Data oriented design for example think in terms of data flow and data transformations rather than objects and their relations.
With functional programming you think in terms of function composition. You are in a verb based world. You think about what you want to do first. What you do this too, the objects is secondary. In functional programming and data oriented design objects may end up as things you cannot easily relate to the real world. They are just bundles of data needed to perform a computation or serve up a result.