Recentemente ho iniziato a notare una ripetizione in alcuni dei miei codici. Certo, una volta che si nota una ripetizione, diventa una grata. È per questo che sto facendo questa domanda.Esiste un termine per questo concetto e esiste in un linguaggio tipizzato staticamente?
L'idea è questa: a volte si scrivono versioni diverse della stessa classe: una versione grezza, una versione bloccata, una versione di facciata di sola lettura, ecc. Queste sono cose comuni da fare a una classe, ma le traduzioni sono altamente meccanico. Circondare tutti i metodi con il lock acquisisce/rilascia, ecc. In un linguaggio dinamico, è possibile scrivere una funzione che ha fatto ciò a un'istanza di una classe (ad esempio, iterare su tutte le funzioni, sostituendole con una versione che acquisisce/rilascia un serratura.).
Penso che un termine valido per ciò che intendo sia "classe riflessa". Crei una trasformazione che accetta una classe e restituisce una classe modificata in una maniera desiderata. La sincronizzazione è il caso più semplice, ma ce ne sono altri: rendere una classe immutabile [metodi di avvolgimento in modo da clonare, mutare il clone e includerlo nel risultato], creare una classe in modo readonly [presumendo che sia possibile identificare i metodi mutanti], creare una classe sembra funzionare con il tipo A invece che con il tipo B, ecc.
La parte importante è che, in teoria, queste trasformazioni hanno senso in fase di compilazione. Anche se un ActorModel T > ha metodi che cambiano a seconda di T, essi dipendono da T in un modo specifico conoscibile in fase di compilazione (ActorModel <T> metodi restituirebbe un futuro del tipo di risultato originale).
Mi chiedo se questo è stato implementato in una lingua e come si chiama.
Sembra certamente simile e copre alcuni dei casi. Ma, usando gli aspetti, posso prendere una lezione e i metodi restituiscono i futures anziché i valori normali? –
In genere, non è possibile modificare il tipo di ritorno con AOP, un po 'il punto è che il codice che lo utilizza non è a conoscenza degli aspetti. –