<p>What is a good challenge to improve your skills in object oriented programming?</p>

<p>The idea behind this poll is to provide an idea of which exercises are useful for learning OOP.</p>

<p>The challenge should be as language agnostic as possible, requiring either little or no use of specific libraries, or only the most common of libraries. Try to include only one challenge per answer, so that a vote will correspond to the merits of that challenge alone. Would also be nice if a level of skill required was indicated, and also the rationale behind why it is a useful exercise.</p>

<p>Solutions to the challenges could then be posted as answers to a "How to..." question and linked to from here.</p>

<p>For example:</p>

<ul>
<li>Challenge - implement a last-in-first-out stack</li>
<li>Skill level - beginner</li>
<li>Rationale - gives experience of how to reference objects</li>
</ul>

Certainly a good challenge, although less accessible than a "start from scratch" assignment, is to refactor some existing code that either doesn't use inheritance or doesn't use very much of it to make greater use of inheritance.  The process of refactoring will expose a lot of the benefits and gotchas of oop, as it certainly has for me on my most recent project.  It also pushed me to understand the concepts better than past projects have where I've created my own object oriented designs.