SCHEMI DI ELABORAZIONE AUTOMATICA DEI DATI
Documentazione disponibile su java.sun.com (oracle.com,netbeans.org)
Java è un linguaggio di alto livello orientato agli oggetti sviluppato dalla Sun Microsystem
Linguaggio macchina
Linguaggio assembler
Linguaggio di alto livello ( java)
Sviluppato dalla Sun Microsystem
Java IDE: (java integrated Deveolpment Environment); ambiente software; ambiente integrativo di
sviluppo.
Esso comprende:
Java SDK: (java software Development Kit); kit di sviluppo (serve per far girare java)
Java RE: (java Runtime Environment); ambiente di esecuzione
Java API: (java Application Programming Interface) interfaccia di applicazione (sono librerie o package)
Java è nato con lo scopo di girare su tutte le macchine
L’ambiente di programmazione può variare
STORIA:
correggere linguaggio C++ (anni 90)
su tutte le macchine
’94 stasi del linguaggio  risolto dall’incontro col fondatore di Netscape
’95 ufficialmente nasce Java; free, comincia la sua evoluzione
2010: Oracle compra SunMicrosystem, che così muore  tuttavia continua lo sviluppo di java
CARATTERISTICHE:
interpretato (e compilato)
orientato agli oggetti
portabile
sicuro
LOGICA DI JAVA:
1
Programma.java (file)  (tramite compilatore) pogramma.class (è a metà fra linguaggio macchina e
uomo) java VM (è richiesta la sua istallazione sulla macchina affinché funzioni)  (010011) mio
programma.
Oss. Se apro un file.class non capisco nulla
NB: necessaria installazione di Java Virtual Machine sulla macchina  scrivo una volta sola ma eseguo i
comandi ovunque
C’è la stessa idea di Visual Basic: compilatore
TIPI DI PROGRAMMI CHE COSTRUISCO CON JAVA:
Applicazionie (mia)
Applet: programma da eseguire nel borwser
COS’E’ LA PIATTAFORMA JAVA?
È costituita da : Java Virtual Machine e da java API (Application Programming Interface)
Myprogram.java
(questi 2 formano la piattaforma java)


