The term object-oriented was coined by Alan Kay in 1966 and describes a certain way to structure programs,
with the goal to reduce complexity.
According to him, OOP means: "messaging, local retention and protection and hiding of state-process, and extreme late binding of all things."
An object-oriented programming language, is a language that support the object-oriented ways of structuring programs.
Modeling your data is a necessary condition to program object-oriented, but it is not a sufficient condition.
You are doing Data Driven Design, when you are modeling your data and then work procedural on that data.
The articles there put heavy emphasis on "constructing reusable chuncs of code
" and state that this is one of the most important aspects.
This is not at the core of OOP.
OOP is an attempt to reduce complexity of systems, but reusing code increases coupling and with that increases complexity.
This is why "extreme late binding"
has the word "extreme"
in front of it.
Code reuse is not antithetical to object orientation, and it should be on every programmers mind.
But it is not at the heart of OOP.
There is a reason why OOP has the rank of paradigm and is not a simple category of programming languages.
You can write object-oriented code in many programming languages that do not provide utilities to facilitate that.
Hence languages fall on a spectrum on how much they facilitate OOP,
but programming in one of those languages, doesn't make your program object-oriented.
Languages like Forth, or Uiua do not provide any way of representing objects.
Hence it is impossible to program object-oriented in them.
Procedural languages like Rust have structs and other composite data types
and hence allow for the programmer to construct the other needed pieces by them selves.
By that notion is C as much a object-oriented language as Java.
Yes, that means most of the marketing for Java or C++ has been false!
Kotlin is one step ahead in that regard providing you primitives that allow you more easily to structure programs object oriented.
It also allows you to profit from the inherent parallelization that is possible with such data models, thanks to a good thread model.