



Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Programmazione: dai record agli oggetti in java
Tipologia: Dispense
1 / 7
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




(trao in parte dal sito html.it)
Un record e’ un aggregato di da non omogenei (eterogenei o disomogenei), cioe’ di da che possono avere po diverso. Per esempio, e’ possibile aggregare da di po INT con da di po FLOAT o altro. Il record e’ quindi un dato stru urato alternavo agli array. Gli array, infa(, sono da struura ma aggregano da dello stesso po. Quando ulizzo un record? Ogni volta che devo memorizzare da che hanno signi,cato solo se aggrega tu( assieme, quindi li de,nisco assieme come un record. Per esempio se devo memorizzare il peso dei giocatori, posso ulizzare un record che contenga il cognome e il peso. La dichiarazione di un record richiede due passaggi: Prima si dichiara come e’ de,nito il record che si intende ulizzare, successivamente con un’altra istruzione si dichiara l’uso della variabile a cui si assoceranno i valori del record. Il record che vado a dichiarare ha due “campi”: cognome e peso.
Vediamo come si scrive il codice per la de,nizione e dichiarazione di un record (nell’esempio de,nisco un record Giocatore e dichiaro due variabili di quel po):
class Giocatore{ String cognome; float peso; }
Giocatore elemento = new Giocatore();
Giocatore avversario = new Giocatore();
In questo esempio ho dichiarato elemento e avversario come due record di po Giocatore. Quando voglio assegnare dei valori ai campi di “ elemento” dovro’ usare la “dot notaon” (notazione a punto), e scrivere:
elemento.cognome = ”Rossi”; elemento.peso = 77.5;
Per accedere ai campi di un record devo sempre usare la dot notaon. Quindi se “avversario” fosse il fratello di “elemento” posso scrivere:
avversario.cognome = elemento.cognome; avversario.peso = 68.6;
Posso usare i valori di un record come si usa per le variabili semplici. Per esempio se devo fare un confronto per oenere una previsione di vioria fra i giocatori considerando il peso un vantaggio:
String previsione = “forse vince avversario”; if (elemento.peso > avversario.peso){ previsione = “forse vince elemento”; }
Le tabelle sono un dato struurato che si o(ene come aggregato di array e record.
Gli array, come ci e’ noto, organizzano elenchi di da (e.g. un elenco di interi) tu( dello stesso po.
Se de,niamo un array di po record oeniamo un elenco di record, cioe una tabella.
Vediamo con un esempio:
De,niamo il record Giocatore come in precedenza (ma aggiungendo anche il nome):
class Giocatore{ String cognome; String nome; float peso; }
se volessimo avere una squadra di 11 giocatori possiamo ricorrere alla tabella, cioe’ ad un array di record:
Giocatore squadra[]= new Giocatore[11];
La variabile “squadra” e’ quindi un array di po “Giocatore” (che e’ un record) ma prima di poter inserire i da dei giocatori (nome, cognome, peso) bisogna completare con un passaggio. Ogni elemento di “squadra”, infa(, e’ un riferimento a Giocatore e non ha lo spazio dei da per Giocatore. Bisogna creare lo spazio di memoria per ciascun dato di po Giocatore. Un semplice ciclo permeera’ di creare tu( i “Giocatori”:
int i; for(i=0 i<11; i++){ squadra[i]= new Giocatore(); }
A questo punto la tabella e’ de,nita e ulizzabile.
Per ,nire proviamo a scrivere un il nome e il peso del giocatore numero 3:
squadra[3].nome=”Ugo”; squadra[3].peso=67.8;
Nel linguaggio Java sono presen delle librerie che agevolano la creazione e l’uso di tabelle, si traa della classe JTable. Essa permee la gesone dinamica dei da (cioe’ l’inserimento di da
public class Conto {
private double amount; private String owner;
// costruttore public Conto(String owner, double initialAmount) { this.owner = owner; this.amount = initialAmount; }
public void versamento(double qty) { amount += qty; }
public boolean prelievo(double qty) { if(amount < qty) return false; amount -= qty; return true; }
public double getAmount() { return amount; }
public String getOwner() { return owner; } }
Il costruore è una delle componen di una classe che merita una traazione accurata. Paramo
da queste due eminen de,nizioni:
Il costruore è 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 (quindi una nuova identà) viene
creato ed è reso disponibile per l’interazione con il resto del sistema.
Come nell’esempio Conto sopra riportato il costruore è spesso usato per e>euare le
inizializzazioni dello stato delle nuove istanze. In Java possono esserci molteplici costruori per una
medesima classe (ognuno con parametri di diversi) e ne esiste sempre almeno uno. Se infa( per
una data classe non viene speci,cato alcun costruore, il compilatore ne sintezza
automacamente uno senza argomen, deo costruore default.
Tra gli elemen più importan che caraerizzano il paradigma di sviluppo OOP c’è la Gerarchia.
Tenendo a mente questo fao non è di?cile convincersi di quanto il conceo di ereditarietà sia
centrale nella programmazione Object Oriented.
Si dice che una classe A è una sooclasse di B (e analogamente che B è una superclasse di A )
quando:
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 po B ed avrà a disposizione tu( i metodi
della classe B (potrà ricevere tu( i messaggi che può ricevere la classe B , usando la terminologia
delle preceden sezioni) e nel suo stato saranno presen tue le variabili che si trovano nella
super classe B.
Un esempio concreto di ereditarietà potrebbe essere il seguente, nel quale esempio intendiamo
dare una bozza di modello per un generico magazzino in cui parte dei colli sono per la vendita.
/**
quest’ulma non è previsto un costruore ‘default’ (senza argomen) la classe derivata lo dovrà
chiamare esplicitamente passandogli gli argomen necessari con la sintassi super(…) che deve
essere obbligatoriamente il primo statment del costruore della classe ,glia.
Leggendo la dichiarazione della classe Collo, dove non compare la keyword extends, potrebbe
nascere la convinzione che questa classe non derivi da nessuna “super-class”; per la verità vale la
pena di osservare che in Java ogni classe deriva da almeno una classe genitrice che, se la keyword
extends viene omessa, è per default la classe java.lang.Object, dalla quale ogni oggeo
Java eredita, per esempio, i metodi hashCode(), getClass(), toString().