Ci sono aziende e persone. Le persone potrebbero essere apprezzate e le aziende potrebbero essere commentate:
class Like
class Comment
class Person implements iLikeTarget
class Business implements iCommentTarget
Mi piace e commenti sono eseguiti da un utente (persona) in modo che siano creati:
class Like implements iAuthored
class Comment implements iAuthored
Anche le persone simili potrebbero essere utilizzate nella loro cronologia:
class history
class Like implements iAuthored, iHistoryTarget
Ora, uno sviluppatore intelligente viene e afferma che ogni cronologia è associata a un utente, quindi è necessario creare la cronologia:
interface iHistoryTarget extends iAuthored
 quindi potrebbe essere rimosso da   class Like   : 
class Person implements iLikeTarget
class Business implements iCommentTarget
class Like implements iHistoryTarget
class Comment implements iAuthored
class history
interface iHistoryTarget extends iAuthored
 Qui, un altro ragazzo intelligente ha una domanda: come posso catturare il   Authored    fatto in   Like    e   Comment    classi? Potrebbe non sapere nulla sul concetto   history    nel progetto. 
Facendo scalling questo tipo di funzionalità, le interfacce possono andare ai loro tipi incapsulati che causano più forza di tipo, d'altra parte sofferenza explicitness e anche gli utenti finali del codice si troveranno ad affrontare molto dolore da elaborare. Quindi, ecco la domanda: Devo incapsulare quei tipi dipendenti ai loro tipi principali (gerarchie di interfaccia) o no, oppure ripetere esplicitamente ogni tipo per ogni singolo livello del mio sistema tipo o ...?