Sono venuto da un background altamente funzionale e procedurale nella programmazione, e non ho mai saputo che un tipo è uguale a un'interfaccia.
Come nel libro Design Patterns di GoF, dice:
A type is a name used to denote a particular interface. We speak of an object as having the type "Window" if it accepts all requests for the operations defined in the interface named "Window." An object may have many types, and widely different objects can share a type. (p. 13)
La cosa sorprendente è che ho pensato di digitare char (come un carattere, o 1 byte) o int (una parola, o 4 byte o 8 byte) o un puntatore al carattere (una stringa in linguaggio C) prima. Forse anche una struct con xey come coordinate di un punto, o un array, come un tipo, ma non ho mai pensato che un tipo fosse "un'interfaccia".
Quindi sembra che un oggetto Car possa essere del tipo Moveable and Soundable, e un oggetto Dog può essere del tipo Mobile e Soundable, mentre un oggetto Circle può essere del tipo Moveable only, finché non decidiamo che una Shape l'oggetto deve anche emettere il suono, quando un utente fa clic su di esso e lasciamo che la classe Shape implementa l'interfaccia Soundable e ora un oggetto Circle è anche del tipo Soundable?
Mi chiedo quando e come è successo? Si dice che sia così per il libro dei GoF per la prima volta nel 1994, quando il libro è stato pubblicato? O è un'idea realmente esistente che è venuta da molto tempo fa?
In realtà suona esattamente come Duck Typing, ma Duck Typing sembra un nuovo concetto iniziato nel 2003 nella comunità di Python e Ruby, non come un'idea del 1994 o precedente.