SlideShare ist ein Scribd-Unternehmen logo
1 von 23
javaDoc
    ovvero... Documentazione semplice

         Prof. Marcello Missiroli
      marcello.missiroli@gmail.com




                     
Scopo

    Scrivere codice è complicato
    Mantenere codice altrui..di più!




                              
Scopo

    Scrivere codice è complicato
    Mantenere codice altrui..di più!



    Supportiamo gli sviluppatori
     con la documentazione
      Manutenzione
      Riutilizzo

                              
Cosa documentare?

    Obbligatorio (con Javadoc):
      Classi
      Package
      Costruttori, metodi e attibuti
    Vivamente consigliato ( con /* */ e // )
      Snippets poco chiari
      Algoritmi
      Cicli



                                  
Perché proprio Javadoc?
    Generare documentazione di una API a mano è tedioso
     e genera errori
      Molti piccoli dettagli
      Devo sincronizzare sorgente e documentazione
      Devo duplicare gli sforzi (tipi, nomi. . . )
    Mooolto meglio combinare codice e documentazione
      Genero la documentazione dal codice
      La documentazione interna al codice tende ad essere
       più corretta


                                   
Infatti Javadoc....

    Genera documentazione en HTML
    Deduce correttamente informazioni quali nome,
     tipi, classi... . .
    Ulteriori infomazioni
    Riferimenti incrociati
    Molti IDE supportano Javadoc (es. Eclipse,
     Netbeans)



                              
Sintassi semplice

    Basta premettere un testo con un particolare
     formato al codice da commentare.
    /**
    *
    * Descrizione principale (testo / HTML)
    *
    *
    * Tags (testo / HTML)
    *
    *
    */

                                 
Esempio complesso
    /**

    * Returns the index of the first occurrence of the specified element in

    * this vector, searching forwards from <code>index</code>, or returns ­1 if

    * the element is not found.

    *

    * @param o element to search for

    * @param index index to start searching from

    * @return the index of the first occurrence of the element in

    * this vector at position <code>index</code> or later in the vector;

    * <code>­1</code> if the element is not found

    * @throws IndexOutOfBoundsException if the specified index is negative

    * @see Object#equals(Object)

    */

    public int indexOf(Object o, int index) ...



                                                    
Risultato




             
Regole base

    La prima frase di ogni commento deve essere un
     riassunto con una descrizione concisa e
     completa, terminata da un punto e seguita da
     uno spazio, tabulatore o n.
    Marcare con <code> I nomi e le parole chiave
    Preferibile l'uso della 3° persona
    Iniziare con un verbo la descrizione dei metodi
    Omettere il soggetto quando è ovvio


                              
I tag Javadoc

    Case sensitive!
    Sono di due tipi: “block tag” e “inline tag”
    Block tags
      Si trovano nella descrizione principale, all'inizio della
        riga. Es:
          @tag
    Inline tags
    Si trovano nella descrizione principale O nella
      descrizione dei block tag. Es:
 
          {@tag}                  
Tag autoesplicativi

    @author
    @version
    @since                      /* *
                                  * A c l as s r e p r e s e n t i n g a
                                wi n d o w o n t h e s c r e e n .
    @deprecated                   * @au t h o r S ami S h ai o
                                  * @ve r s i o n %I %, %G%
    @serial                       * @s e e
                                j ava. awt . Bas e W n d o w
                                                      i
                                  * @s e e
    %I e %G sono macro
                                j ava. awt . Bu t t o n
                                  */
     settate                    c l as s W n d o w e x t e n d s
                                           i
                                Bas e W n d o w { . . . }
                                         i
     automagicamente
     dai sistemi di versioning (CVS, SVN, ...)
                             
@param

    Descrive i parametri dei metodi

    name DEVE essere            /*
     uguale al nome               * Th i s me t h o d wi l l s ay
                                hel l o
     del parametro                * i f yo u as k i t n i c e l y.
                                  * @ am name Yo u r n ame .
                                        par
                                  * @ et ur n A f r i e n d l y
                                        r
                                gr e e t i ng.
                                */
                                p u b l i c St ri ng
                                He l l o ( n ame : S t r i n g ) : {
                                      r e t u r n “ h e l l o ” + n ame ;
                                }



                             
@return

    Descrive i valori di ritorno

    Documentare valori             /*
     di ritorno insoliti             * Th i s me t h o d wi l l s ay
                                   hel l o
     come 0, null e                  * i f yo u as k i t n i c e l y.
                                     * @ am name Yo u r n ame .
                                           par
     simile                          * @ et ur n A f r i e n d l y
                                           r
                                   gr e e t i ng.
                                   */
                                   p u b l i c St ri ng
                                   He l l o ( n ame : S t r i n g ) : {
                                         r e t u r n “ h e l l o ” + n ame ;
                                   }



                                
@throws, @exception

    Uno per ogni possibile eccezione
                               ...
    Spesso aggiunta              * @exc ept i on
     automaticamente           Nu mb e r Fo r mat Ex c e p t i o n i f
                               t he s t ri ng d oe s not
    Possibile anche per        c o n t ai n a
                               * p ar s ab l e
     le unchecked              < c od e > l ong< /c od e > .
                               */
     exceptions                p u b l i c s t at i c l o n g
                               p ar s e L o n g ( S t r i n g s )
                               t h r o ws
                               Nu mb e r Fo r mat Ex c e p t i o n
                               {. . . . }



                            
@see

    Aggiuge link ipertestuali aggiuntivi
                                 /* *
                                 * ...
                                 * @s ee < a
    Varianti                     h r e f = " h t t p : / / www. w3. o r g / WA
                                 I / " > W b Ac c e s s i b i l i t y
                                           e
                                 I n i t i at i ve < / a>
    @see String                  * @s ee
                                 S t r i n g #e q u al s ( Ob j e c t )
    @see <a href="URL">          e q u al s
                                 */
     label</a>                   p u b l i c vo i d me t h o d ( )
                                 {. . . }
    @see
     package.class#member label
                              
@link package.class#member

    Simile al precedente, ma in versione inline
    Non genera                  /* *
     cross-reference            * Re t u r n s t h e c o mp o n e n t at
                                t he s pe ci f i e d i nd e x.
                                *
                                * Th i s me t h o d i s i d e n t i c al
                                i n f u n c t i o n al i t y t o
                                * t h e { @l i nk #g e t ( i n t ) }
                                * me t h o d ( wh i c h i s p ar t o f
                                t h e { @l i nk L i s t }
                                i n t e r f ac e ) .




                             
@inheritDoc

    Per le classi ereditate, si può ereditare anche la
     relativa documentazione dalla classe padre, in
     modo esplicito (automatico) o implicito.
    Avviene in modo implicito....
      Quando non si scrive una descrizione generale o un
       tag @return, @param o @throws
      Quando non sidescrive un tag @throws ma solo per
       le checked exception




                               
@inheritDoc (II)

    Avviene in modo esplicito...
      Usando il tag inline
                                 /* *
        {@inheritDoc}            * ( s o t t o c l as s e ) .
                                 *
                                 * @t h r o ws
                                 Nu l l Po i n t e r Ex c e p t i o n
                                 { @i nher i t Doc }
                                 */
                                 p u b l i c vo i d g e t Ch ar s ( i n t
                                 s r c Be g i n , i n t s r c En d , c h ar
                                 d s t [ ] , i n t d s t Be g i n ) {




                              
JavaDoc avanzato (da Java
5)
    Doclet
     Permettono di generare vari di tipi di
     documento (es: PDF)
    Taglet
     Permettono di usare tag personalizzati
    UMLGraph
     Permettono di generare grafici UML
    Annotations
     Documentazione più raffinata.

                              
Integrato in Netbeans!

    Scrivere la documentazione
    Si noti che il commento all'interno di un Jdoc è
      formattato automaticamente!
    Selezionare “Run > Generate Javadoc”
    Il browser si apre sulla documentazione
    La documentazione si trova nel progetto, cartella
     “doc”
     Simili funzionalità in altri IDE
     Simili funzionalità in altri linguaggi (es. PHP)

                              
Riassumendo...

    Supportate gli sviluppatori
     con la   documentazione

    Usate JavaDoc
      Commentate
      Aggiornate
      Vivete felici



                              
Bibliografia
    Andrea Gallidabino, Florian Gysin – Intro to Tdoc
    MADS Group - Departamento de Computacion –
     Documentando con Javadoc, Introduccion
    Documentazione ufficiale Java – http://docs.oracle.com


    Questo documento è dotato di licenza CreativeCommon BY-
     SA 3.0
    http://creativecommons.org/licenses/by-sa/3.0/deed.it




                                   

Weitere ähnliche Inhalte

Mehr von Marcello Missiroli

Mehr von Marcello Missiroli (20)

Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
Guida del perfetto Algoritmista I
Guida del perfetto Algoritmista IGuida del perfetto Algoritmista I
Guida del perfetto Algoritmista I
 
Workshop: Introduzione ad TDD
Workshop: Introduzione ad TDDWorkshop: Introduzione ad TDD
Workshop: Introduzione ad TDD
 
Dal c a Java (3/3)
Dal c a Java (3/3)Dal c a Java (3/3)
Dal c a Java (3/3)
 
Dal C a Java (2/3)
Dal C a Java (2/3)Dal C a Java (2/3)
Dal C a Java (2/3)
 
Dal C a Java (1/3)
Dal C a Java (1/3)Dal C a Java (1/3)
Dal C a Java (1/3)
 
Variabili
VariabiliVariabili
Variabili
 
Sviluppo degli algoritmi
Sviluppo degli algoritmiSviluppo degli algoritmi
Sviluppo degli algoritmi
 
5 stadi dello sviluppo di un gruppo
5 stadi dello sviluppo di un gruppo5 stadi dello sviluppo di un gruppo
5 stadi dello sviluppo di un gruppo
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Big O Notation
Big O NotationBig O Notation
Big O Notation
 
Insegnare Agile
Insegnare AgileInsegnare Agile
Insegnare Agile
 
The Sequel to sql
The Sequel to sqlThe Sequel to sql
The Sequel to sql
 
Il ciclo for
Il ciclo forIl ciclo for
Il ciclo for
 
Lo stack: tipo di dato astratto e implementazione in Java
Lo stack: tipo di dato astratto e implementazione in JavaLo stack: tipo di dato astratto e implementazione in Java
Lo stack: tipo di dato astratto e implementazione in Java
 
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
 
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
 
Moodle: i compiti (homework)
Moodle: i compiti (homework)Moodle: i compiti (homework)
Moodle: i compiti (homework)
 
Uefi: l'eterna lotta tra il bene e il male
Uefi: l'eterna lotta tra il bene e il maleUefi: l'eterna lotta tra il bene e il male
Uefi: l'eterna lotta tra il bene e il male
 
Corso Moodle: presentazione
Corso Moodle: presentazioneCorso Moodle: presentazione
Corso Moodle: presentazione
 

Introduzione a java doc

  • 1. javaDoc ovvero... Documentazione semplice Prof. Marcello Missiroli marcello.missiroli@gmail.com    
  • 2. Scopo Scrivere codice è complicato Mantenere codice altrui..di più!    
  • 3. Scopo Scrivere codice è complicato Mantenere codice altrui..di più! Supportiamo gli sviluppatori con la documentazione Manutenzione Riutilizzo    
  • 4. Cosa documentare? Obbligatorio (con Javadoc): Classi Package Costruttori, metodi e attibuti Vivamente consigliato ( con /* */ e // ) Snippets poco chiari Algoritmi Cicli    
  • 5. Perché proprio Javadoc? Generare documentazione di una API a mano è tedioso e genera errori Molti piccoli dettagli Devo sincronizzare sorgente e documentazione Devo duplicare gli sforzi (tipi, nomi. . . ) Mooolto meglio combinare codice e documentazione Genero la documentazione dal codice La documentazione interna al codice tende ad essere più corretta    
  • 6. Infatti Javadoc.... Genera documentazione en HTML Deduce correttamente informazioni quali nome, tipi, classi... . . Ulteriori infomazioni Riferimenti incrociati Molti IDE supportano Javadoc (es. Eclipse, Netbeans)    
  • 7. Sintassi semplice Basta premettere un testo con un particolare formato al codice da commentare. /** * * Descrizione principale (testo / HTML) * * * Tags (testo / HTML) * * */    
  • 8. Esempio complesso /** * Returns the index of the first occurrence of the specified element in * this vector, searching forwards from <code>index</code>, or returns ­1 if * the element is not found. * * @param o element to search for * @param index index to start searching from * @return the index of the first occurrence of the element in * this vector at position <code>index</code> or later in the vector; * <code>­1</code> if the element is not found * @throws IndexOutOfBoundsException if the specified index is negative * @see Object#equals(Object) */ public int indexOf(Object o, int index) ...    
  • 10. Regole base La prima frase di ogni commento deve essere un riassunto con una descrizione concisa e completa, terminata da un punto e seguita da uno spazio, tabulatore o n. Marcare con <code> I nomi e le parole chiave Preferibile l'uso della 3° persona Iniziare con un verbo la descrizione dei metodi Omettere il soggetto quando è ovvio    
  • 11. I tag Javadoc Case sensitive! Sono di due tipi: “block tag” e “inline tag” Block tags Si trovano nella descrizione principale, all'inizio della riga. Es: @tag Inline tags Si trovano nella descrizione principale O nella descrizione dei block tag. Es:   {@tag}  
  • 12. Tag autoesplicativi @author @version @since /* * * A c l as s r e p r e s e n t i n g a wi n d o w o n t h e s c r e e n . @deprecated * @au t h o r S ami S h ai o * @ve r s i o n %I %, %G% @serial * @s e e j ava. awt . Bas e W n d o w i * @s e e %I e %G sono macro j ava. awt . Bu t t o n */ settate c l as s W n d o w e x t e n d s i Bas e W n d o w { . . . } i automagicamente dai sistemi di versioning (CVS, SVN, ...)    
  • 13. @param Descrive i parametri dei metodi name DEVE essere /* uguale al nome * Th i s me t h o d wi l l s ay hel l o del parametro * i f yo u as k i t n i c e l y. * @ am name Yo u r n ame . par * @ et ur n A f r i e n d l y r gr e e t i ng. */ p u b l i c St ri ng He l l o ( n ame : S t r i n g ) : { r e t u r n “ h e l l o ” + n ame ; }    
  • 14. @return Descrive i valori di ritorno Documentare valori /* di ritorno insoliti * Th i s me t h o d wi l l s ay hel l o come 0, null e * i f yo u as k i t n i c e l y. * @ am name Yo u r n ame . par simile * @ et ur n A f r i e n d l y r gr e e t i ng. */ p u b l i c St ri ng He l l o ( n ame : S t r i n g ) : { r e t u r n “ h e l l o ” + n ame ; }    
  • 15. @throws, @exception Uno per ogni possibile eccezione ... Spesso aggiunta * @exc ept i on automaticamente Nu mb e r Fo r mat Ex c e p t i o n i f t he s t ri ng d oe s not Possibile anche per c o n t ai n a * p ar s ab l e le unchecked < c od e > l ong< /c od e > . */ exceptions p u b l i c s t at i c l o n g p ar s e L o n g ( S t r i n g s ) t h r o ws Nu mb e r Fo r mat Ex c e p t i o n {. . . . }    
  • 16. @see Aggiuge link ipertestuali aggiuntivi /* * * ... * @s ee < a Varianti h r e f = " h t t p : / / www. w3. o r g / WA I / " > W b Ac c e s s i b i l i t y e I n i t i at i ve < / a> @see String * @s ee S t r i n g #e q u al s ( Ob j e c t ) @see <a href="URL"> e q u al s */ label</a> p u b l i c vo i d me t h o d ( ) {. . . } @see package.class#member label    
  • 17. @link package.class#member Simile al precedente, ma in versione inline Non genera /* * cross-reference * Re t u r n s t h e c o mp o n e n t at t he s pe ci f i e d i nd e x. * * Th i s me t h o d i s i d e n t i c al i n f u n c t i o n al i t y t o * t h e { @l i nk #g e t ( i n t ) } * me t h o d ( wh i c h i s p ar t o f t h e { @l i nk L i s t } i n t e r f ac e ) .    
  • 18. @inheritDoc Per le classi ereditate, si può ereditare anche la relativa documentazione dalla classe padre, in modo esplicito (automatico) o implicito. Avviene in modo implicito.... Quando non si scrive una descrizione generale o un tag @return, @param o @throws Quando non sidescrive un tag @throws ma solo per le checked exception    
  • 19. @inheritDoc (II) Avviene in modo esplicito... Usando il tag inline /* * {@inheritDoc} * ( s o t t o c l as s e ) . * * @t h r o ws Nu l l Po i n t e r Ex c e p t i o n { @i nher i t Doc } */ p u b l i c vo i d g e t Ch ar s ( i n t s r c Be g i n , i n t s r c En d , c h ar d s t [ ] , i n t d s t Be g i n ) {    
  • 20. JavaDoc avanzato (da Java 5) Doclet Permettono di generare vari di tipi di documento (es: PDF) Taglet Permettono di usare tag personalizzati UMLGraph Permettono di generare grafici UML Annotations Documentazione più raffinata.    
  • 21. Integrato in Netbeans! Scrivere la documentazione Si noti che il commento all'interno di un Jdoc è formattato automaticamente! Selezionare “Run > Generate Javadoc” Il browser si apre sulla documentazione La documentazione si trova nel progetto, cartella “doc” Simili funzionalità in altri IDE Simili funzionalità in altri linguaggi (es. PHP)    
  • 22. Riassumendo... Supportate gli sviluppatori con la documentazione Usate JavaDoc Commentate Aggiornate Vivete felici    
  • 23. Bibliografia Andrea Gallidabino, Florian Gysin – Intro to Tdoc MADS Group - Departamento de Computacion – Documentando con Javadoc, Introduccion Documentazione ufficiale Java – http://docs.oracle.com Questo documento è dotato di licenza CreativeCommon BY- SA 3.0 http://creativecommons.org/licenses/by-sa/3.0/deed.it