Nella programmazione orientata agli oggetti, quando estendi una classe stabilisci una relazione is-a tra un nuovo sottotipo e i suoi genitori, ovvero B è un A (alias ereditarietà del codice ). Quando componi una classe con l'aiuto di tipi esistenti, stabilisci una relazione ha-a tra il nuovo tipo composto e i tipi che comprende, cioè B ha una A (alias composizione dell'oggetto ).
In molte lingue (ad es. Java), hai ancora un altro modo di definire i tipi, ovvero tramite ereditarietà dell'interfaccia . Come si esprime questa nozione nel linguaggio naturale quotidiano?
Ad esempio, quando una classe B implementa l'interfaccia A in Java, dici anche che B è un A ? O esprimi questo concetto in modo diverso? Per esempio. B implementa Serizalizable, quindi B è serializzabile (o in altre parole: B ha l'attributo di essere serializzabile ).
Nel fare questa domanda, non sono tanto interessato alle differenze teoriche tra questi concetti OO (per cui argomento ci sono già abbastanza domande) ma piuttosto le differenze tra loro quando li esprimono in linguaggio naturale (per quale argomento c'è non sembra essere ancora disponibile alcuna domanda).