I metodi in una lingua OOP possono essere considerati come una sorta di chiusura?

3

Considera un metodo m di una classe A in un linguaggio orientato agli oggetti come Java o C ++.

Nel corpo del metodo m è possibile fare riferimento alle variabili membro dell'oggetto su cui il metodo è invocato. Queste variabili non sono definite nel metodo stesso ma sono vincolate nel momento in cui viene invocato il metodo.

È lo stesso meccanismo utilizzato per le chiusure (legare nomi non locali usando il contesto) o, in caso contrario, quali sono le differenze?

In altre parole, sarebbe possibile visualizzare un oggetto con i suoi metodi come una raccolta di chiusure (i metodi) che vengono chiuse su alcuni dati comuni (le variabili membro dell'oggetto)?

    
posta Giorgio 01.05.2012 - 22:13
fonte

1 risposta

6

Sì, un metodo è una chiusura, da una prospettiva diversa. Una chiusura è una funzione con lo stato ad essa associato e un metodo è una funzione con un oggetto (stato) ad esso associato. La differenza è il paradigma. Nella programmazione orientata agli oggetti, viene posta molta enfasi sull'oggetto stesso, di cui fanno parte i metodi. Mentre nella programmazione funzionale (da cui deriva il termine "chiusura"), l'accento è posto sulle funzioni, che hanno lo stato che chiudono.

È abbastanza possibile emulare oggetti in un linguaggio funzionale, creando un elenco contenente diverse chiusure che chiudono tutti attorno agli stessi dati di stato. (Questo è il modo in cui CLOS crea oggetti, IIRC.) E gli oggetti orientati che implementano chiusure tendono a farli lavorare sotto la cappa facendo in modo che il compilatore crei oggetti speciali che implementano l'interfaccia appropriata per la chiusura.

Quindi sì, i due concetti sono abbastanza equivalenti; l'unica vera differenza è il paradigma.

    
risposta data 01.05.2012 - 22:41
fonte

Leggi altre domande sui tag