Best OOP resource for beginners, on up?

i’m looking for the best (ie. most accessible) resource on OOP. Any suggestions? The less to read, more complete, more accessible, the better. Language-neutral preferred but not required. If it must be “for beginners” or “for non-beginners” than please classify as such. Ideally, it will, of course, be for both.

Didn’t know where else to post this question on this forum. This seemed like the most likely place since Java is OO, BUT as I say, it doesn’t have to be about any 1 language at all, although it may be.

If you’ve used this one resource, and it’s the only one you know, then please think twice before responding. Unless that you are SO CONFIDENT that your recc. is heads and tales better than whatever else is out there.

Thanks, bowie101

This is like “what’s the best resource for cars”… OOP is a huge topic, and what you want is not clear, especially since you want something language agnostic… the history of OOP? The theory behind it? Interviews with the creators of early OOP languages? How to develop an OO language? Design patterns in OO software? … I could keep going all day … There’s almost not a book about programming an OO language that doesn’t cover what OO is and the basics of using it; are we to recommend the very best programming book among all programming languages that support object oriented programming?

With such a broad question the only thing I can think to recommend is Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages, because the exploration of a variety of languages based on entirely different paradigms will give you a better understanding of OO’s strengths and weaknesses.

thanks. yes, I see your point. didnt think about it like that. Design patterns is close, but let’s say someone wants to learn how to practice/execute/“do”/program in an object oriented language for the first time. The best intro resource to it, that (at the same time?) can quickly get them up to speed. OOP in a nutshell. They could then take those concepts and apply them to learning any specific language, so that when learning the language, they aren’t necessarily learning 2 things at once (the language AND the OOP). They are then free to concentrate just on the syntax.

I don’t think learning to program works like that.

oh come on. Surely there must be something. if not, there should be, but I’m sure there are many examples out there already. An intro to OOP, no? Written with pseudocode, or with some examples in a language, but light enough on syntax so that it doesn’t bog one down? Code there just for illustrative purposes only? A resource that you can read through, understand, and learn from, without the aid of a computer? For end-of-the-day, brain-is-already-tired consumption? Something for my senses that I can take in?

Personally speakig, that’s always been my problem with trying to learn all the new IT things. I just spent the last 10 hours on a computer. I usually fall asleep or otherwise don’t learn much from another 2.

For instance. This morning, I printed out this:

Introduction to Object-Oriented Programming

and this:

Designing and Creating Objects

These happen to be in Java. Easy, light reading that I could understand and absorb AWAY from the computer.

Now it just happens that after taking a java course years ago, I already new this stuff, but the emphasis on data encapsulation in this article was a nice addition. So I learned a thing or 2. Of course, I want to ramp it up so that I know all kinds of relevant things about OOP before I step to a computer to use it. My next thought would be to head to webmonkey to see if they have a tutorial on the concepts. It would just be ideal to find a thorough or more complete tutorial. If I have to access the computer to absorb the material, so be it, but it’s better if not.

The problem is there is a lot you must learn before you think about OOP, and then there is a lot that you must learn to pull off to properly program in OOP.

Those articles show you the syntax, but they don’t show you why you have things like methods, how you should design your classes, etc., all important stuff.

If you’re looking at getting into programming in an OOP language, you should slow down and take your time to learn. If you rush, you’ll either wind up picking up bad habits or getting frustrated with your search and give up.

I agree with your statements. In my mind, seperating learning a language from learning OOP (or vice versa) is an example of “slowing down”.

a lot you must learn before you think about OOP, and then there is a lot that you must learn to pull off to properly program in OOP.

can you then point to the resources for doing this?

It’s the basics of programming… there is a flow:

  • basic syntax
  • data types
  • variables
  • conditionals
  • loops
  • functions
  • classes
  • methods
  • inheritance
  • polymorphism
  • data design

and so on. I don’t know of any online resources that have all this, but just about any computer science text book will have information on it.