Java API
Java Virtual Machine
Hardware-Based Platform
COSA OCCORRE PER PROGRAMMARE?
Programma Java e block-Notes (si avvia tramite prompt dei comandi il PrimoProgramma.java creando così il
PrimoProgramma.Class) , ma è folle pensare di usarlo così.
Userò il kit di java SDK  reperibile su java.sun.com
L’Ide Netbeans reperibili presso www.netbeans.org
BROWSER
java.sun.com
java SE
download NetBeans
Donwload JPK
Java API’S descrive le librerie a seconda della versione del linguaggio (per me la 7). Per avere velocemente
informazioni su classi e librerie; si consulta o senno si usano i tutorial
2
1. Tutorials (creating a Gui Swing)
2. Learning java language
DOWNLOAD
Scaricare JDK il pacchetto java Se di netbeans ide (Netbeans comprensivo del JVK)
CREAZIONE PROGETTO
File- new project-java application
Project name + cartella dove salvare (è la sottocartella del progetto che ha lo stesso nome) – main class? Se
spuntata stabilisce quale fra i file.java parte per prima. È caratterizzata dal fatto che inizia per prima.
Progetto = cartella con più sottocartelle, nelle sottocartelle ci sono tanti file.java che una volta compilati
diventano file.class
Una volta creato il progetto:
File
Classe : è formata da tutto ciò che sta dentro le parentesi { }. Dentro una classe ci sono variabili e metodi.
Public static void main (string[] args){
System.out.println(“ciao”;
}
Main: metodo
Void: è una subroutine con (parametri) cioè argomenti
In Blu: modificatori del metodo
NB: tutte le istruzioni vanno concluse con un ;
CREAZIONE DI UN FRAME
Click destro su JavaApplication (in un progetto) – new- other- Swing Gui From – Jframe form. Ciò mi
permette di gestire la finestra la pdv visivo si forma NewJFrame.java (anche qui c’è la modifica di un
codice sorgente)
3
CAPITOLO 1: INTRODUZIONE
Println è un metodo di System.out; “visualizza e vai a capo”  utilità pratica: per vedere delle variabili
quando qualcosa non va nel programma
METODO
È una sequenza di istruzioni che accede ai dati di un oggetto. La definizione di un metodo specifica il tipo di
parametri espliciti ed il valore restituito.
Tipo di parametro esplicito = classe corrente; non menzionato nella definizione del metodo
(equivalente di function o Subroutine in VB)
Davanti al nome del metodo c’è il tipo di dati restituito
Oggetto.metodo(parametri)
System.out.println(“Hello World!”)  Classe.oggetto.metodo (parametri)
-
Metodi della classe String:
o length() conta numero caratteri in una strnga (parentesi vuote)
String greeting =”Hello World”;
int n = greeting.length();
o toUpperCase(): crea un altro oggetto String che contiene I caratteri della stringa originale,
con le minuscule convertite in maiuscole
o Replace(“è sostituto”,“sostitutore”): crea un nuovo oggetto (sostituzione di stringhe)
String river = “Missouri”;
river.replace(“our”,”issip”)  “Missisippi”
-
Metodi della classe Rectangle:
o Intersection:
Rectangle box1 intersection(box2);
box2 è il rettangolo con cui voglio intersecarlo ( è parametro esplicito), box1 è implicito
-
Metodi della classe Graphics2D:
o draw() disegna forme come rettangoli, ellissi e segmenti
all’interno di un metodo, scrivere:
Rectangle box = New Rectangle(5,10,20,20);
g2.draw(box);
La classe string è “immutabile”, tutti i suoi metodi non operano sull’oggetto dove è chiamato.
Parametri impliciti ed espliciti:
-
Esplicito se fra () nei metodi: è l’input di un metodo; es. System.out.println(greeting)
Implicito è l’oggetto su cui viene chiamato il metodo; es. System.out.println(greeting)
I valori restituiti dai metodi possono essere impiegati come parametri per altri metodi:
System.out.println(greeting.length());
La definizione di un metodo specifica il tipo di parametri espliciti ed il valore restituito; il tipo di parametro
implicito è quello della classe corrente
4
Se c’è il “void” allora il metodo è una subroutine.
Un metodo si dice “sovraccaricato” se una classe ha più metodi con lo stesso nome, ma diversi parametri
(come VB MessaBox)
5
CAPITOLO 2: USARE OGGETTI
Identificatore: nome di una variabile, metodo o classe
= è carattere di assegnazione( non opera confronti: if A==B)
Oggetto: entità che può essere manipolata nel programma (attraverso la chiamata di metodi), ogni oggetto
appartiene ad una classe
VARIABILE
= locazione di memoria, identificata da un nome (nome variabile); per convenzione comincia con lettera
minuscola. Per i nomi composti il nome che segue il primo è bene che cominci con la lettera maiuscola. Si
può manipolare un oggetto chiamando i suoi metodi.
Assegnazione
TypeName variableName=value;
typeName variableName;
esempio
String greeting = “Hello Dave”;
CLASSE:
Definisce oggetti con lo stesso comportamento. La classe determina i metodi validi.
Per convenzione il suo nome inizia con una lettera maiuscola;
= carattere di assegnazione( non opera confronti: if A==B)
-
String: è una classe “immutabile”, tutti i suoi metodi non operano sull’oggetto dove è chiamato
(motivi efficienza String Buffer)
River.replace(“issip”,”our”)
CLASSI ED OGGETTI
La classe è lo stampino per creare gli oggetti. Una classe contiene dati(=variabili) e metodi (=cioè funzioni e
subroutine che sono le azioni\operazioni).
La classe “istanziata” per creare oggetti (\\ conto corrente o bank account: CC è la classe, ha delle proprietà
quali saldo e valore iniziale; istanziare il CC significa che il mio conto corrente avrà un certo saldo e valore
iniziale così come il tuo ed il suo)
TIPI NUMERICI
La variabile contiene proprio il valore, non l’indirizzo come per gli oggetti.
I tipi numerici sono “primitivi”
NB: i numeri non sono oggetti.
Possono essere integer, short, long o float, double
FORME RETTANGOLARI:
6
(ho 3 istanze della classe: (x,y) = origine in alto a sinistra, h e larghezza.
Oggetti di tipo rectangle descrivono forme rettangolari
La classe rectangle identifica l’idea del rettangolo .
 Avrà dati e metodi
Per costruire oggetti uso l’operatore New.
Un oggetto Rectangle non è una forma rettangolare- esso è un oggetto che contiene un insieme di numeri
che descrivono il rettangolo
L’operatore new crea un oggetto rectangle
Esso impiega dei parametri (5,10,20,30,) pe inizializzare i dati dell’oggetto
Esso restituisce l’oggetto
Rectangle box= new Rectangle (5,10,20,30)
Oss. Contiene http di memoria dove stanno davvero i 4 dati che servono ad identificare il rettangolo
ISTANZIARE OGGETTI
Il processo di creazione di nuovi oggetti è detto “istanziazione”  “parametri di istanziazione”
Se non do valori alla classe, chi ha creato la classe ha detto che è un rettangolo degenere ( come 0,0,0,0)
CREAZIONE DI OGGETTI
New ClassName(parameters)
New Rectangle(5,10,20,30)
METODI DI ACCESSO E MODIFICATORI
Di accesso: accedono ma non cambiano i dati (es. getwidth(): double width=box.getWidth() )
Modificatori: cambiano lo stato del loro parametro implicito (es. box.translate(15,25)
IMPORTARE PACKAGES
Le classi java sono raggruppate in packages. Si possono importare classi specificando il package ed il nome
della classe
Ogni package contiene molte classi (es. Swing), in certi casi, se voglio usare la classe Rectangle, devo
scrivere import e nome package. Si possono importare classi specificando il package ed il nome della classe:
Import packageName.ClassName;
import java.awt.Rectangle;
Ma non occorre importare java.lang e quindi si hanno a disposizione ad esempio String e System
Per importare un classe che è in un package diverso da quello che si sta usando si fa:
7
import java.util.Randoom; all’inizio del programma
DOCUMENTAZIONE API:
Application Programming Interface; elenca classi e metodi della libreria Java
http://java.sun.com/javase/6/docs/api/index.html
Field = sono i dati di istanza
RIFERIMENTI AD OGGETTI
Essi descrivono la posizione degli oggetti nella memoria del computer.
New  restituisce un riferimento ad un nuovo oggetto.
Oss. Variabili oggetto diverse possono riferirsi allo stesso oggetto
Rectangle box
NB: Le variabili oggetto hanno l’indirizzo della zona di memoria dove sta realmente l’oggetto
Rectangle box = new Rectangle (5,10,20,30);
Rectangle box2 = box;  assegnato a box2 l’indirizzo che box contiene
 box e box2 si riferiscono allo stesso oggetto
CREARE UNA CLASSE
file – new file – java class
Nb: deve essere nello stesso package (es. javaapplication)
APPLICAZIONE GRAFICHE E FINESTRE
Per visualizzare un frame:
all’interno di una classe Main
1. Costruire un oggetto della classe JFrame – lo istanzio
JFrame pippo =newJFrame():
2. Stabilire le dimensioni del frame – chiamo il metodo setSize per h e larghezza
pippo.setSize( , );
3. Eventualmente definire il titolo del frame
pippo.setTitle(“An empty Frame”);
4. Fissare la “default close operation” – cosa fare quando chiudo il frame? Stabilisco una operazione di
default di chiusura. Exit on close è maiuscolo perché è una costante.
pippo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
5. Rendere il frame visibile – fra () parametro booleano
pippo.setVisible(true);
Import java.swing.JFrame;
8
Public class EmptyFrameViewer {
Public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(300,400);
frame.setTitle(“An empty Frame”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible;}
}
DISEGNARE IN UN FRAME
Oss. Anziché scrivere tutti i pacchetti da richiamare, si va su Source-fix imports (lo fa java in automatico)
Non si può disegnare direttamente sul frame, si disegna su un adesivo trasparente che viene poi appiccicato
sul frame: disegno su lui, viene incollato  disegno sul frame)
Esso deve essere della classe JComponent che appartiene alla Swing: questa classe ha il comando
paintComponent con un unico parametro.
Purtroppo non uso JComponent, ma una sua sottoclasse  un figlio, che “estende” cioè “eredita” da
JComponent tutto ciò che ha. Pertanto il procedimento seguito e da fare è: JC, creo classe figlio, ridefinisco
metodo Jcomponent con istruzioni, e dentro scrivo ciò che voglio disegnare.
Per visualizzare un disegno in un frame, definire innanzi tutto una classe che estende la classe JComponent
Sistemare le istruzioni di disegno dentro il metodo paintComponent. Tale metodo viene chiamato ogni
volta che il componente necessita di essere ridisegnato
Public class RectangleComponent extends JComponent {
Public void paintComponent(Graphics g){
Drawing instructions go here}
}
g può cambiare, g appartiene alla classe Graphics
ma la classe Graphics è povera di roba  uso la classe Graphics2D: ma allora devo cambiare g
convertendolo:
Graphics2D g2 = (Graphics2D) g;
assegno g a g2, cioè assegno lo stesso indirizzo di memoria ; (da convertire)
Graphics è una classe che consente di manipolare le caratteristiche grafiche (es. colore)
Graphics2D è una classe con metodi per disegnare forme (quadrati, cerchi,..).
Devo usare una conversione per recuperare l’oggetto Graphics2D dal parametro Graphics
esempio:
9
public class RectangleComponent extends JComponent {
public static void paintComponent (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
}
}
DISEGNARE 2 RETTANGOLI
Per appiccicare il component al frame: frame.add(component);
Il disegno verrà fatto in fase di lancio del programma e java lo rilancerà ogni volta che occorrerà farlo
vedere
Il metodo Intersection appartiene alla classe Rectangle:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;
public class RectangleComponent extends JComponent {
public void paintComponent(Graphics2D g);
Graphics2D g2 = (Graphics2D) g;
Rectangle box = new Rectangle(5,10,20,30);
g2.draw(box);
box.translate(15,25);
g2.draw(box);
// oppure avrei potuto fare Rectangle box1 = new Rectangle(10,20,20,30) e
// g2.draw(box1)
}
Ora scrivo le istruzioni complete, rendo visibili i rettangoli:
import.java.swing.JFrame;
public class RectangleViewer {
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(300,400);
frame.setTitle(“2 rettangoli”);
10
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
RectangleComponent component = new RectangleComponent();
Frame.add(component)
Frame.setVisibile(true);
}
}
ELLISSI
Ellipse2D.double; descrive un ellisse
Per disegnarla:
Ellipse2D.double pippo = new Ellipse2D.double (x,y, width, height);
g2.draw(pippo);
(progetto Moodle): ogni volta che cambio la dimensione della finestra scatta il paint-component , e siccome
l’ellisse ha delle opportune coordinate che dipendono dalla grandezza del frame si modifica la sua
dimensione. Le dimensioni dell’etichetta del JComponent sono le stesse del frame. Quindi sulla
documentazione API alla voce Jcomponent che cosa può essere utile? GetHeight() che dà l’altezza del
jcomponent e GetWeight() che ne dà l’ampiezza.
Oss. Dentro ogni nome-cartella del processo: la cartella biuld  c’è un file .jar ( file di tipo .zip). Esso
contiene i file bytecode del progetto (.class): se clicco 2 volte la JVM fa partire il progetto. Questo è il fileprogetto che va distribuito. La cartella SRC contiene il file .java. Con questo posso usare il progetto con altri
software. Il resto dei file è un contorno.
NB. Se copio i file.java posso modificare il progetto. Se invece voglio solo distribuire il progetto allora devo
copiare i file .class
LINEA
Line2D.Double pluto = new Line2D.Double(x1,y1,x2,y2);
g2.draw(segment);
TESTO
g2.drawstring(“Message”,50,100);
COLORI
11
Color.BLUE, Color.RED
g2.setcolor(magenta); per stabilire il colore
g2.fill(pippo); per riempire forme
CAPITOLO 3: COSTRUZIONE DELLE CLASSI
Incapsulamento: caratteristica delle classi di nascondere le caratteristiche/ i dettagli non importanti. E’ il
processo di nascondere i dati dell’oggetto e fornire i metodi per l’accesso a tali dati. Incapsulare significa
dichiarare le variabili di istanza come private e definire metodi pubblici che accedono a tali dati.
I metodi pubblici garantiscono l’accesso alle variabili private
Come una scatola nera. Basta sapere che cosa fanno e a cosa servono le classi, non servono tutti i dettagli:
quando costruisco una classe, la base della mia classe sarà un’altra classe. Di questa ultima mi interessa
solo sapere cosa fa e a cosa serve. Ad ogni incapsulamento corrisponde un concetto, i concetti sono
individuati tramite l’astrazione. Nella programmazione ad oggetti le scatole nere che costituiscono il
programma sono chiamate oggetti. Agendo tramite incapsulamento si costruiscono programmi efficienti e
chiari (es. il meccanico controlla e risolve solo alcuni problemi dell’auto; i guidatori sanno solo guidare il
veicolo; l’utente usa il programma; un programmatore sa costruire alcune cose del programma, un altro
altre;..). L’astrazione viene usata per inventare tipi di dati di alto livello
Una regola pratica per progettare una classe è definirne dapprima il comportamento e poi si può procedere
a realizzarla.
Esempio: realizzare classe che rappresenti i conti correnti bancari
Definisco comportamento di un conto corrente bancario: effettuare deposito, ritirare un importo, ottenere
un saldo. Cioè per ogni soggetto vorrei fosse possibile sapere il bilancio del suo conto, il deposito ed i
prelievi.
Deposito_di_Mario_Checking.deposit(2000);
Deposito_di_Mario_Checking.withdraw(500);
System.out.println(Deposito_di_Mario_Checking.getBalancce() );
DEFINIZIONE DI UN COSTRUTTORE
Un costruttore inizializza le variabili di istanza. I costruttori sono sempre (quasi tutti) pubblici!
Ha lo stesso nome della classe ove si trova. Più costruttori di una stessa classe avranno lo stesso nome
purché però abbiano parametri diversi (come i metodi) nel nome o nel tipo
Es. Nella classe ContoCorrente ci sarà:
public ContoCorrente()
{ //fare qualcosa
}
Il corpo del costruttore viene invece eseguito quando un nuovo oggetto viene creato.
12
Se costruisco una classe senza costruttori, allora ne esiste uno che non fa nulla.
Le istruzioni nel corpo del costruttore fisseranno i valori dei dati interni all’oggetto che viene istanziato.
Grammatica (scopo: definire comportamento di un costruttore)
I costruttori si dichiarano all'interno di una classe essenzialmente come i metodi, ma rispettando le
seguenti regole:
-
Nome = nome della classe
Tipo di costruttore non specificato
‘static’ no va usato
AccessSPecifier ClassName(tipo di parametro nome del parametro,..)
{ corpo del costruttore
}
Esempio di costruttore
Public account {
Bilancio =0 (variabile bilancio inizializzata a 0)
}
Chiamata di un costruttore (=ContoCorrente)
ContoCorrente contoCorrenteDiHenryChecking = new ContoCorrente(100);
oss. Ciò crea un nuovo oggetto di tipo ContoCorrente, inizializzando il parametro bilancioIniziale a 1000,
cioè inizializza il dato di istanza bilancio del nuovo oggetto creato al valore di 1000. Esso restituisce il
riferimento ad un oggetto, cioè l’indirizzo di memoria dell’oggetto. Memorizza il riferimento dell’oggetto,
nella variabile contoCorrenteDiHenryChecking
vs Chiamata di un metodo
contoCorrenteDiHenryChecking.deposit(500);
inizializza il parametro amount a 500. Va a prendere il campo bilancio dell’oggetto il cui indirizzo è
memorizzato in contoCorrenteDiHenryChecking. Aggiunge il valore dell’importo a bilancio e memorizza il
risultato nella variabile nuovoBilancio. (vd pg 13 e 14)
RETURN
grammatica
return espresisone;
ad esempio
return bilancio
DEFINIZIONE DI UNA CLASSE
13
Grammatica (definire una classe, la sua interfaccia pubblica ed i suoi dettagli costruttivi)
Interfaccia pubblica: è l’insieme dei metodi e dei costruttori pubblici. Se un metodo è private, può essere
usato solo all’interno della classe ove è definito, se è public lo si può usare anche in altre classi.
AccessSpecifier class ClassName
{ costruttori
Metodi
Dati di istanza = fields
}
Es. Public class ContoCorrente
{
Public ContoCorrente (double BilancioIniziale) { }
Public void deposito(double ammontare) {
}
}
Alcuni metodi non restituiscono alcun valore,
public void withdraw(double amount){
double nuovoBIlancio= balance – amount;
balance = nuovoBilancio;
}
, altri invece restituiscono un valore di output
public double getBalance() {
return balance
}
COMMENTI:
/**
*/
VARIABILI DI ISTANZA (o variabili di istanza o fields)
Un oggetto memorizza i suoi dati in variabili di istanza (campi di esemplare, dove campo=indirizzo in un
blocco di memoria).
Logicamente prima si creano le variabili di istanza e poi i metodi
La istanza di una classe è un oggetto di una classe!
14
La dichiarazione di una classe specifica le avariabili di istanza
Public class ContoCorrente
{
Private double bilancio;
}
-
Specificatore di accesso (public / private)
Tipo di variabile (double/..)
Nome della variabile
Ciascun oggetto della classe ha il proprio insieme di dati di istanza
Nb. Di norma tutte le variabili di istanza vanno dichiarate come private!
Nella classe ContoCorrente è stata definita la variabile bilancio: le variabili di istanza sono due valori che la
variabile bilancio assume in corrispondenza di due diversi conti correnti.
Grammatica- dichiarazione:
accessSpecifier classe NomeDellaClasse
{ accessSpecifier TipoDiField NomediField;
}
Esempio – scopo: definire un campo che è presente in ogni oggetto della classe
Public class ContoCorrente
{
Private double balance
}
CATEGORIE DI VARIABILI
V DI ISTANZA:
Appartiene all’oggetto.
Visibilità dell’oggetto.
Inizializzate di defalut
Muore qnd l’oggetto
muore
V PARAMETRO:
appartiene ad un
appartiene ad un metodo metodo
V LOCALI:
Devono essere
inizializzate
*esplicitamente(
Sono inzializzate di
default
Esistono e vivono
Esistono e vivono fintanto fintanto che è in
che è in esecuzione il
esecuzione il metodo
metodo
THIS
15
Parola chiave che indica il parametro implicito. L’uso del nome di una variabile di istanza in un metodo
indica la variabile di istanza del parametro implicito. Il parametro implicito è sempre chiamato this., a aprte
i metodi statici. Quando ci si riferisce ad una variabile di istanza in un metodo, il compilatore
automaticamente gli applica il parametro this ( parametro implicito this, tipo ContoCorrente).
CLASSI PER DISEGNARE FIGURE (esericizio)
Disegnare una classe per ogni figura
Struttura della classe car: costruttore e parametri (x,y), metodo draw (da creare=
Car Viewer, Car component, e altra
// è un costruttore il seguente
Public car (int x, int y)
{
x Left = x
y left = y
}
Quando creerò car1, i suoi dati di istanza saranno dati dal metodo.
Nel paintComponent chiamo il metodo draw della classe car, Car.draw(g2) dove g2 è un indirizzo di
memoria passato al metodo draw della classe car.
CAR – MOODLE
Un oggetto Car deve essere identificato da x,y e da un colore (aggiunta che devo fare io).  modifico la
classe car.java inserendo un nuovo dato di istanza. Devo modificare la car.java
16