Supponiamo di sviluppare un interprete o un file system. Ci sono oggetti, come variabili, procedure e file in qualche ambiente. Hanno un nome e un contenuto (la variabile ha un valore corrente, la procedura ha il corpo del codice e il file ha alcuni dati nel suo corpo). Puoi richiedere vbl1.value
, proc2.execute
e file3.content
per ottenere i loro "valori" e puoi anche richiedere sempre il nome dell'oggetto corrente di (vbl|proc|file).name
. Supponiamo di abilitare gli oggetti alias su un oggetto dato, alias(name, target)
. Dice che l'alias ha il suo nome ma in qualche modo condivide il "valore" con il target. Come lo progetteresti?
L'implementazione dell'alias sarebbe strettissima se avessi oggetti separati dai loro valori. Tutti gli alias potrebbero condividere l'unico corpo e quindi l'oggetto principale potrebbe essere implementato come alias + anche il corpo.
D'altra parte, gli oggetti primari sono in corrispondenza 1 a 1 con i loro valori e non è saggio "preferire il controllo su override" per loro. Inoltre, la maggior parte degli oggetti non avrà gli alias e tale design è uno spreco di memoria (2 oggetti sono sprecati di memoria 2x in JVM). Ma se non dividiamo i nostri oggetti in nome + corpo, come implementare gli alias? Come proxy? Sembra una duplicazione di codice. La prima variabile di codice, proc, ... oggetti e quindi espandere queste classi con proxy appropriati. Anche trice, dal momento che ora gli oggetti devono essere interfacce che ammettono l'implementazione di prima classe e proxy. Inoltre, tale divisione rende valori / corpi "senza testa", non è possibile ottenere il nome, dato un corpo come proc1.name sopra. Probabilmente è giusto dal momento che il corpo sotto considerazione può essere accessibile attraverso uno qualsiasi degli alias ora.
Sto esitando. Ammetto che può esserci un approccio migliore. Quale è consigliato? Gli alias sembrano essere abbastanza in uso e quindi le linee guida generali devono esistere, sono sicuro ma non riesco a trovare nulla.