Osservazioni Generali
• Struttura di programma
• Gerarchia di classi: overloading, overriding, e
dispatching
• Analisi ed esecuzione
• Modificabilità e condivisione
1
Struttura di Programma (Java)
• Classi
– Struttura stato degli oggetti
– Operazioni sugli oggetti
– Regole di accesso e visibilità
– (in Java) anche interface
• Package
– Collezione di classi per:
• Incapsulare (localizzare e condividere classi)
• Definire un nuovo spazio di nomi
2
Gerarchia di classi: overloading,
overriding
Extends:
Class C” extends C: C > C”
Ereditarietà (singola): C > C”
C” eredita l’ambiente di C
Eccetto: overrinding
overriding e overloading:
due concetti molto diversi
3
naming e visibilità
Naming (e ambienti)
tutti gli usi di nomi all’interno dei metodi
sono controllati per verificarne l’esistenza in accordo con le regole di
visibilità
quelle che abbiamo “implementato” nei vari meccanismi di naming
con alcune restrizioni che dipendono dal linguaggio (modificatori di Java)
Visibilità (spazio dei nomi):
modificatori
4
Visibilità: I modificatori di Java
Classi
Variabili-MetodiClassi
Default
Package in cui occorre Package in cui occorre
la classe
Public
Ovunque
Ovunque
Private
Non previsto
Classe in cui occorre
Protected
Non previsto
Package in cui occorre
la classe + sottoclassi
Final
Altri significati (non
ha sottoclassi)
Non modificabili - non
overriding
Static
Altri significati (non
ha superclassi)
Altri significati
(membri della classe)
5
Analisi ed Esecuzione
• Esecuzione di un programma
– Un esecutore che operi in accordo alle regole!!
• Realizzato
– Mediante: Interprete o Compilatore
» Una combinazione
» Macchina Virtuale
– Utilizzando: Macchine di linguaggi di livello più basso
• prima analisi del programma per:
– Scoprire e rimuovere banali errori sintattici
– Scoprire e rimuovere errori di uso di nomi ed espressioni
6
Analisi
• Dipende dal linguaggio
• In Java:
– Controllo dei nomi (Path Id):
• Tutti i nomi usati siano definiti
– Controllo dei tipi:
• Tutte le espressioni abbiano tipo
compatibile con l’uso dell’espressione
• Type checking statico
7
Analisi in Java
• Il compilatore
Costruisce delle tabelle R che corrispondono a:
• A: Ambiente delle classi (con Frames di statiche e istanza, Ambienti metodi
statitici e di istanza)
• Hc: Frames = template per oggetti di classe C (lo troviamo in A stesso)
• S: record di attivazione = template invocazioni nello stack
• La tabella A
come r (classi) ma contiene tipi invece di valori:
– Gli identificatori hanno un tipo (primitivo o nome di classe)
– Tipo apparente: definito dalla dichiarazione
» R(Id)=T se T Id (variabile)
» R(Id)=T’->T se T Id(T’ x){…} (metodo)
8
Analisi dei metodi
• Ogni metodo
– T f (T’ i){…}
è analizzato, in R, separatamente valutando una invocazione
fittizia f(i) in un record:
• <c, emptyframe()> : se f è statico di classe c
• <l, emptyframe()> : se f è di istanza dell’oggetto l di classe c
• La trasmissione dei parametri della fittizia f(i):
• Aggiunge <i,T’> al frame del record
• La valutazione del corpo calcola in accordo alle regole:
» Accesso oggetto classe C: template per oggetti di Hc
» Accesso parametro di metodo: template del record S
» Accesso locale metodo: template frame locali di S
• l’invocazione fittizia f(i) ha tipo T’’’<T;
9
Analisi dei metodi -continua
• Tutte le strutture ricevono un tipo:
• Espressioni:
– Path Id: R(Path Id);
– new C(): C stesso;
– Path Id(ea): T se 1) R(Path Id)=T’->T , 2) ea ha tipo
T”<T’,
– Invocazioni di e1 op e2 primitivi: T se op ha tipo
T1xT2 ->T ed e1 ha tipo T1”<T1 ed e2 ha tipo
T2”<T2
• Comandi:
• x = e: V se x ha tipo T, ed e ha tipo T’ tale che T’<T
• …
• C1;C: V se C1 ha tipo V e C ha tipo V
• Programma: V se tutte le strutture hanno tipo definito
10
Modificabilità e Condivisione
Gli oggetti di una classe possono essere:
• Modificabili: hanno operazioni che modificano valori del loro stato
• Non
modificabili: esempio, le stringhe
Un oggetto è condiviso
• se può essere raggiunto da due o più entità
• se è modificabile, le modifiche si riflettono su tutte le entità
Effetti laterali (all’esterno) in un metodo
• attraverso i parametri (in Java solo per valori di tipo oggetto)
• può modificare variabili di istanza e variabili (statiche)
11
Java e affidabilità
Affidabilità = Protezione da errori a tempo di esecuzione
è garantita in Java da :
• controllo statico dei nomi
a run time non è possibile tentare di accedere un nome non definito
• controllo statico dei tipi
a run time non si possono verificare errori di tipo (ma...)
• la presenza del garbage collector (run time)
non è possibile tentare di accedere oggetti non più presenti nella heap
• sollevamento di eccezioni (run time)
•controllo sugli indici per gli arrays
•accesso a puntatori ad oggetti vuoti (null)
•conversioni forzate di tipo (casting)
12
Scarica

Semantica Operazionale di un frammento di Java