26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Universita di Camerino
If a cascata, switch, operatori logici
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Progettazione Fase di progettazione di unapplicazione Fase di implementazione.
Linguaggi Regolari e Linguaggi Liberi
12/11/2004Laboratorio di Programmazione - Luca Tesei1 Caratteri – Input da Console Il tipo char Input dallo standard input.
3/12/2004Laboratorio di Programmazione - Luca Tesei1 Sequenze di lunghezza variabile ArrayList Operazioni Ricerche.
5/11/2004Laboratorio di Programmazione - Luca Tesei1 Esercizi Su Progettazione e Implementazione di classi.
29/10/2004Laboratorio di Programmazione - Luca Tesei1 Metodi e variabili istanza Definizione e chiamata di metodi Uso delle variabili istanza Documentazione.
9/11/2004Laboratorio di Programmazione - Luca Tesei1 Tipi numerici di base - Costanti Interi e decimali Definizione di costanti.
22/10/2004Programmazione e Laboratorio di Programmazione – Luca Tesei1 Laboratorio – Primo Impatto Scrivere un semplice programma I primi concetti.
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
29/11/2004Laboratorio di Programmazione - Luca Tesei1 Ancora sulla progettazione/Pacchetti Concetti di coesione/accoppiamento/coerenza Uso dei package.
26/11/2004Laboratorio di Programmazione - Luca Tesei1 Input/Output Redirecting, scomposizione dellinput, uso di file.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
Massa Laura Mela Enrica
1 Semantica Operazionale di un frammento di Java: lo stato.
Semantica Operazionale di un frammento di Java: lo stato
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allocazione dinamica della memoria
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Soluzione Esercizio - Classe Vettore
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Oggetti e dati primitivi
Approfondimento delle classi
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
Classi e Oggetti.
Capitolo 2 Utilizzare oggetti
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
Le funzioni a tempo di esecuzione
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
Programmazione in Java
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Ereditarietà e Polimorfismo
Java Contardi Carlo A.S. 2008/09.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
11/11/2004Laboratorio di Programmazione - Luca Tesei1 Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Libreria standard.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Programmazione ad oggetti
30/11/2004Laboratorio di Programmazione - Luca Tesei1 Interfacce e Polimorfismo.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java

26/10/2004Laboratorio di Programmazione - Luca Tesei2 Usare e costruire oggetti Gli oggetti sono entità di un programma che si possono manipolare invocando i metodi System.out oggetto della classe PrintStream println(String s) metodo della classe PrintStream System.out.println(Hello, World!); invocazione del metodo println sulloggetto System.out passando come parametro loggetto String Hello, World!

26/10/2004Laboratorio di Programmazione - Luca Tesei3 Interfaccia Pubblica di una classe Specifica cosa si può fare con gli oggetti che si creano da essa Contiene tutti i campi e i metodi public definiti allinterno della classe Rappresenta il contratto della classe: cosa si impegna a fare È la candidata naturale a documentazione della classe Le classi standard fornite con la SDK hanno la documentazione sullinterfaccia pubblica

26/10/2004Laboratorio di Programmazione - Luca Tesei4 Application Program Interface A.P.I. E la documentazione riguardande le interfacce pubbliche di tutte le classi (e altro) fornite con la SDK Online sul sito della sun (link alle API delle varie distribuzioni): Scaricabile anche come.zip per averlo in locale su

26/10/2004Laboratorio di Programmazione - Luca Tesei5 Esempio: la classe String Linterfaccia pubblica della classe String specifica lesistenza di un metodo di nome length int length() Returns the length of this string Restituisce un numero intero ( int ) che rappresenta la lunghezza System.out.println(Hello, World!.length()); Stampa 13, il numero di caratteri nella stringa

26/10/2004Laboratorio di Programmazione - Luca Tesei6 Esercizio Trovare la documentazione della classe PrintStream Trovare la documentazione della classe String Cercare di interpretare, per quanto possibile, tutte le sezioni della documentazione Estendere Hello.java usando qualche metodo nuovo sia della classe String che della classe PrintStream

26/10/2004Laboratorio di Programmazione - Luca Tesei7 Creazione di Oggetti System.out è già creato automaticamente dalla JVM Hello, World! come oggetto della classe String viene creato intrinsecamente visto che è inserito nel testo del programma Ma il modo principale per creare oggetti è quello di usare loperatore new new Rectangle(5,10,20,30) Crea un oggetto della classe Rectangle

26/10/2004Laboratorio di Programmazione - Luca Tesei8 Loggetto creato Rectangle è una classe inclusa nella SDK. Nelle API: Rectangle(int x, int y, int width, int height) Constructs a new Rectangle whose top-left corner is specified as (x, y) and whose width and height are specified by the arguments of the same name.

