Come e quando è successo, un tipo è un'interfaccia?

4

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.

    
posta 太極者無極而生 03.01.2016 - 11:16
fonte

2 risposte

11

L'idea di avere un tipo definito dalla sua interfaccia (in un significato generale, inclusa la sintassi e la semantica) è ben nota sotto il nome Tipo di dati astratti . Il riferimento più antico a questo termine che ho trovato è qui, ("Programmazione con tipi di dati astratti", B. Liskov e S. Zilles) , fa riferimento al 1974. Secondo questo documento , che contiene una panoramica storica completa, che è stato esattamente il momento in cui è stata inventata l'idea dell'astrazione di tipo.

Il concetto di ADT non ha molto a che fare con "digitazione anatra" o "digitazione dinamica". È possibile implementare facilmente gli ADT in un linguaggio tipizzato staticamente come, ad esempio, C ++ utilizzando le classi.

    
risposta data 03.01.2016 - 11:24
fonte
6

La teoria dei tipi in realtà precede la Banda dei Quattro di almeno un centinaio di anni. Russell e Frege svilupparono quella che viene chiamata "teoria del tipo" verso la fine del XX secolo. Ciò che era molto importante nella teoria dei tipi era che ogni operazione tra istanza di due (o più) tipi portava a un tipo di risultato facilmente calcolabile.

Per i programmatori di computer, questo era molto prezioso, perché più sai qualcosa, più può essere ottimizzato. Se il "tipo" di una variabile descrive molto sul suo comportamento, il compilatore può emettere codice efficiente senza dover conoscere i valori di tali variabili fino al runtime.

La connessione tra interfacce e tipi era naturale per l'era del GoF. Se i modelli di progettazione potrebbero essere implementati solo con funzionalità di alto livello, non andrebbero lontano. L'attuale processo standard consisteva nel far bollire quante più informazioni preziose nei tipi possibili, così il compilatore può aiutarti. Quindi è diventato molto naturale trattare le interfacce come tipi.

    
risposta data 03.01.2016 - 18:58
fonte

Leggi altre domande sui tag