
Ask HN: Are there any courses/course materials that teach oop concepts well? - __strisk
I am trying to find a good course that outlines the essential topics for object oriented programming and encourages practical applications of the theory.
======
hbcondo714
I used to teach this Object-Oriented Analysis and Design (OOAD) course[1] but
it's still being offered. It runs 10 weeks but is geared towards continuing
education students who work full-time.

The course website doesn't give much details so feel free to view my
website[2] that details the course syllabus so you know exactly what you will
be learning including UML, GRASP, Design Patterns, OO Metrics and more.

[1]
[https://ce.uci.edu/courses/sectiondetail.aspx?year=2017&term...](https://ce.uci.edu/courses/sectiondetail.aspx?year=2017&term=SPRING&sid=00263)

[2]
[https://www.amarkota.com/portfolio/uci](https://www.amarkota.com/portfolio/uci)

------
joeyrosztoczy1
This is an all time favorite: Sandi Metz' Practical Object Oriented Design
[https://www.amazon.com/gp/product/0321721330/ref=as_li_tl?ie...](https://www.amazon.com/gp/product/0321721330/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321721330&linkCode=as2&tag=sandimetzcom-20&linkId=d5bd799fb895b56032932fc813dca07d)

It takes the cognitive overhead off of the programming language completely and
focus on design principles in a really modern learning style.

~~~
__strisk
Sandi Metz seems to have the oop teaching thing down. I looked at her 3 day
course,
[https://static1.squarespace.com/static/537c0374e4b0f52ed9294...](https://static1.squarespace.com/static/537c0374e4b0f52ed92942e6/t/53f48c2ee4b08efca8cfc116/1408535598852/PracticalOODCourseOutline_v2a.pdf)
to see what topics she covers there and it seems like it has mostly do with
SOLID principles. Thanks for the suggestion, I've been looking at that book as
well.

------
savethefuture
Jeffery Way has a way with words: [https://laracasts.com/series/object-
oriented-bootcamp-in-php](https://laracasts.com/series/object-oriented-
bootcamp-in-php)

------
zer00eyz
OOP in it self isn't that hard to wrap your head around.

The tough part is the patterns that are used:
[https://en.wikipedia.org/wiki/Design_Patterns](https://en.wikipedia.org/wiki/Design_Patterns)

Go buy that book and learn to read and understand enough c++ and small talk to
read it cover to cover OR find examples in your favorite language.

This book is a trap, because it will take you a while to get out of the
mindset of being "pattern happy" (maybe). There is plenty of material to
follow up with afterwards to learn the downsides of each pattern, and when not
to use them.

------
noblethrasher
If know a language like C++/Java/C#/JavaScript/etc, then try building a simple
app _without_ using any of the following constructs:

    
    
        if, while, for, foreach, do, goto, and switch. 
    

Also, don't expose any instance variables or use setters, and try to limit the
use of assignment statements to constructors only.

Implementing something as simple as a FizzBuzz solution under those
constraints will be enough to understand OOP.

~~~
jabv
Hi - I am certainly a novice (or lower) programmer, but I have not even a clue
about how to begin in the manner you describe. Any preview you would like to
offer?

------
__strisk
From my research so far, here is what I have found...

the main topics that one should learn are: * some tidbit of history on why oop
* fundamental object oriented concepts: inheritance, encapsulation, and
interfaces * network of objects and their restricted interactions

* modeling a domain using objects * documenting objects and their interactions * how are objects represented in memory * SOLID principles * solutions (design patterns) to common problems * concurrent design and thread safety in oop designs * tools in oop design (CRC cards, UML, etc.) * actually making projects and laying out the code in an implementation language.

Here are some books I seem to like so far.

books:

Holger Gast - How to Use Objects: Code and Concepts
([https://www.amazon.com/gp/product/0321995546](https://www.amazon.com/gp/product/0321995546))
This book seems to be what I was looking for. It has an integrated practical
approach using the Eclipse source code as examples for various object oriented
concepts. I have cross-checked various sources and it seems like this book
covers all relevant concepts including SOLID principles.

Bertrand Meyer - Object-Oriented Software Construction
[https://www.amazon.com/Object-Oriented-Software-
Construction...](https://www.amazon.com/Object-Oriented-Software-Construction-
Book-CD-ROM/dp/0136291554) This seems to be a great reference. However, I
haven't looked too thoroughly into it. I found a nice quote though.

    
    
      "Today, no one will call security if one of the cocktail guests 
      declares object-oriented tastes. This is the buzzword effect, which 
      has been dubbed mOOzak: the omnipresence, in the computer press, of 
      O-O this and O-O that, causing a general dilution of the concepts. 
      The words flow so continuously from the loudspeakers — object, 
      class, polymorphism... — as to seem familiar, but are the concepts 
      widely understood? Often not." (29.1)
    

only found one course that I would probably refer to... courses:
[https://web.stanford.edu/class/archive/cs/cs108/cs108.1092](https://web.stanford.edu/class/archive/cs/cs108/cs108.1092)
This has great course notes and projects to implement using object oriented
programming.

------
rv11
If you are ready to pay then go for Pluralsight, it has couple of good courses
on OOP.

------
vram22
Bertrand Meyer's [1] book, Object-Oriented Software Construction [2],
mentioned in another comment here, is good, IMO; some people consider it a
classic. I had read large parts of it some years ago. He is the creator of the
Eiffel programming language [3], which seem really good (I tried it out, some,
using EiffelStudio, his company's main product - it also has a GUI libary for
creating GUI apps, at least on Windows where I tried it, and can make EXEs,
also has a possibly unique notion of freezing and melting, IIRC, related to
compilation), though unfortunately Eiffel does not seem to have much adoption
(like some other advanced languages).

According to the Wikipedia article about him, he also created the idea of
Design by Contract [4], involving preconditions, postconditions and
invariants, and DbC is built-in to Eiffel. DbC is now supported in many
languages or in their libraries.

[1]
[https://en.wikipedia.org/wiki/Bertrand_Meyer](https://en.wikipedia.org/wiki/Bertrand_Meyer)

[2] [https://en.wikipedia.org/wiki/Object-
Oriented_Software_Const...](https://en.wikipedia.org/wiki/Object-
Oriented_Software_Construction)

[3]
[https://en.wikipedia.org/wiki/Eiffel_(programming_language)](https://en.wikipedia.org/wiki/Eiffel_\(programming_language\))

[4]
[https://en.wikipedia.org/wiki/Design_by_contract](https://en.wikipedia.org/wiki/Design_by_contract)

Scott Ambler's The Object Primer was also good, also read some years ago.

IBM developerWorks article by him about the topic:
[https://www.ibm.com/developerworks/library/ws-using-
oo/](https://www.ibm.com/developerworks/library/ws-using-oo/)

The book: [https://www.cambridge.org/core/books/the-object-
primer/BD0D5...](https://www.cambridge.org/core/books/the-object-
primer/BD0D59A20FFCF1DB1FD2F0E813DC5533)

Just checked, it is still available, though the page at the link below says
there is a newer version (linked on same page): [http://www.amazon.in/Object-
Primer-Application-Developers-Ob...](http://www.amazon.in/Object-Primer-
Application-Developers-Object-Orientation/dp/0132424967)

Update: Just remembered, when I was checking out Eiffel some years ago, I had
read up on success stories about it. One very interesting one was about how HP
used it to create a printer driver for a printer, after attempts using another
more mainstream language had worked, but the driver had a lot of bugs. IIRC,
the article [5] said that with Eiffel, the new version of the driver was
created a lot faster, and also had a lot less bugs.

[5] Found the article from a Google search:

[https://archive.eiffel.com/eiffel/projects/hp/creel.html](https://archive.eiffel.com/eiffel/projects/hp/creel.html)

------
anythingbot
SICP

