Risponderò alla tua domanda con una domanda; stamattina quando andavi al lavoro (presumo che in effetti lo facessi), ti è importato esattamente come il motore ha aperto le valvole per far entrare le miscele di carburante-aria e poi le ha accese? No. Non ti interessa come il motore della tua auto funziona quando stai guidando lungo la strada. Ti interessa che faccia funzioni.
Supponiamo che un giorno la tua macchina non funzioni. Non inizia, lancia una canna, rompe una cintura, inspiegabilmente solca quella barriera di cemento senza colpa tua mentre eri impegnato a mandare sms. Ora, hai bisogno di una nuova macchina (almeno temporaneamente). Ti importa esattamente come funziona questa nuova macchina? 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, dovrebbe sembrarti che non ci siano stati cambiamenti nell'auto che stai guidando. Realisticamente, il modo in cui funziona questa nuova macchina dovrebbe darti il minor numero possibile di "sorprese".
Questi principi fondamentali sono il principio cardine dietro l'incapsulamento e l'astrazione. La conoscenza di come un oggetto fa quello che fa non dovrebbe essere un requisito per usarlo per fare ciò che fa. Anche nella programmazione dei computer, i dettagli dei percorsi elettrici all'interno della CPU che esegue il programma sono estratti da almeno una mezza dozzina di livelli di istruzioni di I / O, driver, software del sistema operativo e runtime. Molti ingegneri del software di grande successo scrivono un codice perfettamente buono senza preoccuparsi dell'architettura hardware esatta o della build del sistema operativo che lo eseguirà. Compreso me.
L'incapsulamento / nascondimento delle informazioni consente alla mentalità "non importa come funziona, basta preoccuparsi che faccia". Il tuo oggetto dovrebbe esporre ciò che è utile al consumatore, in un modo che il consumatore può facilmente consumare. Ora, nel mondo reale, questo non significa che una macchina non dovrebbe fornire all'utente alcuna informazione sul funzionamento interno, o che l'auto dovrebbe consentire all'utente solo le funzionalità più elementari come l'accensione, il volante, e pedali. Tutte le auto hanno tachimetri e indicatori di livello carburante, tachimetri, luci idiota e altri feedback. Praticamente tutte le vetture dispongono anche di interruttori per vari sottosistemi indipendenti, come fari, indicatori di direzione, radio, regolazione del sedile, ecc. Alcune macchine consentono alcuni input utente piuttosto esoterici, 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 un modo leggermente diverso. Ma, nella maggior parte dei casi, forse, solo forse, l'utente non dovrebbe essere in grado di controllare direttamente e in modo indipendente le pompe del carburante dall'interno della cabina? Forse, solo forse, l'utente non dovrebbe essere in grado di attivare le luci dei freni senza effettivamente premere il pedale del freno?
L'astrazione permette che "questo non è lo stesso, ma perché sono entrambi X posso usarli come vorrei ogni mentalità X". Se il tuo oggetto eredita o implementa un'astrazione, i tuoi consumatori dovrebbero aspettarsi che la tua implementazione produca lo stesso risultato o lo stesso 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, la macchina va a sinistra. Giralo in senso orario, la macchina va bene. 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 "la macchina va" e quello al centro è il pedale "ferma auto" .
Un corollario di astrazione è la "teoria del minimo stupore". Se ti mettessi al volante di una nuova auto per un giro di prova, ruotasse il volante in senso orario e la macchina girasse a sinistra, saresti piuttosto stupito a dir poco. Dovresti accusare il rivenditore di spacciare 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 ancora come "auto", quando guidi questa vettura devi cambiare alcuni concetti fondamentali su come si suppone che una macchina debba essere guidata per guidare con successo la nuova vettura. Tipicamente è una cosa brutta, 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 allacciare le cinture, il vantaggio intuitivo è che non si passa attraverso il parabrezza o sul sedile del passeggero in caso di incidente. Anche allora, i piloti hanno resistito; molti proprietari di auto hanno tagliato le cinture di sicurezza fuori dall'auto fino a quando non sono state approvate delle leggi che ne autorizzano l'uso.