Domanda

In che modo nascondere le informazioni aiuta a disaccoppiare i moduli che compongono un sistema?

È stato utile?

Soluzione

L'incapsulamento (occultamento delle informazioni) ti consente di esporre solo il minimo assoluto al mondo esterno. Ciò significa che puoi modificare i bit non esposti al contenuto del tuo cuore senza influire sui client.

Un caso emblematico. Supponi di aver implementato una struttura di dati che contiene stringhe in un array. Se si espone l'array, gli utenti della struttura dei dati possono semplicemente utilizzare str [7] per ottenere la stringa in posizione 7.

Ora, cosa succede se si decide di implementare nuovamente la struttura dei dati come un albero bilanciato per accelerare le ricerche di stringhe. Puoi farlo spostando le stringhe in un albero e modificando l'array in modo che non sia stringhe, ma puntatori a posizioni all'interno dell'albero.

Ciò romperà i tuoi clienti, perché si aspetteranno stringhe, non puntatori. Ogni singolo client dovrebbe cambiare per ottenere i puntatori dall'array e cercare quelli nella struttura.

Tuttavia, se tu avessi nascosto completamente l'implementazione e avessi appena fornito una funzione:

String getStringAt (int n);

dovresti semplicemente cambiare la struttura dei dati e la funzione per rimanere compatibile.

I client non si rompono perché l'interfaccia di programmazione dell'applicazione (API) non è cambiata.

Una delle regole più importanti che seguo con le lezioni è mirare a massima coerenza, minimo accoppiamento . In altre parole, una singola classe dovrebbe avere tutto ciò di cui ha bisogno (niente di più) e dovrebbe avere il minor numero possibile di informazioni condivise con il mondo esterno.

Ciò significa che tutto che i client possono fare è chiamare l'API. Non esporre metodi non API o consentire l'accesso illimitato alle variabili pubbliche: tutto dovrebbe essere fatto con setter e getter.

Altri suggerimenti

Data Hiding, non disaccoppia così tanto i moduli, che aiuta a limitare l'accoppiamento tra di loro.
Questo perché nessuno degli elementi nascosti può essere utilizzato da nessun altro modulo diverso da quello in cui sono definiti, limitando quindi i possibili vincoli / dipendenze / chiamalo-ciò-che-puoi-quale-coppia " i moduli insieme.

In altre parole, limita gli scambi tra i moduli a quelli che sono specificatamente definiti nell'API , e questo fatto aiuta molto quando viene modificata l'implementazione di un determinato modulo, perché così a lungo poiché l'API rimane invariata, l'interoperabilità del modulo funzionerà. (Non è necessario esplorare il codice per scoprire se in qualche modo il modulo A, ha utilizzato la variabile x dal modulo B (se B nasconde x, è l'unico a usarlo!)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top