Want to create interactive content? It’s easy in Genially!

Get started free

JAVA PRESENTATION

Matteo Sgambati

Created on November 17, 2023

Start designing with a free template

Discover more than 1500 professional designs like these:

Corporate Christmas Presentation

Business Results Presentation

Meeting Plan Presentation

Customer Service Manual

Business vision deck

Economic Presentation

Tech Presentation Mobile

Transcript

JAVAPresentation

Matteo Sgambati, Milo PolicastroIV DI

Andrea Esposito, Bruno Imer 🤬

Indice

Classi

Costruttori

Variabili

Metodi

ClassDiagram

Ereditarietà

Incapsulamento

Polimorfismo

Associazioni

Package

Overriding

Tipi di Classi

Eccezioni

Indice 2

Liste

Alberi

Stack

Code

StruttureDati

Gerarchiadei Contenitori

ClassiParametriche

File

Mappe

Class Diagram

I diagrammi delle classi (Class Diagram) sono uno dei tipi di diagrammi UML utilizzati per rappresentare graficamente la logica che usano specifici linguaggi di programmazione: ne è un esempio Java, il quale utilizza la programmazione ad oggetti.Il diagramma delle classi i quali consente di creare e desrivere um sostema con tipi di entità, con delle loro caratteristiche e eventuali relazioni tra di essi.Nello specifico possiamo distinguere:

Classi

Attributi

Metodi

Costruttori

Associazioni

Associazioni

Indice

Classi

L'elemento principale dei diagrammi delle classi è la classe, la quale ha il suo rispettivo elemento in Java. Una classe rappresenta un'entità (istanze), nel caso particolare dette oggetti; il nome della classe indica ciò che la descrive.Ogni classe è costituita da un insieme di attributi (le caratteristiche, ovvero le variabili memorizzate in essa) e metodi (che descrivono le operazioni che può eseguire).

Nome Classe
Attributi
Metodi()

Il simbolo grafico che rappresenta le classi UML è un rettangolo suddiviso in tre scomparti, rispettivamente dedicati al nome della classe, agli attributi e alle operazioni.

Attributi

Come abbiamo detto, ogni classe è costituita da un insieme di attributi che specificano le sue caratteristiche, utilizzando le variabili. Esse, con il loro rispettivo tipo (int, string, boolean...), al fine di essere manipolate, hanno un'ulteriore caratteristica che specifica la loro visibilità all'interno del sistema di classi. Questa specifica è fondamentale quando si verifica il fenomeno dell'ereditarietà e polimorfismo.

Nome Classe
Attributi
Metodi()

Nel simbolo grafico delle classi UML gli attributi sono indicati nel secondo rettangolo dedicato ad essi.

Visibilità delle Variabili

Possiamo osservare il comportamento dei diversi tipi di visibilità, all'interno delle classi e metodi corrispondenti, grazie ad due tabelle riassuntive:

Private, Public,Protected

UML
Metodi
Altre Classi
Sottoclassi
Nome

Private

Public

Protected

UML
Metodi
Classi
Attributi
Nome

NOME

nome

Final

Static

costante

riferito alla classe

esiste a priori dall'istanza

NO overriding

non ha classi figlie

Finale e Static

No overriding

Metodi

Come già specificato, ogni classe è caratterizzata anche dai metodi, i quali costituiscono delle azioni che possono essere svolte da essa. In Java, ogni metodi è un raggruppamento di codice che può essere utilizzato (richiamandolo) per determinate azioni al fine del corretto funzionamento del programma.Date le caratteristiche di una classe, è importante ricordare il metodo "Costruttore" e tre metodi convenzionali, ovvero get, set e toString.

Nome Classe
Attributi
Metodi()

Nel simbolo grafico delle classi UML i metodi sono indicati nel terzo rettangolo dedicato ad essi.

Costruttori

Tra i metodi di una classe, va analizzato nello specifico il costruttore, ovvero quel metodo di una classe il cui compito è proprio quello di creare nuove istanze, nuovi elementi resi disponibili per l'interazione con il resto del sistema.Sotto forma di codice, quando vengono definiti, ai costruttori vengono passati tutti gli attributi in modo che poi ad essi possa essere assegnato un valore.

