Importanza dei nomi e dei domini nei package
Devo stare attento ai nomi che scelgo perché potrei scegliere un nome ambiguo con cui intendere qualcosa e qualcun altro potrebbe scegliere lo stesso nome per intendere qualcos'altro, allora avrei creato un conflitto a livello semantico. Per questo si usa il dominio che in questo caso è unipv.it, allora si inverte la lettura e i package iniziamo con IT.unipv.iii.
Gestione dei conflitti tra package
Immaginiamo di importare due package che mi creano conflitto, ad esempio importo il package unipv e polimi. Se entrambi contengono studenti, il mio compilatore se ne accorge e dice che c'è un conflitto. Allora o togliamo l'import oppure usiamo il nome esteso per risolvere il problema.
Modalità di riferimento alle classi nei package
Per riferirsi ad una classe appartenente ad un package è possibile:
- Riferirsi ad essa con il nome completo: aaa.bbb.graphics.Rectangle r = new aaa.bbb.graphics.Rectangle();
- Importare la classe: import aaa.bbb.graphics.Rectangle;
- Importare l’intero package: import aaa.bbb.graphics.*;
Alcuni package standard
- Java.lang: classi base del linguaggio: Object, System, String, Math ...
- Java.io: classi di I/O: FileInputStream, FileOutputStream
- Java.util: classi di utilità: Date, Random, ArrayList,
- Java.net: classi di supporto alle applicazioni di rete: socket, URL, ...
- Java.applet: classe Applet, ...
- Java.text: classi per la formattazione di numeri, date, ecc: NumberFormat, DecimalFormat, DateFormat...
- Java.awt: Abstract Windowing Toolkit, classi per la rappresentazioni di elementi di interfaccia grafica
Visibilità delle variabili e delle classi
Tutto ciò che dichiaro dentro due parentesi graffe (anche nel caso di una if) rimane utilizzabile lì dentro (si parla di body) e fuori, tale variabile non potrà essere utilizzata.
Esempio:
if (condizione) {
int i = 5;
}
i++;
Questo codice mi darebbe errore poiché la variabile i è definita solo dentro il body quindi non può essere usata fuori.
Visibilità di classi e variabili
Classi e interfacce sono visibili all’interno del package in cui sono dichiarate, sono visibili all’esterno del package solo se dichiarate public. Variabili e metodi sono visibili quando la loro classe è visibile. Sono visibili quando il loro modificatore li rende visibili.
Progettazione delle classi
Progettando una classe dobbiamo pensare a due tipi di utenti:
- Chi utilizzerà la classe per realizzare delle applicazioni: questi useranno i membri public.
- Quelli che estenderanno la classe per realizzare delle sottoclassi: questi useranno anche i protected.
Andremo quindi ad assegnare public e protected in base a ciò che ci interessa. Dichiarare una classe public final o final public è la stessa cosa, analogamente per protected static o static protected.
Concetto di static nelle classi
Static si applica a una classe, non a una sua istanza. Un membro statico viene allocato quando la classe viene caricata, l’inizializzazione avviene anche al momento del caricamento della classe.
2 modi per referenziare una variabile statica:
- Mediante una reference a qualsiasi istanza della classe (non buono)
- Mediante il nome della classe (migliore)
Anche i metodi possono essere static. Non esiste alcuna garanzia che esista una istanza della classe quando il metodo static viene invocato, potrebbe essere invocato prima che la classe in cui è presente venga istanziata, tipo il metodo main.
Metodi statici e non statici
I metodi non statici hanno una variabile implicita denominata this, che è un riferimento all'oggetto che esegue il metodo. Con i metodi statici, non c'è questo. Un metodo statico non può essere sovrascritto per essere non-statico. Può essere sovrascritto per essere un altro metodo statico. I metodi statici non possono usare variabili non statiche o metodi non statici della propria classe. Se un metodo statico deve accedere a una variabile non statica o chiamare un metodo non statico, deve specificare quale istanza della sua classe possiede la variabile o il metodo.
-
Package ed interfacce per la gestione di sequenze, Biotecnologie
-
Programmazione ad oggetti e Java (3)
-
Appunti sull'input/output in Java
-
Collezioni e mappe in Java