Vai al contenuto

Utente:Esteff7/Java

Wikibooks, manuali e libri di testo liberi.

Java[1] è un Linguaggio di programmazione ad alto livello, nato intorno gli anni 90 posseduto dalla Oracle Corporation
è un linguaggio orientato agli oggetti e una delle particolarità di questo linguaggio è la sua Java Virtual Machine(JVM)
che fa da interprete per ogni sistema operativo

Software Development Laboratories o anche conosciuta come Oracle[2] è una azienda che nasce nel 1977, si concentrava sopratutto nel settore dei DataBase[3] ampliando il suo raggio d'azione ha fato si di diventare la seconda software house[4] più grande per fatturato. Oracle[2] offre molti servizi tra le più usate oltre Java[5] ci sta anche Oracle VM VirtualBox[6]. ​

Com'è nato?

[modifica | modifica sorgente]

Java[5] è stato creato da James Gosling per l'azienda Sun Microsystems, ora di proprietà della Oracle[2]. In un primo momento si decise di destinare questo nuovo prodotto alla creazione di applicazioni complesse per piccoli dispositivi elettronici; fu solo nel 1993 con l'esplosione di internet che Java[5] iniziò a farsi notare come strumento per iniziare a programmare per internet.

Ambiti Applicativi

[modifica | modifica sorgente]

Java[5] viene utilizzato in tutto ma principalmente nella programmazione in internet e per applicazioni di vario genere (applicazioni android, desktop, aziendali, scientifiche, di trading, ecc...).

Introduzione generale

[modifica | modifica sorgente]

Tipi di variabili

[modifica | modifica sorgente]

I tipi di dati ammessi in un programma java sono:

  • otto tipi primitivi (boolean, byte, char, short, int, long, float, double);
  • il tipo void.
Tipi Primitivi
[modifica | modifica sorgente]
byte Da -27 a 27 - 1 Da -128 a 127
char Da 0 a 216 - 1 Da 0 a 65535, ovvero da '\u0000' a '\uffff'
Short Da -215a 215 - Da -32768 a 32767
Int Da -231 a 231 - 1 Da -2147483648 a 2147483647
long Da -263 a 263 - 1 Da -9223372036854775808 a 9223372036854775807

byte, short, int e long
I tipi byte, short, int e long sono tutti utilizzati per rappresentare numeri interi ma cambia il range di numeri utilizzabili

public class Esempio 
 {
   private byte numero = 0;
   private short numero = 0:
   private int numero = 0;
   private long numero = 0; 
 }

char
Il tipo char serve ad inserire delle singole lettere es:"a"

public class Esempio 
 {
   private char lettera ='a';
 }

boolean
Il tipo boolean può comprendere solo due valori: "true" e "false"

public class Esempio 
 {
   private boolean variabileBooleana = true;
 }


float e double
I tipi float e double vengono utilizzati per rappresentare i numeri reali quindi con la virgola e come per i tipi interi, anche qui tra float e double cambia solo il range di numeri utilizzabili

 public class Esempio 
 {
   private float numero = 0,5;
   private double numero = 0,5;
 }
Il tipo void
[modifica | modifica sorgente]

Il tipo void non ammette alcun ritorno di dati perciò si può considerare come "vuoto" ​

Cos'è un metodo?
[modifica | modifica sorgente]

Tutti i linguaggi di programmazione forniscono la possibilità di definire, sotto un solo nome, interi gruppi di istruzioni. In questo modo possiamo riutilizzare un blocco di codice in molte parti del programma, semplicemente richiamando il nome con cui l'abbiamo definito, senza dover riscrivere tutto il blocco ogni volta.

Definire un metodo in Java
[modifica | modifica sorgente]

Vanno specificato il tipo di visibilità public|private|protected, dopo il tipo di variablile e il nome

Ecco un esempio:

[public|protected|private] Tipo identificatore(Tipo1 parametro1, Tipo2 parametro2, ...)
        // blocco di codice appartenente al metodo
    return varTipo;
}

lo statement return è opzionale nel caso in cui Tipo sia void.

Richiamare il metodo
[modifica | modifica sorgente]

Per chiamare il nostro metodo all'interno della classe in cui lo stiamo definendo, sarà sufficiente scrivere qualcosa del genere:

Tipo identificatore;

Dichiarazione variabili

[modifica | modifica sorgente]

Metodi che inizializzano le variabili ma utilizzabili anche per altro

Il costruttore è quel metodo di una classe il cui compito è proprio quello di creare nuove istanze, oltre ad essere il punto del programma in cui un nuovo elemento viene creato ed è reso disponibile per l'interazione con il resto del sistema. Il costruttore è spesso usato per effettuare le inizializzazioni dello stato delle nuove istanze. In Java possono esserci molteplici costruttori per una medesima classe e ne esiste sempre almeno uno. Se infatti per una data classe non viene specificato alcun costruttore, il compilatore ne sintetizza automaticamente uno senza argomenti, detto costruttore default.

public class esempio 
{
  private int altezza;
  private int base;
  //costruttori 
  //costruttore vuoto
  public esempio()
   {
   }
  public esempio(int altezza, int base)
   {
    this.altezza=altezza
    this.base=base
   }
//costruttore di copia
  public esempio(esempio c)
   {
  
   }
}
Incapsulamento
[modifica | modifica sorgente]

L'incapsulamento è legato al concetto di "impacchettare" in un oggetto i dati e le azioni che sono riconducibili ad un singolo componente. È infatti possibile modificare una o più proprietà/elementi da dentro o fuori l'oggetto tramite l'utilizzo dei metodi Set e Get [7]

public class cubo
{
    // Dichiarazione delle proprietà: si noti che sono definite tutte private.
    private int lunghezza;
    private int larghezza;
    private int altezza;
    // Metodi "Mutator" per la modifica delle proprietà
    public void setLunghezza(int lun)
    {
        lunghezza = lun;
    }
    public void setLarghezza(int lar)
    {
        larghezza = lar;
    }
    public void setAltezza(int alt)
    {
        altezza = alt;
    }
    // Metodi "Accessor" per ricavare i valori delle proprietà
    public int getLunghezza()
    {
        return lunghezza;
    }
    public int getLarghezza()
    {
        return larghezza;
    }
    public int getAltezza()
    {
        return altezza;
    }
    // Metodo pubblico che visualizza il volume del cubo, usando le proprietà
    // interne della classe
    public void visualizzaVolume()
    {
        System.out.println(lunghezza * larghezza * altezza);
    }
}

Classi e Oggetti

[modifica | modifica sorgente]

Nella vita reale noi vediamo negli oggetti dalle caratteristiche tangibili e riconoscibili, nel mondo OOP invece, il concetto di oggetto si amplia e un oggetto può contenere elementi concreti, ma anche entità come processi o concetti teorici e astratti Gli oggetti di cui stiamo parlando non hanno caratteristiche fisicamente distinguibili ma sono identificati dall'avere:

  • stato, l'insieme delle variabili interne che ne definiscono le caratteristiche in un certo istante dell'esecuzione;
  • "comportamento", le modalità di azione o di reazione di un oggetto, in termini di come il suo stato cambia e come i messaggi passano.

Una classe è esattamente il prototipo di un oggetto in cui vengono definiti tutti i messaggi che ciascuna istanza sarà in grado di ricevere. Nella rappresentazione di una classe sarà quindi importante evidenziare:

  • l'insieme dei metodi che la classe supporta (messaggi ricevibili)
  • l'insieme delle variabili di stato (attributi) che ne rappresentano lo stato.

Controllo di flusso

[modifica | modifica sorgente]

Una struttura condizionale del linguaggio Java per scrivere il codice di un programma, Java fornisce tre tipi di istruzioni del controllo di flusso :

  • Decision Making statements
  • Loop statements
  • Jump statements

Come funziona l'istruzione If/Else ? ​ Se la condizione della struttura è vera, l'istruzione if esegue il primo blocco di istruzioni. Viceversa, se la condizione è falsa, esegue le istruzioni nel blocco dopo la parola chiave else. (ELSE può anche mancare in una struttura condizionale IF.) ​ Esempio in codice :

if condizione {
blocco1
} else {
blocco2
}

For è uno dei cicli più usati nei vari linguaggi di programmazione, esso serve per far ripetere in continuazione un blocco ​ Esempio di codice :

for(inizializzazione; condizione; incremento) {
    // ...
}

Array e ArrayList

[modifica | modifica sorgente]

Gli Array in java sono come dei contenitori utilizzati per inserire e gestire molteplici valori all'interno di una sola variabile ma con una limitazione: gli Array hanno una lunghezza fissa che dev'essere indicata dopo la dichiarazione dell'Array in questione.
È proprio per questo che risulta molto più comodo e funzionale utilizzare una classe che riesce a superare questo limite chiamata ArrayList. La suddetta classe è contenuta all'interno della libreria java.util e ci permette di rappresentare vari oggetti di lunghezza variabile, ognuno di essi identificato da un numero intero chiamato indice.

Esempio di ArrayList:

private ArrayList a = new ArrayList();

Metodi utilizzabili con ArrayList

[modifica | modifica sorgente]

Esistono vari metodi che ci aiutano a gestire la classe Arraylist:

Il metodo add viene utilizzato per aggiungere degli oggetti all'interno dell'ArrayList.

Esempio:

public void inserisciOggetto(listaoggetti o)
    {
        this.esempio.add(o);
    }
Metodo remove
[modifica | modifica sorgente]

Il metodo remove viene utilizzato per rimuovere l'oggetto di posizione "i" specificata.

Esempio:

 public void cancellaOggetto()
    {
        for (int i=0; i < this.esempio.size(); i++)
        {
                this.esempio.remove(3);
        }
    }
Metodo ricerca
[modifica | modifica sorgente]

Il metodo ricerca viene utilizzato per ricercare qualcosa all'interno dell'ArrayList. Consiste nel fare un metodo boolean e se dopo la ricerca ci sarà un ritorno "true", la ricerca avrà avuto esito positivo, se ci sarà un ritorno "false", la ricerca avrà avuto esito negativo.

Esempio:

public boolean cercaOggetto(String _A)
    {
        for (int i=0; i < this.esempio.size(); i++)
        {
            if (this.esempio.get(i).getA() == _A)
            {
                return true;
            }
        }

        return false;
    }

Un Thread, può essere considerato, come una CPU virtuale che incapsula al suo interno i dati e il codice di un particolare programma, Due o più thread possono condividere, indipendentemente dai dati, il codice che essi eseguono. Questo avviene quando tali thread eseguono il loro codice da istanze della stessa classe.

Due o più thread possono condividere, indipendentemente dal codice, i dati su cui eseguono delle operazioni. Questo avviene quando tali thread condividono l'accesso ad un oggetto comune.


Ci sono, fondamentalmente, due metodi per creare un thread in Java. Quello che ci sentiamo di consigliare, soprattutto per la sua struttura Object Oriented, è basato sul seguente costruttore:

public Thread (Runnable target)
// Listato 2. Dichiarare due istanze di thread
Thread t1 = new Thread (r);
Thread t2 = new Thread (r);
void run()

Ereditarietà

[modifica | modifica sorgente]

Definizione di ereditarietà

[modifica | modifica sorgente]

Si dice che una classe A è una sottoclasse di B quando:

  • A eredita da B sia il suo stato che il suo comportamento
  • un'istanza della classe A è utilizzabile in ogni parte del codice in cui sia possibile utilizzare una istanza della classe B.

Esempio in codice:

/**
 * Collo è la classe "base"
 */
public class Collo {
    // dati
    private int x_size, y_size, z_size;
    protected int weight;
    // funzione getter di Weight
    public int getWeight() { return weight; }
    // Costruttore
    public Collo(int w, int xs, int ys, int zs) {
        this.weight = w;
        this.x_size = xs;
        this.y_size = ys;
        this.z_size = zs;
    }
    public int getVolume() {
        return x_size * y_size * z_size;
    }
}
/**
 * ColloInVendita è la classe "derivata"
 */
public class ColloInVendita extends Collo {
    // dati (oltre quelli di Collo)
    private int price;
    // coefficienti da applicare alla vendita
    private static final float A0 = 1;
    private static final float B0 = 1.2;
    private static final float C0 = 1.5; 
    public int getPrice() {
        return price;
    }
    // Costruttore della classe derivata
    public ColloInVendita(int w, int xs, int ys, int zs, int price) {
        // richiama il costruttore della classe base
        super(w, xs, ys, zs);
        this.price = price;
    }
    public float getDeliveryCost() {
        return A0*weight + B0*getVolume() + C0*price;
    }
}

In Java la relazione di derivazione viene resa con la keyword extends che deve essere usata nella dichiarazione della classe:

class A extends B {
    // ...
}

Implica che ogni istanza della classe A sarà anche di tipo B ed avrà a disposizione tutti i metodi della classe B e nel suo stato saranno presenti tutte le variabili che si trovano nella super classe B. [8]

Polimorfismo

[modifica | modifica sorgente]

Il termine polimorfismo nell'ambito dei linguaggi di programmazione si riferisce in generale alla possibilità data ad una determinata espressione di assumere valori diversi in relazione ai tipi di dato a cui viene applicata. ​

Una sottoclasse può anche modificare dei metodi della superclasse, ridefinendoli. Ad esempio, se invochiamo il metodo visualizza() su di un'istanza di Studente, verranno stampati solo i valori delle prime due variabili d'istanza (nome e indirizzo). Una classe derivata può avere un metodo identico ad un metodo già presente nella classe base. Qesta operazione di riscrittura è nota come Ovverride. [9]

Si possono definire più versioni, dello stesso metodo, variando il numero e il tipo dei parametri, e/o la visibilità. L’overloading può essere fatto nella stessa classe o anche nelle classi derivate.[9]

Associazione

[modifica | modifica sorgente]

Quando più classi sono connesse l'una con l'altra da un punto di vista concettuale, tale connessione viene denominata associazione.Quando una classe si associa con un'altra, ognuna di esse gioca un ruolo all'interno dell'associazione.La molteplicità è un tipo speciale di associazione in cui si mostra il numero di oggetti appartenenti ad una classe che interagisce con il numero di oggetti della classe associata.[9] Una classe, in generale, può essere correlata ad una altra nei seguenti modi:

  • Uno ad uno
  • Uno a molti
  • Uno ad uno o più
  • Uno a zero o uno
  • Uno ad un intervallo limitato (es.: 1 a 2 - 20)
  • Uno ad un numero esatto n
  • Uno ad un insieme di scelte (es.: 1 a 5 o 8)

​ ​

Aggregazione

[modifica | modifica sorgente]
Diagramma UML aggregazione

Un'aggregazione è un tipo speciale di relazione che ha la funzione di rappresentare il risultato da una classe a un insieme di altre classi che la compongono dove le altri classi sono indipendenti. Ad esempio: ​ L'aggregazione consente agli oggetti studenti o agli oggetti contenuti di esistere in modo indipendente. Per esempio in una relazione in cui la la persona può essere studento o Insegnante, se eliminiamo la persona, gli insegnanti/studenti rimarranno e potranno funzionare autonomamente.[10]

Class Address{
int street_no;
String city;
String state;
int pin;
Address(int street_no, String city, String state, int pin ){
this.street_no = street_no;
this.city = city;
this.state = state;
this.pin = pin;
}
}

class Student
{
  String name;
  Address ad;
}

Composizione

[modifica | modifica sorgente]
Diagramma UML composizione

La composizione è una forma di associazione. La composizione può essere definita come un'associazione in cui una classe contiene un'altra classe e questa classe contenuta dipende dalla classe contenente in modo tale che non può esistere indipendentemente. i due oggetti sono strettamente accoppiati, ovvero quando l'oggetto (oggetto contenente) che possiede un altro oggetto (oggetto contenuto) viene distrutto, l'altro oggetto viene automaticamente distrutto poiché non può funzionare in modo indipendente da solo.[10]

// class College  
class College {   
    public String name;   
    public String address;   
    College(String name, String address)   
    {   
        this.name = name;   
        this.address = address;   
    }   
}   
// University has more than one college.   
class University {   
    // reference to refer to list of college.   
    private final List<College> colleges;   
    University(List<College> colleges)  
    {  
        this.colleges = colleges;  
    }   
    // Getting total number of colleges  
    public List<College> getTotalCollegesInUniversity()   
    {   
        return colleges;   
    }   
}   
class CompositionExample {   
    public static void main(String[] args)   
    {   
        // Creating the Objects of College class.   
        College c1   
            = new College("ABES Engineering College", "Ghaziabad");   
        College c2   
            = new College("AKG Engineering College", "Ghaziabad");   
        College c3 = new College("ACN College of Engineering & Management Sudies",   
                           "Aligarh");   
        // Creating list which contains the no. of colleges.   
        List<College> college = new ArrayList<College>();   
        college.add(c1);   
        college.add(c2);   
        college.add(c3);   
        University university = new University(college);   
        List<College> colleges = university.getTotalCollegesInUniversity();   
        for (College cg : colleges) {   
            System.out.println("Name : " + cg.name   
                               + " and "  
                               + " Address : " + cg.address);   
        }   
    }   
}

JavaFX è un software applicativo appartenente alla famiglia di java, esso serve per la creazione di applicazioni/applicazioni web. E' possibile creare applicazioni, computer, cellulari, dispositivi portatili, televisori, ecc.

Macintosh 128k

L'interfaccia grafica[11] o anche nota come GUI (Dall'inglese[12] "Graphical User Interface") è una interfaccia che consente all'utente di interagire più facilmente con la maccchina permettendo anche a chi non è un iformatico di poter usufruirne. Se con l'interfaccia grafica[11] è possibile fornire al software[13] una grafica rinnovata con semplicità d'uso, anche l'interfaccia a riga di comando[14] ha i suoi vantaggi. Infatti, si tende ad utilizzare maggiormente l'interfaccia a riga di comando[14]quando si ha esigenze di maggiore controllo sull'esecuzione di un software[13]. Il Sistema Operativo[15] (Dall'inglese OS o Operative System) è un wrapper[16] dell'interfaccia a riga di comando [14]. ​

Come è fatta? (Scene Builder)

[modifica | modifica sorgente]

Java FX Scene Builder è uno strumento di layout visivo che consente agli utenti di progettare rapidamente le interfacce utente dell'applicazione Java FX senza dover scrivere alcun codice. Gli utenti possono trascinare e rilasciare i componenti dell'interfaccia utente in un'area di lavoro, modificarne le proprietà, applicare fogli di stile e il codice FXML per il layout che stanno creando viene generato automaticamente in background. Consente il semplice trascinamento della selezione dei componenti dell'interfaccia utente grafica (GUI). Java FX Scene Builder fornisce un'interfaccia semplice ma intuitiva che può aiutare anche i non programmatori a prototipare rapidamente applicazioni interattive che collegano i componenti dell'interfaccia utente alla logica dell'applicazione.

Quando è apparsa ?

[modifica | modifica sorgente]
Atari ST

La GUI è cominciata ad apparire negli anni ottanta, tra i primi computer ad usare questa tecnologia è stata Apple[17] con il Macintosh 128K (1984[18]) o con l'Atari ST (1985[19]) della Atari Corporation. Prima della GUI veniva usata l'Interfaccia a riga di comando[14] che al contrario della GUI non è user-friendly[20].
La prima GUI è stata inventata dai ricercatori della Xerox Palo Alto Research Center (PARC) negli anni '70, è questa ricerca a portato ad una nuova era delle innovazioni per le grafiche dei computer[21], il primo computer ad usare una interfaccia grafica moderna è lo Xerox Alto sviluppata nel 1973, esso non era un prodotto commerciale per l'utenza ma per essere usato principalmente per le ricerche nelle università[22]. ​

UI Controls o User Interface Elements[23] sono gli elementi costitutivi di qualsiasi interfaccia software[13].
Alcuni dei controlli delle interfacce grafiche più usate sono :
Quelli che accettano i vari tipi di Input[24]

  • Text Input
    • I campi di immissione del testo consentono l'input da tastiera da parte dell'utente.
  • Buttons
    • I pulsanti sono elementi comuni di ogni interfaccia e vengono utilizzati per eseguire un'azione.
  • Dropdown Menus / Combo Boxes
    • I menu fornisce un elenco di elementi tra cui selezionare.
  • Radio Buttons
    • I pulsanti di opzione consentono agli utenti di selezionare elementi da un elenco quando è valida una sola selezione.
  • Checkboxes
    • Le Checkbox consentono agli utenti di selezionare elementi da un elenco quando sono valide più selezioni.

Quelli per la navigazione sui siti Web

  • Links
    • I collegamenti Servono per portare un utente da una pagina ad un'altra.
  • Breadcrumbs
    • I breadcrumb sono una catena di link utilizzati nei siti web.
  • Tabs
    • Le schede sono una forma di navigazione che consente agli utenti di spostarsi tra le diverse sottosezioni di una pagina.
  • Tree Panes
    • Essi vengono usati per la ricerca di file.
  • Menus
    • I menu consentono agli utenti di navigare utilizzando categorie e sottocategorie.
  • Accordions
    • Puoi usare gli accordions per mostrare, nascondere e navigare.

Quelli per comunicare con l'utente

  • Text
    • Il testo serve per mostrare all'utente una o più frasi.
  • Lists
    • Le liste servono per mostrare all'utente una serie di parole.
  • Data Grids
    • Le griglie di dati, chiamate anche viste tabella o tabelle, utilizzano colonne e righe per visualizzare le informazioni correlate in una griglia.
  • Tooltips
    • Le descrizioni comandi sono una forma comune di aiuto contestuale che sfrutta il modello UX.
  • Alerts
    • Qualsiasi controllo dell'interfaccia utente che cattura l'attenzione dell'utente può essere considerato come un avviso.
  • Icons
    • Le icone sono ovunque, sia nel software che al di fuori di esso. Il potere di un'immagine aiuta gli utenti a identificare le cose in modo rapido e preciso.

Il layout è un elemento di base che racchiude e organizza tutti i vari elementi grafici. Esistono molti tipi di layout. Alcuni esempi sono:

  • BorderPane: cinque regioni (top, bottom, left, center) incui disporre i nodi;
  • Hbox: nodi disposti orizzontalmente su una sola riga;
  • Vbox: nodi disposti verticalmente su una sola riga;
  • StackPane: nodi sovrapposti (la posizione dei nodi figlio corrisponde al layer);
  • GridPane: griglia in cui disporre gli oggetti decidendo quante celle occupano (sia sulla riga che sulla colonna) e lo spazio tra celle;
  • TilePane: simile ad una griglia ma impone che tutti gli oggetti abbiano la stessa dimensione.

  1. Java, su dev.java.
  2. 2,0 2,1 2,2 Oracle, su it.wikipedia.org.
  3. DataBase, su it.wikipedia.org.
  4. Software House, su it.wikipedia.org.
  5. 5,0 5,1 5,2 5,3 Java.
  6. VirtualBox, su it.wikipedia.org.
  7. Incapsulamento, su html.it.
  8. Ereditarietà, su html.it.
  9. 9,0 9,1 9,2 Composizione, su ita.myservername.com.
  10. 10,0 10,1 aggregazione, su ita.myservername.com.
  11. 11,0 11,1 Interfaccia Grafica, su it.wikipedia.org.
  12. Inglese, su it.wikipedia.org.
  13. 13,0 13,1 13,2 Software, su it.wikipedia.org.
  14. 14,0 14,1 14,2 14,3 Interfaccia a riga di comando, su it.wikipedia.org.
  15. Sistema Operativo, su it.wikipedia.org.
  16. Wrapper, su it.wikipedia.org.
  17. Apple, su it.wikipedia.org.
  18. 1984, su it.wikipedia.org.
  19. 1985, su it.wikipedia.org.
  20. Usabilità, su it.wikipedia.org.
  21. Computer, su it.wikipedia.org.
  22. Università, su it.wikipedia.org.
  23. User Interface Elements, su usability.gov.
  24. Input, su it.wikipedia.org.

Collegamenti esterni

[modifica | modifica sorgente]