<p>The best book I know that follows fairly closely to this format is <a href="https://rads.stackoverflow.com/amzn/click/B01FGPK6YS" rel="nofollow noreferrer">Polymorphism: As It Is Played</a>, which observes two students slowly build out a calculator.  True to form, the book takes the reader deeply into the mindset and core philosophy of OO.  It's a quick read with very short pages; it took me a few hours.</p>

<p>The book also explores some important areas of the software development process.  Paired programming, which runs through the entire book, works well in the classroom (there are many questions about it here on this site), and aspects of Agile development are also explored.</p>

CC BY-SA 3.0
2017-12-08T13:30:27.650Z
2017-12-08T13:30:27.650Z
Ben I.
<p>There is “A touch of class” by Bertrand Myers. It is a very good book, at least a semester worth of learning in it.</p>

<p>I did not get OO, until I read it. I had previously done C++, java, C#, and some python. But when I read this book, I started to program OO properly.</p>

<p>The book uses a language called Eiffel. It is a good teaching language, and also used in large systems, safety and mission critical systems. It is probably quicker to learn Eiffel then another language (or two), than try to learn other OO languages from scratch. (This is the authors clame, and my experience as a learner)</p>

CC BY-SA 3.0
2017-12-08T17:36:43.043Z
2017-12-08T17:36:43.043Z
ctrl-alt-delor
<p>I found a book online (<a href="https://jignesh272.files.wordpress.com/2011/09/object-oriented-programming-using-c-sharp.pdf" rel="nofollow noreferrer">Object Oriented Programming using C# by Simon Kendal</a>), and it has an example of designing a simple administration system using OOP principles (<em>Chapter 6: Object Oriented Software Analysis and Design</em>).</p>

<p>It is not deep enough but could be used as a starting point.</p>

<p>I leave the question open for the time being as it can have more suggestions. Please feel free to add more and more resources.</p>

CC BY-SA 3.0
2017-12-14T07:56:19.323Z
2017-12-14T07:56:19.323Z
Nestor
<p><a href="https://rads.stackoverflow.com/amzn/click/0134054296" rel="nofollow noreferrer">Introduction to Programming with Greenfoot</a> by Michael Kölling might be what you want. Michael has a great grasp of OO and has built a great tool (Greenfoot) for beginners to explore it. The book has a number of simulations that are used to develop Java programming with OO principles integrated. </p>

<p>The first four chapters (especially) of <a href="https://rads.stackoverflow.com/amzn/click/0970579519" rel="nofollow noreferrer">Karel J Robot</a> by Bergin, Stehlik, Roberts, and Pattis also present OO principles in a simulation context, but also using a few simple design patterns. The Karel book has analogues for Python and Ruby also. Karel can be used within Greenfoot if desired or in other IDEs. </p>

<p>There is a teacher resource for Greenfoot (<a href="https://greenroom.greenfoot.org" rel="nofollow noreferrer">https://greenroom.greenfoot.org</a>) that has many projects for use within the greenfoot system. These are also simulations and show interesting objects moving and interacting on the screen (the World). New worlds can be created (inheritance) and new Actors as well. </p>

<p>It is easy to integrate design patterns into the curriculum with these tools since the supplied software infrastructure means that the student isn't starting with an empty screen but with a well defined framework in which to develop the ideas. So, the student starts at a higher level of abstraction than the language primitives. Classes, methods, interactions, composition, delegation, etc. are natural topics that can be explored early in the student's learning. </p>

CC BY-SA 3.0
2017-12-14T21:23:06.640Z
2017-12-14T21:23:06.640Z
Buffy
<p>I'm currently teaching OOP using Python 3 Object-oriented Programming by Dusty Philips. Find it on Packt or Amazon.</p>

<p>It's a practitioners book, it covers a bit more than just OOP including some unnecessary bits if you ask me (like concurrency). I've found it works out well when combined with a few other sources like Effective Python and some online materials on design patterns. If you follow it page by page I find it a bit too much focussed on Python details and not as much on the general OOP principles. </p>

<p>I think that in most cases you'll have to make up your own curriculum and fill it with bits and pieces from books you like :) There is rarely a perfect fit.</p>

CC BY-SA 3.0
2018-04-12T12:43:35.873Z
Welcome to [cseducators.se].  We're always glad to get more educators. I hope we hear more from you in the future!
Ben I.
CC BY-SA 3.0
2018-04-12T12:23:38.960Z
2018-04-12T16:46:07.277Z
2018-04-12T16:46:07.277Z
larslars
<p>I intend to teach some OOP methodology but everywhere I look, there are only syntethic examples and elaborations of various concepts of the OOP world (for example: what is inheritance, how to use interfaces).</p>

<p>Like <a href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/object-oriented-programming" rel="nofollow noreferrer">this</a> or <a href="http://www.c-sharpcorner.com/article/object-oriented-concepts-in-C-Sharp/" rel="nofollow noreferrer">this</a>.</p>

<p>What I'm looking for is a tutorial of how to solve a "real-world" problem (can be fictious) but with all (or most of) the steps of these:</p>

<ul>
<li>How to analyze the problem?</li>
<li>What are the objects?</li>
<li>What should be taken care of?</li>
<li>What classes should be created?</li>
<li>What pattern is recommended?</li>
</ul>

<p>I found a <a href="http://www.itmaybeahack.com/book/oodesign-java-2.1/html/index.html" rel="nofollow noreferrer">good book</a> online but it is way too detailed to be a quick guidance - though not a bad start. Nevertheless, I'm looking for a shorter and more practice-oriented approach.</p>

<p>As you can see, I'd like to have a tutorial that teaches OOP as a whole and not its parts.</p>

<p>The students are mostly beginners but trying to use a wide range of OOP concepts - they have a few months of experience.</p>

<p>Do you know any example that has this kind of <em>tutorial structure</em>?</p>

CC BY-SA 3.0
2017-12-08T12:00:07.637Z
What level are your students? What do they already know? How much experience do they have with programming? What is their dominant programming paradigm? There would be different answers for novices and for experienced programmers.
Buffy
CC BY-SA 3.0
2017-12-08T17:40:23.310Z
@Buffy I edited the initial post about the experience level of the students.
Nestor
<object-oriented-paradigm>
Resource recommendations for teaching OOP via a practice-oriented example
# Resource recommendations for teaching OOP via a practice-oriented example

(Asked by: username_0 on 2017-12-08)

I intend to teach some OOP methodology but everywhere I look, there are only syntethic examples and elaborations of various concepts of the OOP world (for example: what is inheritance, how to use interfaces).

Like [this](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/object-oriented-programming) or [this](http://www.c-sharpcorner.com/article/object-oriented-concepts-in-C-Sharp/).

What I'm looking for is a tutorial of how to solve a "real-world" problem (can be fictious) but with all (or most of) the steps of these:

* How to analyze the problem?
* What are the objects?
* What should be taken care of?
* What classes should be created?
* What pattern is recommended?

I found a [good book](http://www.itmaybeahack.com/book/oodesign-java-2.1/html/index.html) online but it is way too detailed to be a quick guidance - though not a bad start. Nevertheless, I'm looking for a shorter and more practice-oriented approach.

As you can see, I'd like to have a tutorial that teaches OOP as a whole and not its parts.

The students are mostly beginners but trying to use a wide range of OOP concepts - they have a few months of experience.

Do you know any example that has this kind of *tutorial structure*?

**Tags:** object-oriented-paradigm

> **Comments:**
> **username_1**: What level are your students? What do they already know? How much experience do they have with programming? What is their dominant programming paradigm? There would be different answers for novices and for experienced programmers.  
> **username_0**: @username_1 I edited the initial post about the experience level of the students.  

---

## 5 answers

### Answer by username_4 on 2018-04-12. Score: 3

I'm currently teaching OOP using Python 3 Object-oriented Programming by Dusty Philips. Find it on Packt or Amazon.

It's a practitioners book, it covers a bit more than just OOP including some unnecessary bits if you ask me (like concurrency). I've found it works out well when combined with a few other sources like Effective Python and some online materials on design patterns. If you follow it page by page I find it a bit too much focussed on Python details and not as much on the general OOP principles.

I think that in most cases you'll have to make up your own curriculum and fill it with bits and pieces from books you like :) There is rarely a perfect fit.

> **Comments:**
> **username_2**: Welcome to [cseducators.se].  We're always glad to get more educators. I hope we hear more from you in the future!  

---

### Answer by username_2 on 2017-12-08. Score: 2

The best book I know that follows fairly closely to this format is [Polymorphism: As It Is Played](https://rads.stackoverflow.com/amzn/click/B01FGPK6YS), which observes two students slowly build out a calculator. True to form, the book takes the reader deeply into the mindset and core philosophy of OO. It's a quick read with very short pages; it took me a few hours.

The book also explores some important areas of the software development process. Paired programming, which runs through the entire book, works well in the classroom (there are many questions about it here on this site), and aspects of Agile development are also explored.


---

### Answer by username_3 on 2017-12-08. Score: 1

There is “A touch of class” by Bertrand Myers. It is a very good book, at least a semester worth of learning in it.

I did not get OO, until I read it. I had previously done C++, java, C#, and some python. But when I read this book, I started to program OO properly.

The book uses a language called Eiffel. It is a good teaching language, and also used in large systems, safety and mission critical systems. It is probably quicker to learn Eiffel then another language (or two), than try to learn other OO languages from scratch. (This is the authors clame, and my experience as a learner)


---

### Answer by username_0 on 2017-12-14. Score: 0

I found a book online ([Object Oriented Programming using C# by Simon Kendal](https://jignesh272.files.wordpress.com/2011/09/object-oriented-programming-using-c-sharp.pdf)), and it has an example of designing a simple administration system using OOP principles (*Chapter 6: Object Oriented Software Analysis and Design*).

It is not deep enough but could be used as a starting point.

I leave the question open for the time being as it can have more suggestions. Please feel free to add more and more resources.


---

### Answer by username_1 on 2017-12-14. Score: 0

[Introduction to Programming with Greenfoot](https://rads.stackoverflow.com/amzn/click/0134054296) by Michael Kölling might be what you want. Michael has a great grasp of OO and has built a great tool (Greenfoot) for beginners to explore it. The book has a number of simulations that are used to develop Java programming with OO principles integrated.

The first four chapters (especially) of [Karel J Robot](https://rads.stackoverflow.com/amzn/click/0970579519) by Bergin, Stehlik, Roberts, and Pattis also present OO principles in a simulation context, but also using a few simple design patterns. The Karel book has analogues for Python and Ruby also. Karel can be used within Greenfoot if desired or in other IDEs.

There is a teacher resource for Greenfoot (<https://greenroom.greenfoot.org>) that has many projects for use within the greenfoot system. These are also simulations and show interesting objects moving and interacting on the screen (the World). New worlds can be created (inheritance) and new Actors as well.

It is easy to integrate design patterns into the curriculum with these tools since the supplied software infrastructure means that the student isn't starting with an empty screen but with a well defined framework in which to develop the ideas. So, the student starts at a higher level of abstraction than the language primitives. Classes, methods, interactions, composition, delegation, etc. are natural topics that can be explored early in the student's learning.


---