Nome Classe
Attributi
CostruttoreMetodi()

Insieme ai metodi, nel simbolo grafico delle classi UMLi costruttori sono indicati nel terzo rettangolo.

Associazioni

Due classi possono essere legate da associazioni che rappresentano i legami che possono sussistere fra gli oggetti delle classi associate. Esistono diversi tipi di relazioni e ogniuna può essere rapresentata in UML con delle linee o frecce:

Nome
Freccia

Ereditarietà/ Classi Astratte

Aggregazione

Molteplicità

Interfacce

Dipendenza

Composizione

Significato

estende

associazione semplice

implementa

dipende da

compone

è un aggregato di

Incapsulamento

Con il termine Incapsulamento si intende la possibilità di un linguaggio di programmazione di accorpare metodi e proprietà all’interno di un unica area, ovvero all’interno dell’oggetto. In questo modo il nostro programma verrà ridotto a tante piccole parti, ognuna che incapsula delle funzionalità.Infatti, tramite l’incapsulamento se volessimo aggiungere o modificare qualche funzionalità, basterà modificare soltanto la classe specifica.

Indice

Ereditarietà

Nella programmazione ad oggetti, con ereditarietà si fa riferimento alla capacità di poter “ereditare” tutti i metodi e le proprietà in una classe da un'altra. Di conseguenza, si creano una classe figlia, chiamata sottoclasse, e la classe madre, chiamata superclasse.

Nel codice, Java prevede che si scriva "extends" dopo la definizione del nome di una classe figlia, come mostrato di seguito.

Indice

Polimorfismo

Il polimorfismo, come definisce la parola stessa, è l’abilità, per esempio da parte di una variabile, di poter essere vista come tipi diverse: è l'esempio di un semplice numero. La stessa caratteristica, però, può essere associata alle classi: grazie al polimorfismo si possono creare delle variabili, che fanno riferimento a istanze di classi diverse. Un esempio è quello rappresentato.

Indice

Overriding

L'overriding è un'operazione strettamente collegata all'ereditarietà, poichè risulta essere la riscrittura, all'interno delle classi, di un metodo ereditato. Qundi, la classe nuova che eredita quella esistente può avere metodi che possono essere riscritti per le nuove necessità, modificandone il corpo.

Indice

Package

I packages sono raccolte di classi e metodi; istanziando una classe si crea un oggetto, con dei metodi associati, che lo si potrà riutilizzare senza dover riscrivere il codice per le stesse funzionalità.

La struttura dei packages è definita ad albero e con uno schema simile a quello usato per classi e sottoclassi; Java mette a disposizione un package di default ma si può integrare secondo le nostre esigenze, grazie all'uso ulteriore dalle librerie.

Indice

Tipi di Classi

In Java esistono diversi tipi di classe che vengono utilizzati per diversi scopi, al fine di rendere il linguaggio di programmazione più elastico. Questi sono:

Astratte

In Java per ogni tipo primitivo esiste una corrispondente classe Wrapper, le quali esistono epr trasformare (boxing) i diversi tipi in oggetti che possono essere maipolati come tali grazie a metodi previsti dal linguaggio di programmazione; di conseguenza, grazie ad essi, il codice diventa più leggibile.

A classe Math contiene metodi per eseguire operazioni numeriche di base come l'esponenziale elementare, il logaritmo, la radice quadrata e le funzioni trigonometriche.Invece, la classe Random viene utilizzata per generare un flusso di numeri casuali necessari per la corretta risoluzione del problema.

Le classi Astratte in Java sono utilizzate per poter dichiarare caratteristiche comuni fra classi: essa costituisce la classe base, avente attributi e metodi. La classe astratta non può essere instanziata, come accade per le interfacce.

Le Enumerazioni sono delle strutture presentate come delle classi che però non possono essere istanziate, ma soltanto attributi che costituiscono un'elenco di stati associati ad un oggetto. Possono essere manipolate con metodi esterni ad essa.

Interfacce

Le Interfacce sono delle classi analoghe a quelle astrate, ma non possono avere attributi riferiti a se stessi, bensì soltanto metodi per operare sulle sottoclassi.

Enumerazioni

Wrapper

Math e Random

