I've had experience with OO since around 1998, and I'm fairly familiar with Java and C++.
Guys, you can write object oriented code in C. Yes you read that right. C code can be object oriented, although the language doesn't natively supports it. GTK+ is a good example of an object oriented C library.
For middle to large programs, OO is generally a good idea, because it modularizes your code and makes it easier to understand, if done correctly. The last thing anyone would want is something like grfio.c in the eathena source code (try reading it, but you'll get nightmares).
But don't overdo it. Too much abstraction distracts the reader.
Garbage collection can improve productivity - a lot. For many applications, on today's computers, manually handling memory just isn't worth it. The speed gains are minimal and probably not noticable at all, while productivity is decreased. It's also a common source of bugs.
As for Java: don't use it for games. Don't use it for desktop applications. Server software, maybe. Requiring the user to install a 15 MB JVM is nuts, and it hogs memory.
java is always slower, whatever you do b/c of the fact that the bytecode needs to be interpreted !again! even though cou compiled it previously!
Java is JIT-compiled. Bytecode is compiled to native CPU instructions at runtime, meaning it can run just as fast as a C/C++ program. But Java apps still use a lot more memory.
And yeah, it's non-free, unless you count the GNU Java Compiler. But the GNU implementation of the standard library is a lot slower than Sun's.
Please don't try to say Java is not OO
I'd say Java is
too OO. Everything is an object. References? Pointers? What's that?
... those are things already in the STL!!!! any experienced C++ coder would be quite ashamed *not* to use that until specific needs dictate otherwise.
I agree, but only if you don't support broken compilers with broken STL implementations. Standardizing on gcc is good.