Utente:Fonzino/Sandbox

Wikibooks, manuali e libri di testo liberi.

Java[modifica]

Cos'è?[modifica]

Java[1] è unLinguaggio di programmazionead 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

Com'è nato?[modifica]

Java è stato creato da James Gosling per l'azienda Sun Microsystems, ora di proprietà della Oracle.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 iniziò a farsi notare come strumento per iniziare a programmare per internet.

Ambiti Applicativi[modifica]

Java 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]

Tipi di dati[modifica]

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]

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
char
Il tipo char serve ad inserire delle singole lettere es:"a"
boolean
Il tipo boolean può comprendere solo due valori: "true" e "false"
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

  byte numero = 0;
  short numero = 0:
  int numero = 0;
  long numero = 0;
  char carattere = 'a';
  boolean variabileBooleana = true;
  float numero = 0,5;
  double numero = 0,5;

Il tipo void[modifica]

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

Metodi[modifica]

Cos'è un metodo?[modifica]

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]

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]

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

Tipo identificatore;

Costruttori[modifica]

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.

Classi e Oggetti[modifica]

Oggetti[modifica]

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.

Classi[modifica]

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.

Ereditarietà[modifica]

Definizione di ereditarietà[modifica]

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;
	}
}

Extends[modifica]

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. [2]

Polimorfismo[modifica]

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.

Override[modifica]

Override 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. [3]

Overloading[modifica]

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.[3]

Associazione[modifica]

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.[4]

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]

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.[5]

Composizione[modifica]

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.[5]

JavaFX[modifica]

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.

GUI[modifica]

Computer_macintosh_128k,_1984_(all_about_Apple_onlus)

L'interfaccia grafica[6] o anche nota come GUI (Dall'inglese[7] "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[6] è possibile fornire al software[8] una grafica rinnovata con semplicità d'uso, anche l'interfaccia a riga di comando[9] ha i suoi vantaggi. Infatti, si tende ad utilizzare maggiormente l'interfaccia a riga di comando[9]quando si ha esigenze di maggiore controllo sull'esecuzione di un software[8]. Il Sistema Operativo[10] (Dall'inglese OS o Operative System) è un wrapper[11] dell'interfaccia a riga di comando [9].

Quando è apparsa ?[modifica]

Atari_1040STf

La GUI è cominciata ad apparire negli anni ottanta, tra i primi computer ad usare questa tecnologia è stata Apple[12] con il Macintosh 128K (1984[13]) o con l'Atari ST (1985[14]) della Atari Corporation. Prima della GUI veniva usata l'Interfaccia a riga di comando[9] che al contrario della GUI non è user-friendly[15].
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[16], 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à[17].

UI Controls[modifica]

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

  • 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.

Layout[modifica]

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 glioggetti abbiano la stessa dimensione.

Note[modifica]

  1. Java, su dev.java.
  2. https://www.html.it/pag/51352/ereditarieta-in-java/
  3. 3,0 3,1 https://ita.myservername.com/java-composition-what-is-composition-java#Differences_Between_Aggregation_Vs_Composition
  4. https://www.edrawsoft.com/it/article/uml-aggregazione-vs-composizione.html#:~:text=Se%20due%20oggetti%20esistono%20indipendentemente,altro%2C%20sono%20etichettati%20come%20composizione.
  5. 5,0 5,1 https://ita.myservername.com/java-composition-what-is-composition-java#Differences_Between_Aggregation_Vs_Composition
  6. 6,0 6,1 Interfaccia Grafica, su it.wikipedia.org.
  7. Inglese, su it.wikipedia.org.
  8. 8,0 8,1 8,2 Software, su it.wikipedia.org.
  9. 9,0 9,1 9,2 9,3 Interfaccia a riga di comando, su it.wikipedia.org.
  10. Sistema Operativo, su it.wikipedia.org.
  11. Wrapper, su it.wikipedia.org.
  12. Apple, su it.wikipedia.org.
  13. 1984, su it.wikipedia.org.
  14. 1985, su it.wikipedia.org.
  15. Usabilità, su it.wikipedia.org.
  16. Computer, su it.wikipedia.org.
  17. Università, su it.wikipedia.org.
  18. User Interface Elements, su usability.gov.
  19. Input, su it.wikipedia.org.

Collegamenti esterni[modifica]


Cosa sono i Thread?[modifica]

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()