Es stellt sich die Frage, ob auch ein Subtyp eines Servers, der die
Erwartungen eines Clients erfüllt, dieses garantiert. Es zeigt sich,
dass dies im allgemeinen nur für sequentielle Clients (diese haben
die Eigenschaft:
)
gilt. Ein Beispiel für einen nichtsequentiellen Client ist das folgende
System aus einem Produzenten und einem Konsumenten.
Diese beiden Objekte sollen über ein Objekt vom Typ miteinander
kommunizieren. Sie lassen sich gegenüber
zu einem Client
zusammenfassen.
Es lässt sich nun leicht nachprüfen, dass
gilt. Fügt man dem Client
ein weiteres Objekt
hinzu, das das Ziel hat, den Zwischenspeicher zu löschen, gilt auch
noch
. Kommt jedoch der Subtyp
von
als Server zum Einsatz, wird der Client
durch das erweiterte Verhalten des Servers überrascht.
Falls eine
-Anfrage von
annimmt, werden anschließend alle weiteren Anfragen blockiert und
die Erwartungen des Clients werden nicht erfüllt. Dies lässt sich
verhindern indem man das Verhalten des Subtyps auf das des Supertyps
beschränkt. Die möglichen Anfragen an den Subtyp werden hierbei auf
die Anfragen beschränkt, die auch der Supertyp akzeptiert. Im obigen
Beispiel bedeutet dies, dass eine
-Anfrage von
durch
nicht mehr angenommen wird, da
eine
solche Anfrage nicht akzeptiert.