1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e...

12
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione

Transcript of 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e...

Page 1: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

1

Osservazioni Generali

• Struttura di programma

• Gerarchia di classi: overloading, overriding, e dispatching

• Analisi ed esecuzione

• Modificabilità e condivisione

Page 2: 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

Page 3: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

3

Gerarchia di classi: overloading, overriding

Extends:Class C” extends C: C > C”

Ereditarietà (singola): C > C”C” eredita l’ambiente di CEccetto: overrinding

overriding e overloading: due concetti molto diversi

Page 4: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

4

naming e visibilità

Naming (e ambienti)tutti gli usi di nomi all’interno dei metodisono controllati per verificarne l’esistenza in accordo con le regole di visibilità

quelle che abbiamo “implementato” nei vari meccanismi di namingcon alcune restrizioni che dipendono dal linguaggio (modificatori di Java)

Visibilità (spazio dei nomi):modificatori

Page 5: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

5

Visibilità: I modificatori di Java

Classi Variabili-Metodi- Classi

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)

Page 6: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

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

Page 7: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

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

Page 8: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

8

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

Page 9: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

9

Analisi dei metodi• Ogni metodo

– T f (T’ i){…}

è analizzato, in R, separatamente valutando una invocazione invocazione fittiziafittizia 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 parametritrasmissione dei parametri della fittizia f(i):• Aggiunge <i,T’> al frame del record

• La valutazione del corpocorpo 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;

Page 10: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

10

Analisi dei metodi -continua

• Tutte le strutture ricevono un tipo:• Espressioni:

– Path IdPath Id: R(Path Id);– new C()new C(): C stesso;– Path Id(ePath Id(eaa)): T se 1) R(Path Id)=T’->T , 2) ea ha tipo

T”<T’,– Invocazioni di e1 op e2e1 op e2 primitivi: T se op ha tipo

T1xT2 ->T ed e1 ha tipo T1”<T1 ed e2 ha tipo T2”<T2

• Comandi:• x = ex = e: V se x ha tipo T, ed e ha tipo T’ tale che T’<T• …• C1;CC1;C: V se C1 ha tipo V e C ha tipo V

• Programma: V se tutte le strutture hanno tipo definito

Page 11: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

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)

Page 12: 1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.

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 tipia 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)