1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione
2 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
3 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
4 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
5 Visibilità: I modificatori di Java Classi Variabili-Metodi- Classi Default Package in cui occorrePackage in cui occorre la classe Public Ovunque Private Non previstoClasse in cui occorre Protected Non previstoPackage 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)
6 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
7 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
8 Analisi in Java Il compilatore C ostruisce 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 (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)
9 Analisi dei metodi Ogni metodo –T f (T’ i){…} invocazione fittizia è analizzato, in R, separatamente valutando una invocazione fittizia f(i) in un record: : se f è statico di classe c : se f è di istanza dell’oggetto l di classe c trasmissione dei parametriLa trasmissione dei parametri della fittizia f(i): Aggiunge al frame del record corpoLa 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;
10 Analisi dei metodi -continua Tutte le strutture ricevono un tipo: Espressioni: –Path Id –Path Id: R(Path Id); –new C() –new C(): C stesso; –Path Id(e a ) –Path Id(e a ): T se 1) R(Path Id)=T’->T, 2) e a ha tipo T”<T’, e1 op e2 –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 x = e: V se x ha tipo T, ed e ha tipo T’ tale che T’<T … C1;C C1;C: V se C1 ha tipo V e C ha tipo V Programma: V se tutte le strutture hanno tipo definito
11 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)
12 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)