Sometimes I am asked, "Mr. Ebata, when you create a simulator, what kind of modeling do you do to define the interface (I/F)?"
My answer is always the same.
"I don't think about it."
-----
In my programming, I just describe things in the real world in a structure (class) and I/F later when things need to communicate with each other.
I believe that this kind of design concept is called "object design" and programming based on this concept is just called "object-oriented programming".
There is only one advantage to this programming --
"Easy". This is the only word that comes to mind.
However, in order to make this "easy", you need to be willing to not use any of the features of "object-oriented programming".
I don't use "inheritance" or "generalization" because they are too much trouble when debugging.
"Multiple inheritance" is sure to be confusing.
I believe that if you need "polymorphism," you're not very good at making it.
I find "private" and "public" annoying to death, so I just use "public" for everything.
If you use this kind of thing, the readability of your program will get really bad. It's not very readable.
-----
Well, maybe it's because this is a "personal level" programming of a researcher that we can think this way, but
For me, modeling is simply describing the "things" that I want to appear in a class (structure) as I can see them. That is my method.
Other than that, I think it's fine to learn when you need it -- although I wonder if the time is coming.