Indice

Eccezioni

Le eccezioni sono un modo chiaro e strutturato per gestire gli errori, senza confondere il codice con tante istruzioni di controllo dell'errore. Quando si verifica una situazione di errore viene lanciata una eccezione, che se viene in seguito catturata permette di gestire l'errore.Nel codice questo avviene grazie alla funzione "catch()", nella quale vi è un corpo che viene eseguito nel caso venga rilevato l'errore.

Indice

Liste

Nodo
- info: int - next: Nodo
+ Nodo(int) +get()+set()

Le Liste sono un tipo di struttura dati basate su una successione di informazioni legate tra loro da associazioni, le quali non posseggono un'accesso posizionale, come accade per gli array.Una lista è caratterizzata da elementi chiamati nodi caratterizzati da due informazioni essenziali: una variabile che esprime la loro entità, (info), e una variabile next che costituisce il nodo successivo nella lista. Nello specifico, le classi prevedono queste variabili e metodi di default:

Lista
- testa: Nodo
+ Lista() + setesta)+ getesta()

Metodi sulle Liste

Come su tutte le strutture dati, si possono applicare diverse operazioni di stampa, ricerca di un nodo o la sua cancellazione, quindi l'inserimento di esso in testa o in coda.

Esempio nodo:

info

next

null

Osservando la struttura grafica di una lista, si possono individuare un nodo iniziale detto testa, ed uno finale che completa la lista, chiamato coda, il quale è sempre di tipo "null" poichè, per l'appunto, la lista deve avere una fine definita.L'inserimento di un nodo nella lista può essere previsto sia all'inizio, quindi con la sostituzione della testa, o alla fine inserendo un nuovo nodo tra l'ultimo e il valore null finale.

Stack

Gli Stack sono una struttura dati che lavora con la politica LIFO (Last In First Out), secondo il quale il primo oggetto che viene inserito in esso è l'ultimo ad uscire.Una classe stack è caratterizzata da un singolo attributo che costituisce la struttura vera e propria dello stack, il vettore, e da alcuni metodi per la sua manipolazione, ovvero push(), pop(), top() e isEmpty().

Stack
- Elementi: Vector
+ push() + top()+ pop() + isEmpty()

n-1

Per capirne la logica, lo stack è solitamente rappresentato in orizzontale con una numerazione da 0 a n-1 elementi inseriti.

Code

Le Code sono un'ulteriore struttura dati che invece lavora secondo la politica FIFO (First In First Out), secondo il quale il primo oggetto che viene inserito in esso è anche il primo ad uscirne.Come gli stack, anche le code sono caratterizzate dal singolo attributo vettore e dai metodi per la manipolazione, che però vengono chiamati diversamente: infatti vi sono enqueue(), "accoda", dequeue() "in uscita" e i soliti top() e isEmpty().

Coda
- Elementi: Vector
+ enqueue()+ dequeue()

n-1

Allo stesso modo vi è la loro rappresentazione grafica orizzontale

Alberi

radice

La struttura dati degli Alberi è più complessa rispetto alle altre poichè al suo interno è capace di contenere gli elementi in modo ordinato, seguendo dei ragionamenti logici, ciò che non accade negli stack o le code nei quali gli elementi sono semplicemente impilati tra loro.Un albero è costituito da tanti elementi, chiamati nodi che sono collegati tra loro grazie a delle associazioni. Così facendo si crea una struttura gerarchica nella quale si individuano la radice, i nodi intermedi e foglie.

nodo intermedio

foglia

Alberi

Come tutte le strutture dati anche sugli alberi possiamo effettuare diverse operazioni e osservazioni con metodi dedicati. Questi però sono applicabili soltanto agli ABR. Inoltre, per verificare la validità di questi metodi possiamo utilizzare gli stack di esecuzione, i quali ci permettono di comprendere il processo logico.

Rispetto alla profondità, l'altezza è relativa a tutto l'albero, quindi essa esprime la distanza tra la ultima foglia più bassa e la radice. Questo metodo risulta essere molto più complesso dei precedenti poichè esso dovrà confrontare l'altezza dei con quelli al fianco.

