È chiaramente un riferimento circolare a livello delle interfacce. Simile ai tipi di dati ricorsivi, che hanno riferimenti circolari a livello di testo, non significa necessariamente che gli oggetti di istanza siano essi stessi impegnati in riferimenti circolari (sebbene possano certamente esserlo).
In molte circostanze (ma certamente non tutte), non c'è nulla di "sbagliato" con riferimenti circolari, anche se generalmente mostreranno qualche costruzione e amp; problemi di ordine di distruzione (cioè precludere alcuni degli oggetti istanza coinvolti dall'essere oggetti immutabili).
Può aiutare ad avere un'idea di genitore e figlio. Mentre il genitore fa riferimento ai figli e il bambino fa riferimento al genitore, di solito concordiamo che l'eliminazione di un figlio elimina solo (il bambino stesso e) l'unico riferimento genitore-figlio (e non il genitore stesso), mentre l'eliminazione del genitore può significare l'eliminazione non solo i riferimenti genitore-figlio, ma anche tutti i suoi attuali figli.
Ciò significa che il genitore & i riferimenti dei bambini sono direzionali e asimmetrici, e in un certo senso, uno è effettivamente "più strong" dell'altro nonostante la circolarità, poiché uno include una nozione di proprietà che l'altro non possiede.
Mentre alcuni database ci permettono di specificare questa "forza" come espressione di costrizione; i nostri linguaggi di programmazione, al contrario, non ci permettono per lo più di distinguere tra riferimenti da genitore a figlio e da figlio a genitore (sono entrambi solo riferimenti). Se consentissero tale differenziazione, potremmo considerare i riferimenti genitore / figlio e figlio / genitore come non circolari alla luce della loro natura asimmetrica.
Alcuni algoritmi di conteggio dei riferimenti interrompono i cicli tramite riferimenti forti implicitamente marcati o esplicitamente dichiarati.
Nel piccolo, i cicli non sono poi così male quando si usa un linguaggio spazzato. Per la gestione manuale della memoria, tuttavia, in particolare il conteggio dei riferimenti, i cicli sono un problema.
Nel grande, come quando arriviamo ai cicli nelle librerie (una libreria dipende da un'altra che dipende da essa ...), queste possono essere problematiche in particolare per quanto riguarda l'ordinamento di inizializzazione. Tali problemi tendono ad essere esacerbati per le circolarità tra componenti di sistemi operativi come driver e / o sottosistemi: non che non possa essere fatto ma aumenta la complessità, ostacolando allo stesso tempo la possibilità di subsetting: creare una versione più piccola del sistema operativo per un minore ambiente.