JSem: 1.3
|
Riprendiamo, ancora una volta il codice di Hello World:
le due prime righe sono:
import java.applet.*;
import java.awt.*;
Queste due righe "importano" i pacchetti java.applet e java.awt e quindi permettono di
usare, con riferimento rapido, tutte le classi comprese in quei pacchetti. Diamo un'occhiata al contenuto di questi pacchetti.
Precisiamo che un pacchetto ("package") è una collezione di classi ed interfacce correllate.
Ci sono vari vantaggi nel creare pacchetti di classi:
E' chiaro che classi ed interfacce di uno stesso pacchetto sono correllate.
Evita conflitti di nomi: i nomi delle classi di un dato pacchetto non entreranno in
conflitto con i nomi delle classi di altri pacchetti (il pacchetto determina automaticamente
ulteriore spazio per la denominazione).
Facilita le condizioni di accesso: classi di uno stesso pacchetto possono avere
accesso illimitato tra di loro e un accesso ristretto per classi fuori dal pacchetto.
Permette una maggior chiarezza nella strutturazione del linguaggio (questo è una
delle motivazioni principali).
Di solito i pacchetti sono in formato compresso: .jar (Java archive), formato molto
simile al formato .zip.
java.lang: All'origine di tutto sta la classe Object,
ogni classe discende (direttamente o indirettamente) da Object e
Object è l'unica classe che non ha "antenati".
Questa classe definisce i comportamenti che tutti gli oggetti devono avere; per esempio
la possibilità di confrontarsi con un'altro oggetto (per testare l'uguaglianza), la
possibilità di avere una rappresentazione come stringa, la possibilità di avvisare
altri oggetti che una data variabile è cambiata ecc...
La classe Object è nel pacchetto
java.lang; questo pacchetto è così fondamentale che viene automaticamente
importato.
Il pacchetto java.lang contiene le seguenti classi:
Boolean, Character, Class, ClassLoader, Compiler, Double, Float,
Integer, Long, Math, Number, Object, Process, Runtime, SecurityManager, String, StringBuffer,
System, Thread, ThreadGroup, Throwable.
e le seguenti interfacce: Cloneable, Runnable.
Per il momento ci acconteteremo delle seguenti osservazioni:
Una stringa in Java è un oggetto (della classe String).
Le classi Double, Float, Integer, Long incapsulano
i corrispondenti tipi primitivi, cioè forniscono rappresentazioni dei tipi primitivi
come oggetti (i tipi primitivi NON sono oggetti); torneremo tra poco a parlare dei tipi
primitivi (cf Variabili).
java.awt: Ci vorrebbe un libro intero per descrivere java.awt
(awt = Abstract Window Toolkit). In breve diciamo che questo pacchetto permette
di gestire la grafica, l'outpout sullo schermo (che non sia quello da consolle che viene gestito da
System).
Per esempio java.awt contiene la classe:
Component dalla quale discendono le classi:
Button, Canvas, Checkbox, Choice, Container, Label, List, TextComponent,
Scrollbar;
dalla classe Container discendono le classi:
Window, Panel, ScrollPane,
mentre dalla classe
TextComponent discendono le classi:
TextArea, TextField
Come possiamo vedere java.awt contiene tutte le classi
necessarie per costruire GUI (Graphical User Interface), cioè quelle interfacce che
permettono all'utente di interagire (via pulsanti da premere, textfield, textarea da
compilare) col programma.
java.applet: questo è il pacchetto che permette di fare delle
applet, contiene tra altre cose la classe Applet;
ogni applet deve estendere la classe Applet.
questo viene dal fatto che, contrariamente ad un'applicazione Java, un'applet non ha un
blocco main, infatti un'applet non viene eseguita dall'interprete runtime di Java ma
da un browser (o dall'appletviewer), è quindi un processo completamente diverso. La classe
Applet contiene il necessario
per eseguire le applets.
Osservare che la classe Applet è un'estensione della
classe Panel (ricordiamo che Panel
discende da Container la quale,
a sua volte, è un'estensione di Container); in particolare
un'applet arriva già con un pannello che serve da supporto per l'interfaccia grafica a
finestre.
Un'ultima considerazione importante: in Java una classe può
estendere un'unica classe (e non varie classi).
Siccome ogni applet deve estendere Applet,
un'applet non può estendere nessun'altra classe.
Questo fa sì, per esempio, che c'è un'unico modo di usare dei threads in un'applet:
non potendo estendere la classe Threads, bisogna
implementare l'interfaccia Runnable (torneremo più
avanti su questo argomento).
Osserviamo però che, benchè una classe possa estendere una sola classe, c'è la possibilità
di usare in una classe un numero arbitrario di classi "interne" o "annidate" ("inner"
o "nested classes"), vedremo questo più avanti.
Finalmente
l'outpout di un applet non viene gestito da System
ma dall'AWT, quindi ogni applet deve importare il pacchetto java.awt
.
In conclusione ogni applet deve:
estendere la classe Applet
importare i pacchetti java.applet e
java.awt
Questo non è del tutto esatto perchè basta importare quello che si usa, per esempio:
import java.applet.Applet;
import java.awt.Graphics;
public class HWorld extends Applet{
public void paint(Graphics g){
g.drawString("Hello World!",10,20);
}
}
va benissimo. E' però più comodo importare tutto il pacchetto.
|