2013-08-01 9 views
15

ho letto questa citazione in un libro:Che cosa significa "livello di riferimento" nell'aforisma di David Wheeler?

Non c'è nessun problema in informatica, che non può essere risolto utilizzando un altro livello di indirezione.

Qualcuno può spiegarlo? Che cosa significa "livello di riferimento indiretto"?

Da quello che ho capito, l'indirezione è un nome di fantasia per l'utilizzo di un puntatore di un valore invece del valore stesso. Per favore, chiariscimi per me.

+6

Hai dimenticato il resto della frase "... eccetto troppi livelli di risoluzione indiretta" –

+0

Penso che abbia a che fare con l'astrazione di livelli di dati in oggetti e la gestione del problema a vari livelli di astrazione (in oggetti diversi, forse, nel paradigma OOP.) – Houdini

+0

possibile duplicato di [Livello di Indirection risolve ogni problema] (http://stackoverflow.com/questions/288623/level-of-indirection-solves-every-problem). Vedi anche [Qual è la differenza tra livello di astrazione e livello di riferimento indiretto?] (Http://programmers.stackexchange.com/q/111756), e [il resto del web] (http: // www.google.com/search?q=there+is+no+problem+that+cannot+be+solved+with+another+level+of+indirection). –

risposta

20

"Indirection" utilizza qualcosa che utilizza qualcos'altro, nel suo senso più ampio.

Quindi il tuo esempio, utilizzando un puntatore di un valore anziché il valore, si adatta a questa definizione a un livello. Il puntatore è il qualcosa e il valore è qualcos'altro.

In genere questo è qualcosa di più grande portata:

  • Utilizzo di un sito web per visualizzare graficamente i dati generati da un servizio basato su XML. Qui il sito web è il qualcosa che si nasconde dietro di esso è il dato che è qualcos'altro.
  • Utilizzo di un sistema operativo per accedere allo schermo del display. Qui ci sono due livelli, almeno di indiretta. Il sistema operativo utilizza il driver dello schermo. Qualcosa usando un altro. Quindi il driver dello schermo parla direttamente con l'hardware dello schermo causando piccoli punti di luce qua e là. Il driver è il prossimo qualcosa che usa qualcos'altro che è l'hardware.
  • Non è raro che una API gestisca qualcosa di alto livello e che l'API si occupi della stessa cosa a un livello inferiore. Di nuovo un livello di riferimento indiretto viene aggiunto in cima all'API di basso livello e noi la chiamiamo la nuova API migliorata.

Quest'ultimo esempio, forse, spiega il "perché" di tutto.

Mentre lavoriamo con qualcosa lo padroneggiamo e impariamo come estenderlo a un livello più alto di astrazione, quindi è necessario un nuovo livello di riferimento indiretto e possiamo risolvere più velocemente i problemi più grandi scaricando parte del lavoro nella nuova API .

+0

Ehi, questo è quello che ho detto! lol, jk, bella risposta :) – Houdini

+0

bella risposta! grazie –

+0

Ovviamente, l'unico problema che non può essere risolto aggiungendo un altro livello di riferimento indiretto è quando si hanno troppi livelli di riferimento indiretto. –

3

Uno dei potenziali grandi vantaggi della ricerca indiretta è l'accoppiamento ridotto. È un altro modo di dire che le cose dovrebbero essere suddivise in compartimenti in modo appropriato. Questo spesso aiuta in modo significativo con test, manutenibilità e flessibilità a lungo termine.

Ad esempio, se l'applicazione ha bisogno di leggere alcuni dati persistenti, invece di avere la conoscenza specifica di dove (e come) leggerla sparsi in tutta l'applicazione, la si isola (mettere quella lettura dei dati in un metodo) e quindi lasciare che tutte le altre parti dell'applicazione chiamino tale metodo per ottenere i dati anziché ogni parte dell'app che deve gestire tali dettagli.