konkrete
Klasse
  | 
       
definiert internen Zustand 
legt fest, wie etwas berechnet wird
  | 
  |  | 
     
     
       
Typ
  | 
       
legt Schnittstelle fest 
Aufrufkonvention 
legt fest, wie etwas verwendet wird
  | 
  |  | 
     
     
        | 
       jede Klasse definiert aber auch einen Typ
  | 
  |  | 
     
     
       
Klassenvererbung
  | 
       
Implementierung wird vererbt
und erweitert oder modifiziert
  | 
  |  | 
     
     
       
Schnittstellenvererbung
  | 
       
nur Erweiterung von Typen
  | 
  |  | 
     
     
       
Mehrfachvererbung
  | 
       
für Schnittstellen sehr nützlich (notwendig) 
für Klassen zweifelhaft
  | 
  |  | 
     
     
       
C++ und Eiffel
  | 
       
keine syntaktischen Unterschiede zwischen Klassen und Schnittstellen
  | 
  |  | 
     
     
       
Java
  | 
       
class X { ... } 
interface I { ... }
  | 
  |  | 
     
     
       
Klassenvererbung
  | 
       
ermöglicht Wiederverwendung und Modifikation von Algorithmen und Datenstrukturen ohne
Kopieren von Quelltexten
  | 
  |  | 
     
     
       
Schnittstellenvererbung
  | 
       
Das Beerben von abstrakten Klassen und Interfaces
ermöglicht die Implementierung von Familien von Objekten
mit identischen Schnittstellen
  | 
  |  | 
     
     
       
identische Schnittstellen
  | 
       
         | 
     
     
        | 
        gleichförmige Verarbeitung
         | 
     
     
        | 
        keine Fallunterscheidungen
  | 
  |  | 
     
     
       
richtige Vererbung
  | 
       
alle Unterklassen besitzen gleiche gemeinsame Schnittstelle
  | 
  |  | 
     
     
        | 
       
Klienten wissen nichts über die interne Struktur der Objekte 
kennen nur die Schnittstelle oder abstrakte Klasse
         | 
     
     
        | 
       
Implementierungsabhängigkeiten zwischen Subsystemen werden reduziert
  | 
  |  | 
     
     
        | 
       Referenzvariablen immer nur vom Typ einer abstrakten Klasse
         | 
     
     
        | 
       Konstruktoraufrufe von konkreten Klassen immer indirekt
 über erzeugende Funktionen
         | 
     
     
        | 
       Erzeugungsmuster
  | 
  |  | 
     
     
       Beispiele  | 
        | 
  |  |