26/10/2004Laboratorio di Programmazione - Luca Tesei9 Costruzione Il processo di creazione di un nuovo oggetto Dopo la parola chiave new va inserito specificato il costruttore per loggetto I costruttori sono metodi speciali che –Hanno come nome lo stesso nome della classe (in questo caso Rectangle ) –Hanno diversi parametri di costruzione Nel nostro caso abbiamo usato il costruttore, indicato nelle API, che prende 4 interi

26/10/2004Laboratorio di Programmazione - Luca Tesei10 Rectangle: il concetto

26/10/2004Laboratorio di Programmazione - Luca Tesei11 Rectangle: loggetto Heap Rectangle x y width height

26/10/2004Laboratorio di Programmazione - Luca Tesei12 Lo spazio di memoria del linguaggio Java La memoria è idealmente divisa in due sezioni: 1.Lo heap (mucchio) che contiene gli oggetti 2.Lo stack di attivazioni che contiene le variabili del programma

26/10/2004Laboratorio di Programmazione - Luca Tesei13 Lo Heap È uno spazio di memoria gestito automaticamente e completamente dalla JVM Contiene gli oggetti creati dal programma Ogni oggetto residente ha un indirizzo, o riferimento, che lo identifica univocamente e lo rende raggiungibile dal programma Gli oggetti non più riferiti da nessuna variabile vengono cancellati: lo spazio che occupano viene dichiarato libero ed è riutilizzabile

26/10/2004Laboratorio di Programmazione - Luca Tesei14 Lo Heap Rectangle x y width height Rectangle x y width height rif#2 rif#1

26/10/2004Laboratorio di Programmazione - Luca Tesei15 Lo stack di attivazioni Le variabili dichiarate nel programma sono conservate in una zona apposita di memoria Questa zona è strutturata, a differenza dello heap La struttura è una pila (stack) di attivazioni Unattivazione consiste di un particolare contesto di esecuzione Il metodo main è lattivazione principale e si trova sempre in fondo alla pila

26/10/2004Laboratorio di Programmazione - Luca Tesei16 Lo stack di attivazioni Ogni chiamata di metodo crea una nuova attivazione Allinterno di un metodo posso chiamare altri metodi e quindi le attivazioni si impilano una sopra laltra

26/10/2004Laboratorio di Programmazione - Luca Tesei17 Allinterno di una attivazione Lo spazio di memoria allinterno di una certa attivazione è anchesso strutturato come una pila Gli elementi della pila sono chiamati frame Ogni frame contiene delle associazioni fra nomi di variabili e valori delle stesse Ogni frame rappresenta un blocco di esecuzione del programma (codice tra { })

26/10/2004Laboratorio di Programmazione - Luca Tesei18 Sottoblocchi Il frame più in basso nella pila allinterno di una attivazione corrisponde al blocco principale dellattivazione Allentrata di un sottoblocco viene creato ed impilato un altro frame Sottoblocchi di sottoblocchi di sottoblocchi..... => pila di frame I sottoblocchi gestiscono la visibilità (lo scope) delle variabili (chiariremo bene in seguito)

26/10/2004Laboratorio di Programmazione - Luca Tesei19 Visibilità In ogni momento lattivazione che si trova in testa alla pila è quella in esecuzione Non cè nessun rapporto tra le variabili dello stack di frame di una attivazione con quelle di una qualsiasi altra attivazione (sia sopra che sotto nella pila) Allinterno di una attivazione lo stack di frame gestisce un certo rapporto fra le variabili di ogni frame Es: variabili con lo stesso nome in frame diversi: in ogni momento è visibile solo quella che si trova nel frame più in alto nella pila

26/10/2004Laboratorio di Programmazione - Luca Tesei20 Stack delle attivazioni Attivazione in esecuzione frame principale frame x z 7 rif#k 0 x o1 i j 3 rif#n 3 Stack dei frame

26/10/2004Laboratorio di Programmazione - Luca Tesei21 Variabili Le variabili che si trovano allinterno dei frame possono essere di due tipi: 1.Tipo base del linguaggio: int, double, char,... 2.Tipo riferimento o Tipo oggetto Le variabili del tipo 1 contengono i valori caratteristici del tipo (esempio int interi) Le variabili del tipo 2 contengono riferimenti ad oggetti che si trovano nello heap

