際際滷

際際滷Share a Scribd company logo
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




油                                 油

More Related Content

More from Marcello Missiroli (20)

Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
Marcello Missiroli
Guida del perfetto Algoritmista I
Guida del perfetto Algoritmista IGuida del perfetto Algoritmista I
Guida del perfetto Algoritmista I
Marcello Missiroli
Workshop: Introduzione ad TDD
Workshop: Introduzione ad TDDWorkshop: Introduzione ad TDD
Workshop: Introduzione ad TDD
Marcello Missiroli
Dal c a Java (3/3)
Dal c a Java (3/3)Dal c a Java (3/3)
Dal c a Java (3/3)
Marcello Missiroli
Dal C a Java (2/3)
Dal C a Java (2/3)Dal C a Java (2/3)
Dal C a Java (2/3)
Marcello Missiroli
Dal C a Java (1/3)
Dal C a Java (1/3)Dal C a Java (1/3)
Dal C a Java (1/3)
Marcello Missiroli
Variabili
VariabiliVariabili
Variabili
Marcello Missiroli
Sviluppo degli algoritmi
Sviluppo degli algoritmiSviluppo degli algoritmi
Sviluppo degli algoritmi
Marcello Missiroli
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
Marcello Missiroli
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
Marcello Missiroli
Big O Notation
Big O NotationBig O Notation
Big O Notation
Marcello Missiroli
Insegnare Agile
Insegnare AgileInsegnare Agile
Insegnare Agile
Marcello Missiroli
The Sequel to sql
The Sequel to sqlThe Sequel to sql
The Sequel to sql
Marcello Missiroli
Il ciclo for
Il ciclo forIl ciclo for
Il ciclo for
Marcello Missiroli
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
Marcello Missiroli
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)
Marcello Missiroli
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
Marcello Missiroli
Moodle: i compiti (homework)
Moodle: i compiti (homework)Moodle: i compiti (homework)
Moodle: i compiti (homework)
Marcello Missiroli
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
Marcello Missiroli
Corso Moodle: presentazione
Corso Moodle: presentazioneCorso Moodle: presentazione
Corso Moodle: presentazione
Marcello Missiroli

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 油 油