Programmare coesione e disaccoppiamento – 1

 

Sei un esperto nella progettazione software?

Sei bravo a programmare con il buon vecchio OOP? E con i componenti come stai messo? Sei sicuro di saper progettare componenti software e di saper individuare perfettamente (o quasi) classi, proprieta’, ecc.? Le classi che hai definito sono tutte in forte coesione?

Come dici? Sei stufo di leggere sempre di questi argomenti perche’ sono cose vecchie che tutti sanno e tutti applicano? Nei sei proprio certo? Benissimo, allora non proseguire nella lettura, non perdere tempo….

Bene, sei ancora qui, allora sento che qualche dubbio ti sta venendo in mente, perfetto, e’ proprio cio’ che voglio da te. Mi interessa che tu ti ponga domande e che legga questo post a puntate che ho scritto apposta per te.

In questo post ti insegnero’ come programmare classi fortemente coese e disaccoppiate tra loro.

Ora mettiti comodo e inizia a leggere, confronta le tue idee con le mie e se vuoi commenta. Buona lettura!

 

L’arte della Coesione

Il titolo non è una provocazione piuttosto la dura realtà dei fatti, scrivere (e programmare) software coeso e disaccoppiato è un’arte e una professione, insomma è una cosa seria.

Il termine coesione deriva dal latino cohaerere e significa essere congiunto, attaccato, stare unito; se lo riferisco al software posso dire che in una classe dovrò inserire tutto ciò che, visto nell’insieme, la renderà unita, coesa e adatta ad offrire un servizio.

La cosa più complessa da fare è proprio saper scrivere classi e, per essere più preciso, sapere cosa mettere in una classe; in realtà la coesione cambia secondo il punto di vista, se dico che un software è coeso significa che le classi da cui è composto sono coese le une con le altre e se dico che una classe è coesa, significa che i suoi metodi e le sue proprietà sono unite tra loro.

Provo a semplificare la questione: se tra le classi Aeroporto, Aereo e Pilota identifico delle responsabilità (metodi) e caratteristiche (proprietà) comuni molto probabilmente significa che devo creare una nuova classe AereoSchedule che le contenga.

 

Metti il codice dove ti aspetti di trovarlo

In questo modo ho messo in pratica il principio “Metti il codice dove ti aspetti di trovarlo” che trovo eccezionalmente efficace al pari della sua semplice filosofia, quanti di noi hanno aperto il codice scritto da qualcun altro e non ci hanno capito un tubo pur sapendone di codice e quanti, al contrario, ne hanno aperto un altro benedicendo e lodando l’autore perchè hanno trovato “al volo” le parti di codice nei punti in cui si aspettavano di trovarlo? Non c’è nulla di peggiore che trovarsi tra le mani un software funzionante ma con un codice organizzato in maniera illeggibile (poveramente coeso) da manutenere.

Se vi riconoscete in questi due casi significa che il vostro codice è poco coeso e fortemente accoppiato (di quest’ultimo ne parlerò nella seconda puntata):

  • avete una singola classe che dovete modificare in diversi modi per diverse ragioni; è il classico esempio di bassa coesione dove occorre effettuare refactoring, identificare meglio le responsabilità, estrarle ed inserirle in una nuova classe;
  • avete un metodo della classe A che contiene troppa conoscenza dei field della classe B; è il classico esempio di forte accoppiamento delle due classi, occorre spostare le funzionalità della classe A che “conoscono” la classe B.

Lasciare il codice inalterato nelle suddette condizioni vi condurrà, con alta probabilità, ad incrementare la difficoltà: alla comprensione delle classi e dei componenti, alla manutenzione del sistema e, soprattutto, al riuso delle classi in altri contesti e applicazioni.

Concludo questa puntata consigliandovi di utilizzare, se vi è possibile, due pattern di tipo GRASP, il Controller e il Creator, poichè aiutano a garantire un’alta coesione tra classi.

Ora sei pronto per leggere il secondo post.

 

Acquista su Amazon.it

 

🔥273
Vota questo articolo

1 Comment

  • CARLO DE GIORGI

    28 Agosto 2018 - 10:22

    Veramente interessante!
    sono per la filosofia:
    “Metti il codice dove ti aspetti di trovarlo”

    Ottima lettura. grazie interessante

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *