>>1
>>3
My advice is to not take either classes, or, if you're required to, to take C++. Java sucks. But drop the OOP obsession before it's too late. OOP is not the panacea of programming, the Best Practice™, it's mostly misused by retarded professional enterprise scalable AJAX Web 2.0 XML-based software solutions "engineers" (read: MBA idiots), and generally misunderstood. You don't need much of a specific language to do OOP, and you'll get the important concepts if you learn any decent language out there, such as Python or Ruby, which by the way have much, much, much, much better object models and features than C++ and Java together. Consider OOP just one way to do things, which happens to be the right tool for
some jobs, but not the right tool for other jobs. You'll typically want to be fluent and be able to mix all programming styles to solve any significant problem.
Instead of focusing on OOP, focus on functional programming. Learn Python and/or Ruby for practical multi-paradigm (lol buzzword) programming. Both of these languages have awesome object features, but they can also be used for classic imperative tasks, they support functional programming and perhaps other stuff. Then if you want to perfect your vision of functional programming (the most useful, flexible, productive tool which is good for some tasks, also the most fun to use), then Google SICP and learn Scheme, a dialect of Lisp (language predating all popular programming languages but Fortran, from which most "modern" features were inherited/rediscovered), for which you have a good free book from MIT.