26/10/2004Laboratorio di Programmazione - Luca Tesei22 Dichiarazione di variabili Tipo nomeVariabile; Tipo nomeVariabile = valore_iniziale; La variabile viene creata nel frame che si trova in testa alla pila dellattivazione corrente (quella in testa alla pila di attivazioni) La variabile ha come scope (contesto) il blocco in cui è dichiarata: al di fuori non esiste I parametri di un metodo, alla chiamata, sono visti come variabili che vengono create automaticamente ed inizializzate con i valori passati

26/10/2004Laboratorio di Programmazione - Luca Tesei23 Variabili int x = 13; int y; Rectangle box; x y box 13 null Attivazione corrente Frame corrente Valore di default per variabili di tipo base non inizializzate … Valore di default per variabili riferimento non inizializzate

26/10/2004Laboratorio di Programmazione - Luca Tesei24 Variabili Le variabili non inizializzate non possono essere usate fino a quando non viene assegnato loro un valore Loperatore = è lassegnamento: –x = E; –Valuta lespressione E –Controlla se il valore v ottenuto è compatibile con il tipo della variabile x –Se sì, copia v nella variabile x cancellando quello che conteneva precedentemente

26/10/2004Laboratorio di Programmazione - Luca Tesei25 Variabili riferimento Come tipo hanno il nome di una certa classe Possono contenere un riferimento ad un oggetto di quella classe (o compatibile) che risiede nello heap Non contengono loggetto, ma il riferimento Il valore lo rappresentiamo o con rif#n o con una freccia che punta alloggetto nello heap

26/10/2004Laboratorio di Programmazione - Luca Tesei26 Variabili riferimento box = new Rectangle(5,10,20,30); y = ; … x y box Rectangle x y width height HeapStack Attivazioni

26/10/2004Laboratorio di Programmazione - Luca Tesei27 Variabili riferimento Rectangle box1 = box; … x y box Rectangle x y width height HeapStack Attivazioni box1

26/10/2004Laboratorio di Programmazione - Luca Tesei28 Codice: MoveTest.java import java.awt.Rectangle; public class MoveTest { public static void main(String[] args) { Rectangle box = new Rectangle(5,10,20,30); // sposta il rettangolo di un vettore box.translate(15,25); // stampa il rettangolo spostato System.out.println(box); } Stampa: java.awt.Rectangle[x=20,y=35,width=20,height=30]

26/10/2004Laboratorio di Programmazione - Luca Tesei29 Importazione di classi Le classi fornite con la SDK sono raggruppate in pacchetti (packages) Ogni pacchetto contiene classi affini java.awt è un pacchetto che contiene classi utili per disegnare finestre e forme grafiche (awt = Abstract Windowing Toolkit) import importa una certa classe come in import java.awt.Rectangle; Oppure un intero pacchetto: import java.awt.*;

26/10/2004Laboratorio di Programmazione - Luca Tesei30 Importazioni di classi Qualunque classe che non abbiamo definito, come classe pubblica, nella stessa cartella in cui si trova il file sorgente che stiamo scrivendo risulterà sconosciuta al compilatore A meno che: –La importiamo (o importiamo tutto il pacchetto che la contiente) –Fa parte del pacchetto java.lang o java.io che viene importato automaticamente Es: String fa parte di java.lang

26/10/2004Laboratorio di Programmazione - Luca Tesei31 Stampare un oggetto La classe PrintStream ha anche un metodo println per stampare oggetti: System.out.println(new Rectangle(5,10,20,30)); Stampa: java.awt.Rectangle[x=5,y=10,width=20,height=30] La stampa è una descrizione testuale dei valori dei campi delloggetto in questione In questo esempio loggetto viene creato, stampato e poi, non avendo salvato il suo riferimento, cancellato

26/10/2004Laboratorio di Programmazione - Luca Tesei32 Tanti costruttori La stessa classe può avere più costruttori, a seconda di quanti modi ci possono essere per inizializzare i valori dei campi Ogni costruttore si diversifica in base ai tipi e alla quantità dei suoi parametri Per ogni classe esiste un costruttore di default che non prende nessun parametro ed assegna alle variabili istanza delloggetto valori di default

26/10/2004Laboratorio di Programmazione - Luca Tesei33 Costruttore di default Rectangle boxdef = new Rectangle(); boxdef Rectangle x y width height

26/10/2004Laboratorio di Programmazione - Luca Tesei34 Valori di default Per variabili numeriche ( int, float, double, byte ): 0 o 0.0 Per caratteri ( char ): carattere nullo a valore numerico -1 Per variabili riferimento: null Questi valori di default valgono solo per le variabili istanza di un oggetto, non per le variabili dei frame Se le variabili di frame non sono inizializzate il compilatore genera sempre errore se vengono usate prima di essere assegnate (per convenzione, valgono, i tipi base, e null le variabili riferimento)