title: What's the difference between a stereotype and a class inheritance in UML?
body: <p>I'm confused about the difference between something being a "stereotype" and being a "superclass" in UML.</p>
  
  <p>Let's say I want to create a diagram involving a "<code>WidgetMaker</code>."  <code>WidgetMaker</code> is clearly an <code>Actor</code> so the UML standard is to stereotype it actor:</p>
  
  <pre><code>&lt;&lt;Actor&gt;&gt; WidgetMaker
  </code></pre>
  
  <p>But I grew up programming in the Java/Ruby/C++ world.  In that world, the relationship is:</p>
  
  <pre><code>class Actor
  end
  
  class WidgetMaker &lt; Actor
  end
  </code></pre>
  
  <p>That looks like this in UML:</p>
  
  <pre><code>  Actor
      ^
      |
  WidgetMaker
  </code></pre>
  
  <p>So my question is: why does UML have stereotypes at all when you can just as easily model those concepts using class inheritance, which it <em>also</em> has.</p>
  
  <p>Once we have more "kinds" of actors, the question becomes even murkier:</p>
  
  <pre><code>              Actor
                  ^
                  |
      ------------------------
      |           |          |
    Person      Robot      Group
      ^
      |
  WidgetMaker
  </code></pre>
  
  <p>versus</p>
  
  <pre><code>&lt;&lt;Actor&gt;&gt; &lt;&lt;Person&gt;&gt; WidgetMaker
  </code></pre>