La ricerca serve, per l'appunto, a cercare uno specifico nodo nell'albero; il metodo ricerca ritorna un valore booleano per verificare eventualmente se il nodo è presente nell'albero. Come tutti i metodi aggiuntivi degli alberi, è necessario anche un metodo interfaccia a cui viene passata soltanto la radice ed eventuali informazioni.

Stampa

Esistono 3 tipi di stampa; di seguito sono riportati le stampe dei singoli:- In Order: { 1, 20, 3, 29, 10, 2, 7}, con questa stampa possiamo capire se l'albero è un ABR;- Pre Order: {10, 20, 1, 3, 29, 2, 7}; . Post Order: {1, 29, 3, 20, 7, 2, 10}.

Il metodo profondità serve per calcolare la posizione relativa al nodo centrale dell'albero, quindi la loro distanza costituita dal numero minore di associazioni per arrivare al nodo radice.

Ricerca

Profondità

Altezza

ABR

Gli ABR (Alberi Binari di Ricerca) sono degli alberi con due caratteristiche essenziali per la loro gestione. Negli ABR i singoli nodi (radice, intermedi e foglie) hanno massimo due nodi figli (Sx, Dx): quello a Sinistra dovrà essere minore del nodo padre, mentre quello Destro sarà maggiore rispetto ad esso.Con questo tipo di albero si possono creare strutture ordinate, la cui ricerca degli elementi sarà più semplice.

Mappe

Le Mappe sono un'ulteriore struttura dati utilizzata nel linguaggio Java, utili a creare delle "tabelle" nelle quali la prima colonna è occupata dalle chiavi e la seconda da un valore associato ad esse.Nelle mappe è possibile accedere ai valori solo utilizzando una specifica chiave la cui identità non si ripete mai all'interno della stessa mappa, in modo da creare associazioni ordinate.Anche per queste strutture esistono numerosi metodi previsti da Java, nonchè strutture vettoriali e cicli specifici per la loro manipolazione.

File

I File vengono utilizzati per memorizzare grandi quantità di dati sotto forma di stringhe che possono essere manipolate dai linguaggi di programmazione grazie a diversi metodi.Utilizzando un path possiamo anche modificare file già esistenti sui nostri computer, riferendoci alla directory.Nello specifico esistono le classi:- FileReader: per la lettura del file;- FileWriter: per la scrittura su di esso;- BufferedReader/BufferedWriter: per selezionare, leggere e modificare righe intere di caratteri

Classi Parametriche

Le Classi Parametriche sono tipi specifici di classi che vengono create per essere riferite o per poter contenere variabili di diverso tipo.A questo scopo vengono passati dei parametri generici che verranno poi specificati nell'istanziamento tra le freccette "<" e ">".

Questo tipo generico può anche estendere una classe predefinita di Java, ad esempio Number.Esempi di classe parametriche sono le strutture dati LinkedList, ArrayList e altre.

Gerarchia dei Contenitori

In Java, come linguaggio di programmazione ad oggetti, esiste una gerarichia tra le classi, e questa comprende anche i diversi contenitori, che possono essere così raffigurati:

Map

<<int>>

Iterable

<<int>>

Collection

<<int>>

HashMap

<<int>>

TreeMap

<<int>>

Set

<<int>>

List

<<int>>

Queue

<<int>>

Nelle PriorityQueue l'ordine di uscita varia in base alla priorità degli elementi all'interso della coda.

La Funzione Hash applica delle risoluzioni matematiche per associare un elemento ad un altro univocamente.

HashSet, TreeSet

ArrayQueue, PriorityQueue

ArrayList, LinkedList

Alberi Red&Black

Nelle TreeMap o TreeSet viene utilizzata una funzione che richiama ad un tipo di struttura molto complesso, ovvero gli Alberi Red&Black.Qeusti ultimi hanno delle caratteristiche ben precise che consentono di costituire alberi sempre bilanciati, ovvero: - sono ABR; - la radice è sempre nera, come le foglie; - le foglie sono sempre di tipo "null"; - i figli di un nodo rosso sono entrambi neri; - ogni cammino da un nodo ad una foglia nello stesso sottoalbero ha lo stesso numero di nodi neri.

13

17

11

15

null

22

null

null

null

null

null

Thank you!

Voto 10!