OOP looked really neat at the times when computers had one CPU, very little RAM, and no easy in-process concurrency.
OOP made a few genuinely good things popular in the common software practice: modules, public vs private interface separation, the idea of interfaces. Other features, like inheritance, or encapsulated mutable state, proved to be more problematic, both in general, and in the modern computing environment in particular.
UML, at the time, was exceedingly useful if you just used the whiteboard version of it. Being able to clearly communicate with another developer by drawing a class diagram and having each line, box, and cardinality mean something precise was very helpful.
UML as a programming language was awful. UML as a specification language was often even worse.
There is some connection to object-oriented programming and desktop GUI paradigms, that I remember were written about in computer magazines at the time, but is never mentioned now. Like, if you want to delete this document, you drag it to the trashcan! Object oriented!
Am I right or do I remember it wrong?
Not clear to me how that's object-oriented. You're not sending a "put yourself in the trashcan" message to the document, or sending a "pull the document to yourself" message to the trashcan. If anything, you're invoking the environment's "drag" function with two arguments, "document" and "trashcan"; that's object-oriented only insofar as the environment contains every function and can be sent messages to invoke them.
To continue the over-analysis in good faith: I think the trashcan example points out the inheritance of draggability. Any file object in a directory gets it by default, without having to think too much about it.
Then the trashcan inherits from a directory, making it able to have things dropped on it. But it overwrites the action taken from movement to deletion. That maps "nicely" onto the human mind.
> If anything, you're invoking the environment's "drag" function with two arguments, "document" and "trashcan";
A perfectly valid alternative description. But having a do-it-all environment with every function doesn't sound OOP to me.
OOP made a few genuinely good things popular in the common software practice: modules, public vs private interface separation, the idea of interfaces. Other features, like inheritance, or encapsulated mutable state, proved to be more problematic, both in general, and in the modern computing environment in particular.