>>4
Don't equate OOP with Java. Java takes a poor implementation of OO and then turns it into a religion.
The classic definition of OO is that provided by Smalltalk. It boils down to the idea of message passing. Every object is responsible for its own internal state, and for responding to messages sent by other objects. When done right it can be a very elegant and intuitive way of programming. When done wrong you get Java, or sometimes even C++.
Have a look at Ruby for a modern Smalltalk-style OO language. Observe how it doesn't force stupid shit down your throat.