Humans have brains optimized for keeping track of complicated relationships between about 20 other people. For some time a significant percentage of our survival depended on negotiating group politics. Most of this consists of knowing:
So those with AspergersSyndrome won't get OO?
lol. Well, they certainly won't put it in terms of 'politics'.
Oh yes. The joy of OO programming versus procedural programming is the move away from complex logic. Logic is really hard to do right, but in the procedural world, it's all you've got. And since the world of human experience that software has to fit into to be worth having is a very complicated place, procedural programming hard squared. In fact cubed, because logic is something we project onto the world, not an intrinsic feature of it. Whereas OO plugs into a suite of techniques we all already have by letting the (writers and users of the) software deal with our world of human experience via the software on something more like our own own terms.
Refuted, or at least questioned, in links below.
I think one must first define "our" before this discussion can have meaning. Does "our" refer to the programmers of software or to the target users of software? My understanding of the purpose of OO is that it tries to represent the users' view of the world. One begins with discussions with the target users. The terms used by the users become classes with the same names. The programmers are then constrained to package methods within this framework. It may be individual stylistic issues as to whether this is a more natural approach for programmers, but the intent is to provide software that better matches the users' world.
"Our" is defined as programmers. Users shouldn't be able to tell which paradigm was used to write software.
[Discussion of GraphicalProgramming moved to that page.]
See OoDoesNotFitOurMentalAbilities? for an opposing view.
See also: OoBetterModelsHumanThinkingDiscussion, PrologFitsOurMentalAbilities, RelationalAlgebraFitsOurMentalAbilities?, OoIsAnthropomorphic