"Ciao, Amigo! Vorrei parlarti di un altro vantaggio dell'OOP. Vedi, i programmi sono più simili agli animali che agli edifici. Non sono costruiti, sono cresciuti. Sviluppo significa cambiamenti costanti. Nella costruzione, puoi avere un buon piano e seguirlo fino in fondo. Ma nello sviluppo software non è così."

Molto spesso, non puoi fare qualcosa nel modo in cui volevi e devi rielaborare molto il tuo programma. E ancora più spesso cambiano le esigenze del cliente.

"Ma cosa succede se il cliente ha fornito una specifica molto dettagliata?"

"Dai un'occhiata a cosa succede nel tempo. Se un prodotto ha successo, il cliente vorrà rilasciare una nuova versione, e poi un'altra, e un'altra ancora. E, naturalmente, dovrai apportare alcune « piccole modifiche » per prodotto esistente. Quindi lo sviluppo del software è una lunga serie di modifiche. Solo la cadenza è diversa. Una nuova versione potrebbe essere rilasciata ogni settimana, una volta al mese o ogni sei mesi."

"Allora cosa concludiamo da tutto questo?"

"La struttura interna del prodotto deve essere mantenuta in modo da consentire modifiche maggiori (e minori) con una minima rielaborazione."

"Come si fa a farlo?"

"Abbiamo già parlato di come un programma è costituito da oggetti che interagiscono tra loro. Usiamo punti spessi per rappresentare tutti gli oggetti del nostro programma sulla lavagna. Disegneremo frecce da ogni oggetto (punto) a tutti gli oggetti (punti) con cui interagisce."

Ora combiniamo gli oggetti (punti) in gruppi. I punti appartengono allo stesso gruppo se sono molto più collegati tra loro rispetto agli altri punti. Se la maggior parte delle frecce di un punto punta ai punti nel suo gruppo, allora abbiamo raggruppato correttamente gli oggetti. Si dice che i punti all'interno dello stesso gruppo sono accoppiati strettamente, mentre i punti in gruppi diversi sono accoppiati in modo lasco.

Questo è chiamato il " principio dell'accoppiamento libero ". Un programma è suddiviso in più parti, spesso strati, la cui logica è fortemente legata alla loro struttura interna e debolmente legata ad altri strati/parti. L'interazione tra gli strati è solitamente altamente compartimentata. Un livello può chiamare un altro livello utilizzando solo un piccolo sottoinsieme delle sue classi.

"Lo stesso principio di 'divisione del lavoro', ma su scala più ampia?"

"Precisamente. Questo ci permette di riorganizzare un dipartimento, renderlo più efficiente e assumere ancora più persone, e se non cambiamo i protocolli interdipartimentali, allora tutti i nostri cambiamenti saranno locali. Nessuno deve essere riqualificato. Non "Devo rielaborare l'intero sistema. Ogni dipartimento può ottimizzare i propri affari interni in questo modo se i meccanismi per l'interazione dipartimentale sono ben scelti."

"Se sono scelti bene. E se non sono scelti bene?"

'Allora esaurirai rapidamente lo « spazio di manovra » per apportare modifiche e dovrai rielaborare l'intero sistema. Succede di tanto in tanto. Non possiamo prevedere il futuro, ma possiamo ridurre al minimo il numero di volte in cui dovremo riscrivere il programma".

"Va bene. Vedo il vantaggio di dividere il programma in questo modo, ma come entra in gioco l'OOP?"

"Quando scegliamo come strutturare i dipartimenti e come interagiranno, applichiamo il ' principio di astrazione '. Nella programmazione, l'astrazione viene utilizzata per determinare il modo migliore per suddividere il programma e come le parti dovrebbero interagire. Questo principio può anche essere applicato ripetutamente alle parti costituenti fino a quando non abbiamo suddiviso il programma in singole classi."

"E nascondere la struttura interna di queste parti e limitare rigorosamente il modo in cui interagiscono con altre parti: questo è l'incapsulamento , giusto?"

"Esattamente. L'incapsulamento e l'astrazione sono i capisaldi dell'OOP. Un buon programma deve aderire a questi due principi. Più avanti daremo un'occhiata ad altri principi e arriveremo a comprenderne i vantaggi."

"Roba buona. Non vedo l'ora!"