Risponderò alla tua domanda con una domanda; quando hai guidato al lavoro stamattina (suppongo che in effetti lo hai fatto), ti è importato esattamente come il motore ha aperto le valvole per far entrare le miscele aria-carburante e poi le ha accese? No. Non ti interessa come funziona il motore della tua auto quando guidi lungo la strada. Si cura che fa il lavoro.
Supponiamo che un giorno la tua auto non funzioni. Non si avvia, lancia una canna, si rompe una cintura, inspiegabilmente si arrabbia in quella barriera di cemento per colpa tua mentre eri impegnato a mandare messaggi. Ora hai bisogno di una macchina nuova (almeno temporaneamente). Ti interessa esattamente come funziona questa nuova auto? No. Quello che ti interessa è innanzitutto che funzioni, e in secondo luogo che puoi usare le stesse conoscenze e abilità che hai usato per guidare la tua vecchia auto per guidare quella nuova. Idealmente, ti dovrebbe sembrare che non ci siano stati cambiamenti nell'auto che stai guidando. Realisticamente, il modo in cui funziona questa nuova auto dovrebbe darti il minor numero di "sorprese" possibili.
Questi principi di base sono il principio fondamentale dietro l'incapsulamento e l'astrazione. La conoscenza di come un oggetto fa ciò che fa non dovrebbe essere un requisito per usarlo per fare ciò che fa. Anche nella programmazione per computer, i dettagli dei percorsi elettrici all'interno della CPU che eseguono il programma sono astratti dietro almeno una mezza dozzina di strati di istruzioni I / O, driver, software OS e runtime. Molti ingegneri del software di grande successo scrivono codice perfettamente perfetto senza preoccuparsi dell'esatta architettura hardware, o persino della build del sistema operativo, che lo eseguiranno. Incluso me.
L'incapsulamento / occultamento delle informazioni consente alla mentalità "non importa come fa, cura solo che faccia". Il tuo oggetto dovrebbe esporre ciò che è utile per il consumatore, in modo tale che il consumatore possa facilmente consumarlo. Ora, nel mondo reale, questo non significa che un'auto non dovrebbe fornire all'utente alcuna informazione sui meccanismi interni, o che l'auto dovrebbe consentire all'utente solo le funzionalità più basilari come l'accensione, il volante, e pedali. Tutte le auto dispongono di tachimetri e indicatori di livello del carburante, contagiri, luci idiota e altri feedback. Praticamente tutte le auto hanno anche interruttori per vari sottosistemi indipendenti, come i fari, gli indicatori di direzione, la radio, la regolazione del sedile, ecc. Alcune auto consentono un input utente piuttosto esoterico, come la sensibilità del differenziale centrale a slittamento limitato. In tutti i casi, se ne conosci abbastanza, puoi aprirlo e cambiare le cose per farlo funzionare in modo leggermente diverso. Ma, nella maggior parte dei casi, forse, forse, l'utente non dovrebbe essere in grado di controllare direttamente e indipendentemente le pompe del carburante dall'interno della cabina? Forse, forse, l'utente non dovrebbe essere in grado di attivare le luci dei freni senza premere il pedale del freno?
L'astrazione permette alla "questa non è la stessa cosa, ma poiché sono entrambe XI posso usarle come farei con qualsiasi X" mentalità. Se il tuo oggetto eredita o implementa un'astrazione, i tuoi consumatori dovrebbero aspettarsi che l'implementazione produca lo stesso o simile risultato di altre implementazioni conosciute dell'astrazione. Una Toyota Camry e una Ford Fusion sono entrambe "macchine". Come tali, hanno una serie comune di funzionalità previste, come un volante. Giralo in senso antiorario, l'auto va a sinistra. Giralo in senso orario, l'auto va a destra. Puoi salire su qualsiasi auto negli Stati Uniti e aspettarti che l'auto abbia un volante e almeno due pedali, quello a destra è il pedale "auto va" e quello al centro è il pedale "auto ferma" .
Un corollario di astrazione è la "teoria del minimo stupore". Se ti mettessi al volante di una nuova auto per un giro di prova, ruotassi il volante in senso orario e l'auto girasse a sinistra, saresti piuttosto stupito a dir poco. Accuseresti il rivenditore di vendere un POS e difficilmente ascolterai una delle sue ragioni per cui il nuovo comportamento è "migliore" di quello a cui sei abituato, o quanto bene questo "comportamento" è "documentato" o come " trasparente "il sistema di controllo è. Nonostante questa nuova auto e tutte le altre che hai guidato siano ancora "auto", quando guidi questa auto devi cambiare alcuni concetti fondamentali di come si suppone che un'auto debba essere guidata per guidare con successo la nuova auto. In genere è una brutta cosa, e succede solo quando c'è un vantaggio intuitivo nel nuovo paradigma. Forse l'aggiunta delle cinture di sicurezza è un buon esempio; 50 anni fa sei appena entrato e sei andato, ma ora devi allacciarti, il vantaggio intuitivo è che non passi attraverso il parabrezza o sul sedile del passeggero in caso di incidente. Anche allora, i driver hanno resistito; molti proprietari di auto tagliano le cinture di sicurezza dall'auto fino a quando non vengono approvate le leggi che impongono il loro uso.