Sei sulla pagina 1di 9

Lezione 11 programmazione in Java

Nicola Drago drago@sci.univr.it Dipartimento di Informatica Universit di Verona

Anteprima

Gestione della Memoria


Dati dinamici e statici Il passaggio di parametri per riferimento Numeri interi

Esempi di ADT

Puntatori e side effect

Numeri complessi La pila Scrivere un ADT per rappresentare una coda


2

Esercizi

Nicola Drago

Gestione della memoria


In generale le variabili sono allocate in 3 possibili aree:
Area Dati Stack Heap

Java alloca le variabili principalmente nello stack, di conseguenza quando un metodo/funzione finisce le variabili vengono eliminate.

Nicola Drago

Gestione della memoria


class Triangolo {

STACK
Int base Int altezza Main (...) Int b = 20 Int a = 10 feneProgramma

double area(int base, int altezza) { return((base * altezza) / 2 ); } public static void main(String args[]){ int a = 10; int b = 20; System.out.println(area(a,b)); } }
Nicola Drago

...

Gestione della memoria


In generale le variabili sono allocate in 3 possibili aree:
Area Dati Stack Heap

Java pu allocare anche variabili nellHEAP ovvero in unarea dinamica. Lo Heap in generale non ha problemi di dimensioni. Java al contrario di altri linguaggi, possiede un meccanismo di garbage collection automatico, non necessita il recupero della memoria dallo HEAP
Nicola Drago 5

Gestione della memoria


In generale le variabili sono allocate in 3 possibili aree:
Area Dati Stack Heap

Java alloca le variabili nellHEAP tramite loperatore new (come la maggior parte degli altri linguaggi). In genere (ma non sempre) le variabili puntatore sono dichiarate tramite le []. Di conseguenza i vettori e tutti i tipi classi sono allocati dinamicamente nellHEAP!
Nicola Drago 6

Passaggio di parametri per riferimento


class Triangolo { double area(int[] base, int[] altezza) { base[0] = 1; return((base[0] * altezza[0]) / 2 ); } public static void main(String args[]){ int[] b = new int[1]; int[] h = new int[1]; b[0] = 10; h[0] = 20; System.out.println("area = " + area(b,h)); System.out.println("base = " + b[0]); System.out.println("altezza = " + h[0]); } }
Nicola Drago

Passaggio di parametri per riferimento


STACK HEAP

...
20
Int h [ ] Int b [ ] feneProgramma

... ...
8

...

10

Nicola Drago

Passaggio di parametri per riferimento


class Triangolo { double area(int[] base, int[] altezza) { base[0] = 1; return((base[0] * altezza[0]) / 2 ); }

Nicola Drago

Passaggio di parametri per riferimento


STACK
Int [ ] base Int [ ] altezza Main (...) Int h [ ] Int b [ ] feneProgramma

HEAP

...
20

... ...
10

...

Nicola Drago

Passaggio di parametri per riferimento


class Triangolo { double area(int[] base, int[] altezza) { base[0] = 1; return((base[0] * altezza[0]) / 2 ); } public static void main(String args[]){ int[] b = new int[1]; int[] h = new int[1]; b[0] = 10; h[0] = 20; System.out.println("area = " + area(b,h)); System.out.println("base = " + b[0]); System.out.println("altezza = " + h[0]); } }
Nicola Drago

11

Passaggio di parametri per riferimento


STACK HEAP

...
20
Int h [ ] Int b [ ] feneProgramma

... ...
12

...

Nicola Drago

ADT numeri interi


Costruire un ADT che rappresenti un numero intero (simile al tipo Integer). Devono essere implementati i seguenti metodi: Costruttori
Vuoto Da intero

void setValue da intero int intValue() restituisce un int

Nicola Drago

13

Passaggio di parametri per riferimento


public class MyInt { int number; public int intValue() { return (number); } public void setValue(int i) { number = i; } public MyInt() { number = 0; } public MyInt(int i) { number = i; } } Nicola Drago
14

ADT numeri interi


Scrivere una classe TEST per provare ADT intero preparato. Utilizzare il nuovo tipo intero per calcolare larea allinterno di una funzione per calcolare larea del triangolo.

Nicola Drago

15

ADT numeri interi puntatori


class TestInt { static int area(MyInt base, MyInt altezza) { base.setValue(1); return ((base.intValue() * altezza.intValue())/ 2); } public static void main(String args[]){ MyInt b = new MyInt(10); MyInt h = new MyInt(20); System.out.println("area = " + area(b,h)); System.out.println("base = " + b.intValue()); System.out.println("altezza = " + h.intValue()); } }
Nicola Drago 16

ADT numeri interi


Scrivere una classe TEST per provare ADT intero preparato. Utilizzare il nuovo tipo intero per calcolare larea allinterno di una funzione per calcolare larea del triangolo. Il metodo setValue() modifica il contenuto in una cella DINAMICA (dentro allo HEAP) e le modifiche hanno ripercussione su tutto il programma.
Nicola Drago 17

ADT pila
Costruire un ADT che rappresenti una pila (Stack) di numeri interi. (tipo int).

20

... ...
Nicola Drago 18

10

ADT pila
Costruire un ADT che rappresenti una pila (Stack) di numeri interi. (tipo int). Devono essere implementati i seguenti metodi: Costruttori
Vuoto Da intero rappresenta la dimensione della pila int pop() restituisce lelemento in cima alla pila int top() restituisce lelemento in cima alla pila void push(int) inserisce un elemento nella pila boolean empty() vero se la pila vuota boolean full() vero se la pila piena
19

Nicola Drago

ADT pila
Consiglio:
Si valuti lutilizzo di un array ( [ ] ) come struttura dati per immagazzinare i gli interi della pila. Si valuti la possibilit ampliare la pila in fase di esecuzione qualora venga saturato larray.

Scrivere una classe TEST per provare ADT pila preparato. Documentare tramite JAVADOC tutti i metodi della classe pila.
Nicola Drago 20

ADT numeri complessi


Costruire un ADT che rappresenti un numero complesso. Devono essere implementati i seguenti metodi: Costruttori e void setValue
Vuoto Da 1 intero (parte reale) Da 2 interi (parte reale e parte immaginaria)

int reValue() restituisce un int int imValue() restituisce un int void print() stampa a video i 2 numeri void sum(complex c) somma un complesso void sub(complex c) somma un complesso void mul(complex c) somma un complesso int mod() restituisce il modulo del numero complesso
21

Nicola Drago

ADT coda
Costruire un ADT che rappresenti una coda (FIFO) di numeri interi. (tipo int). Devono essere implementati i seguenti metodi: Costruttori
Vuoto Da intero rappresenta la dimensione della coda int extract() restituisce lelemento in cima alla coda int top() restituisce lelemento in cima alla coda void insert(int) inserisce un elemento nella coda boolean empty() vero se la coda vuota boolean full() vero se la coda piena
22

Nicola Drago

ADT coda
Costruire un ADT che rappresenti una coda (FIFO) di numeri interi. (tipo int).

20

...

Nicola Drago

23

ADT coda
Costruire un ADT che rappresenti una coda (FIFO) di numeri interi. (tipo int).

Nicola Drago

24

ADT coda
Costruire un ADT che rappresenti una coda (FIFO) di numeri interi. (tipo int). Devono essere implementati i seguenti metodi: Costruttori
Vuoto Da intero rappresenta la dimensione della coda int extract() restituisce lelemento in cima alla coda int top() restituisce lelemento in cima alla coda void insert(int) inserisce un elemento nella coda boolean empty() vero se la coda vuota boolean full() vero se la coda piena
25

Nicola Drago