Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Programmazione: dai record agli oggetti in java, Dispense di Informatica

Programmazione: dai record agli oggetti in java

Tipologia: Dispense

2018/2019

In vendita dal 12/12/2019

rick7
rick7 🇮🇹

5

(1)

3 documenti

1 / 7

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
DAI RECORD AGLI OGGETTI IN JAVA
(tra%o in parte dal sito html.it)
I RECORD
Un record e’ un aggregato di da8 non omogenei (eterogenei o disomogenei), cioe’ di da8 che
possono avere 8po diverso. Per esempio, e’ possibile aggregare da8 di 8po INT con da8 di 8po
FLOAT o altro.
Il record e’ quindi un dato stru)urato alterna8vo agli array. Gli array, infa(, sono da8 stru%ura8
ma aggregano da8 dello stesso 8po.
Quando u8lizzo un record? Ogni volta che devo memorizzare da8 che hanno signi,cato solo se
aggrega8 tu( assieme, quindi li de,nisco assieme come un record. Per esempio se devo
memorizzare il peso dei giocatori, posso u8lizzare 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 u8lizzare, 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 8po):
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 8po Giocatore. Quando
voglio assegnare dei valori ai campi di “elemento” dovro’ usare la “dot nota8on” (notazione a
punto), e scrivere:
elemento.cognome = ”Rossi”;
elemento.peso = 77.5;
Per accedere ai campi di un record devo sempre usare la dot nota8on. 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 o%enere una previsione di vi%oria fra i giocatori considerando il peso un vantaggio:
pf3
pf4
pf5

Anteprima parziale del testo

Scarica Programmazione: dai record agli oggetti in java e più Dispense in PDF di Informatica solo su Docsity!

DAI RECORD AGLI OGGETTI IN JAVA

(trao in parte dal sito html.it)

I RECORD

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

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

Costruttori

Il costruore è una delle componen di una classe che merita una traazione accurata. Paramo

da queste due eminen de,nizioni:

  • “Una classe è una collezione di uno o più ogge( contenen un insieme uniforme di aribu e servizi, insieme ad una descrizione circa come creare nuovi elemen della classe stessa” (E. Yourdan)
  • “An object has state, behavior, and identy” (G. Booch)

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.

Definizione di ereditarietà

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:

  • A eredita da B sia il suo stato che il suo behavior (comportamento)
  • e quindi un’istanza della classe A è ulizzabile in ogni parte del codice in cui sia possibile ulizzare una istanza della classe B.

Extends, estendere (o derivare da) una classe in Java

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.

Esempio di ereditarietà in Java

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.

/**

  • Collo è la classe "base" */ public class Collo {

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