Learning computer science is not a quick process. It’s not like learning how to assemble a TV stand. It takes time, patience, and experimentation. Trying to rush things is just going to lead to disappointment.

I’ve been programming most of my life and I’m still constantly learning new things.

believe me, I understand your points, and I hear them.

As you say, any computer text book. Are there some you know of that are better than others, that can be found online?

loops, conditionals, variables, etc…that could all be covered under algorithms in a good algorithms chapter or book, no? (leavig the specific language alone, for the time being)

Not really. Loops, conditionals and variables are implemented differently and are used differently in different languages. If your goal is to learn to program, rather than to write a research paper on compilers, then trying to separate learning the language from learning the tokens of the language is counterproductive.

If you move up to a higher level of abstraction, you can get books like Design Patterns: Elements of Reusable Object-Oriented Software. But it’s not going to cover loops, conditionals and variables, and its examples are written in real languages.

yes, this is the level of abstraction that I believe I am after. But how about one that is accessible to beginners? This book gets a lot of good reviews, but among the bad reviews are complaints (abeit few) that it’s not for beginners. Nonetheless, this is one book in my shopping cart.

as I say (did I say?) I’m not concerned about syntax so much (or at all), but if it’s written with a real language, then so be it. But it might as well be a language relevant to the web.

(now googling object oriented python)

The books by Deitel are among the better programming text books I’ve read: Amazon.com: Java How to Program (6th Edition) (How to Program (Deitel)) (0076092037613): Harvey & Paul) Deitel & Deitel: Books

However, I’ll repeat my warning: if you aren’t familiar with all those things I listed above classes, you’re heading for trouble. Programming is NOT something you can learn by rushing. I’ve seen many people try and fail… it’s one reason computer science degrees have such high drop-out/major change rates compared to others. It’s hard and you can’t rush.

For beginners I recommend some of the ‘head first’ books. They writing style is more conversational with fun examples. Some people cannot read the GOF book (Design Patterns: Elements of Reusable Object-Oriented Software) without falling asleep :stuck_out_tongue:
Head First Design Patterns: Amazon.co.uk: Eric T Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra: Books
Head First Object-Oriented Analysis and Design: A Brain Friendly Guide to OOA&D: Amazon.co.uk: Brett McLaughlin, Gary Pollice, David West: Books

Jurn

Let me ask you this. Do you recommend learning JSP first, of itself, and as a gateway to Java? Or is Java best learned head-on?

assuming there is no immediate business need for either, but for someone with a web generalist background?

Do you want to work on legacy software in big business?

Or do you want to work on new software at small to mid sized companies, and do consulting/freelance work?

Java only has a place in the former. It’s the language of the 90s and the enterprise. It’s not what new CS graduates are using, it’s not what startups are using, and with Oracle now in control, it’s not going to be making a comeback. It certainly won’t disappear, but it’s destined to end up much like COBOL today.

If you want to prepare for the future, Python would be a much more appropriate place to start.

Actionscript and C#.NET are also good places as well.

Since you’re talking about languages, maybe I missed my point.

When you learn any programming language, you don’t start with OOP (even in an OOP language). There are other fundamentals you must learn first (which I listed above).

ok, that’s good to know. Python was always the one I wanted to learn first, but I assumed it was object-oriented enough.

I found this:

Introduction to OOP with Python

yes, I know about loops and conditionals etc. I wanted to get beyond all that.

Surely some has written an introduction to Obect Oriented programming!. I started with assembler and learnt a lot from a book on software engineering. Assembler’s are (VERY) procedual and now I would like to progress to OOP in php. I know procedual php well but want to step up to the current methods. Procedrual currently covers all my needs but always looking to expand and improve. Might have a look at Sitepoints new book.

I’m reading Sitepoint’s new PHP Masters which has a very thorough chapter on OOP at the very begnning (chapter 1). It’s for PHP, but the basics of OOP are fairly universal.

I have purchased a copy and it seems very well aimmed, consice and straightforward. Let you know when I have had a better look at it.