Cosa è una collezione?

 
Una collezione è una struttura che raggruppa diversi dati, usualmente omogenei.
Esempi:  Insiemi, multi-insiemi, sequenze, liste, tabelle, ...

Esempi in Java: Array, istanze di Vector (ne vedremo molti altri....)

In Java le collezioni sono istanze di opportune classi, che definiscono metodi per accedere e manipolare i dati in esse contenuti.

Ad esempio, un Vector contiene una sequenza di dati (istanze di Object, quindi generici oggetti Java), e fornisce metodi per inserire, eliminare, cercare dati ed altro [locale, Medialab, Sun].




Programmare con collezioni

Le collezioni sono utili anche in piccoli programmi, indispensabili in grandi applicazioni.

Per non costringere il programmatore a riinventarsi programmi per la definizione e gestione di collezioni, sono stati sviluppari diversi

Collections Frameworks

cioè architetture (software) unificate per rappresentare e manipolare collezioni.

Un Collection Framework tipicamente contiene:

  • Interfacce: specifiche dei tipi di dati astratti che rappresentano le collezioni.
  • Implementazioni: realizzazioni concrete delle interfacce delle collezioni.
  • Algoritmi: classi che realizzano utili algoritmi sulle collezioni, come la ricerca e l'ordinamento.
     



Perché un Collections Framework?

Vantaggi tipici delle librerie standard:
  • Si riduce lo sforzo di programmazione;

  •  
  • Si aumenta l'efficienza e la qualità dei programmi;

  •  
  • Si favorisce il riuso di programmi;

  •  
  • Consente la interoperabilità tra diverse API (esempio: l'interfaccia Collection in Java).
     



Java Collections Framework

E' formato da numerose interfacce e classi appartenenti al package java.util  [locale, Medialab, Sun]. Per un tutorial, si veda [locale, Medialab, Sun]


JFC: Core collection interfaces
(Le principali interfacce del JFC)

  • Collection: definisce metodi basici indipendenti da molteplicità o ordinamento degli elementi
  • Set: collezioni senza ripetizione
  • List: collezioni i cui elementi sono ordinati (ripetizioni possibili) -> Vector
  • SortedSet: insiemi che mantengono ordinati i propri elementi (rispetto all'ordianamento naturale determinato da compareTo)
  • Map: associazioni chiavi-valori (HashTable)
  • SortedMap: Map con chiavi ordinate



... e il package lab2


Il Java Collections Framework fornisce interfacce e implementazioni per tutte le collezioni che ci interessano, ma è abbastanza complesso, non molto adatto per scopi didattici.

Quindi: Useremo classi e interfacce scritte appositamente per il corso, raccolte nel package lab2.

Il package lab2 ha struttura simile al Java Collection Framework, ma molto semplificata, e in alcuni punti incompatibile. La conoscenza del package lab2 consentirà di utilizzare senza difficoltà il più ricco JFC. 

 




Istallazione del package lab2

Per utilizzare il package nei propri programmi è indispensabile:
  • Scaricare l'archivio lab2-bin.tar che contiene i file ".class" nella directory dove tenete, appunto, i file ".class" (tipicamente la directory ~/classes/ oppure la HOME directory). Aprire l'archivio con il comando 
    1. tar -xf lab2-bin.tar
    Questo comando costruisce la directory lab2 che contiene gli eseguibili del package.
     
  • Importare il package in ogni classe che lo usa, inserendo come prime righe del file 

  •  
      import lab2.*;
      import lab2.Exceptions.*;

Se desiderate istallare anche i sorgenti, 
  • Scaricare l'archivio lab2-src.tar che contiene i file ".java" nella directory dove tenete, appunto, i file ".java" (tipicamente la directory ~/src/ oppure la HOME directory). Aprire l'archivio con il comando 
    1. tar -xf lab2-src.tar
    Questo comando costruisce la directory lab2 che contiene il sorgenti del package.



Attenzione: non spostare i files

Tutti i file del package lab2 iniziano con la riga
package lab2;
che dichiara la loro appartenenza al package. 

Se spostate uno di questi files (sia .java che .class) fuori dalla directory lab2, si potrebbero verificare errori difficilmente individuabili.


La documentazione HTML delle classi ed interfacce del package lab2 si trova qui

Come abbiamo generato questa documentazione? 




javadoc

Documentazione del codice:
  • indispensabile per riutilizzo del codice;
  • deve essere completa, aggiornata, facilmente leggibile.
Il programma javadoc (scritto in Java) permette di estrarre automaticamente documentazione HTML da programmi Java.

Esempio: eseguiamolo su alcuni files Java, e analizziamo ciò che produce...
 

> javadoc -package -d lab2-doc lab2/Exceptions/*.java lab2/*.java

Per ottenere una documentazione più ricca, si possono commentare i programmi in modo che javadoc possa estrarre informazioni utili dai commenti. Possiamo vedere lo stile di questi commenti confrontando il sorgente della classe TreeSet con la sua documentazione.

Manuale online di javadoc:

http://java.sun.com/j2se/javadoc/writingdoccomments/