Il contratto di un metodo – Lezione 11 di Java Avanzato

Programmare tramite il contratto di un metodo

Due entità quando stabiliscono un contratto accettano degli obblighi per poi trarne dei benefici. Se il termine contratto viene applicato in Java viene stabilito l’accordo formale tra una classe che fornisce un servizio (mediante un metodo) e l’utente che usufruisce di quel servizio.

Gli obblighi e i benefici dei metodi dipendono dal punto di vista, ad esempio le precondizioni sono un obbligo per il chiamante ma un beneficio per il metodo; al contrario la postcondizione è un beneficio per il chiamante ma un obbligo per il metodo.

In particolare, un contratto applicato ad un metodo si prefigge:

  1. Precondizioni, si tratta di condizioni assunte vere al momento dell’invocazione;
  2. Postcondizioni, insieme di condizioni che il metodo garantisce vere al termine della sua invocazione;
  3. Penali, reazioni alla violazione delle precondizioni (mediante eccezioni).

Nello specifico, in Java un contratto fornisce:

  • Condizioni sui parametri formali, ovvero sulla condizione dello stato attuale dell’oggetto prima dell’invocazione;
  • Condizioni sul valore di ritorno, si occupa delle condizioni sullo stato dell’oggetto ritornato;
  • Lancio di eccezioni.

Le precondizioni devono essere verificabili dal chiamante, di conseguenza “verificare se la carta della stampante è finita” non può essere considerata una precondizione. Il soddisfacimento della postcondizione è garantito dal fornitore del servizio al termine dell’esecuzione del metodo. Per cui, se una postcondizione non viene soddisfatta non bisogna lanciare un’eccezione dato si tratta di un errore di come è stato scritto il codice e che bisogna risolvere.

Programmare il contratto di un metodo con Javadoc

Javadoc. Java mette a disposizione un piccolo tool, chiamato Javadoc, che estrae i commenti dal codice sorgente in automatico per costruire la documentazione software dell’applicazione. Questo tool ci aiuta ad esprimere i contratti facilmente, utilizzando opportuni comuni ed inseriremo i commenti tra /** e */, Javadoc li inserirà nella documentazione.

Vediamo un esempio di contratto di un metodo in Javadoc per il calcolo della radice quadrata:

  /**
    Calcola radice quadrata
    @ param d numero non negativo
    @ return radice quadrata di d
    @ throws RuntimeException se d è negativo
  */
  public double sqrt(double d){
    //...
  }

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Guide, Java, Programmazione Taggato con: , , ,

Lascia un commento

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

*