Visualizzazione post con etichetta pisa. Mostra tutti i post
Visualizzazione post con etichetta pisa. Mostra tutti i post

martedì 21 ottobre 2008

Pisa, ottobre 2008

Festa protesta, voce che contesta!
Sarà la finanziaria o sarà la riforma a tagliarci le gambe?
Mobilitazione di massa!

mercoledì 27 agosto 2008

Appunti di Metodologie di programmazione (3): Lo stato

Ambiente delle classi ρ: contiene le classi dichiarate prima dell’inizio dell’esecuzione


ρ è una funzione da identificatori di classe a descrizioni di classe

ρ : Cenv = Id -> Cdescr

Cdescr = Id * Frame * Menv * Frame * Menv
Descrizione di classe: superclasse * variabili statiche * metodi statici * variabili istanza * metodi istanza

NB: il costruttore (sequenza di assegnamenti) viene aggiunto ai metodi istanza

Class_decl := class Id extends Id {
Static_var_decl_list
Static_meth_decl_list
Inst_var_decl_list
Inst_meth_decl_list
Costruttore }


Frame ϕ

Il frame è una tabella (estendibile e mutabile) che mantiene associazioni fra identificatori (di variabili) e valori (interi, booleani oppure locazioni (puntatori ad oggetti))

Operazioni definite sui frame:
• un frame ϕ:Frame viene creato vuoto (newframe())
• l’operazione bind(ϕ, i, v) estende ϕ inserendo l’associazione tra i e v
• l’operazione update(ϕ, i, v) modifica in ϕ l’associazione per i (che deve esistere)
• l’operazione defined(ϕ, i) dice se ϕ contiene un’associazione per i
• per ottenere il valore di una variabile, si applica il frame all’Id


Ambiente di metodi μ

μ è una funzione da identificatori di metodo a descrizioni di metodo
μ : Menv = Id -> Mdescr

Mdescr = Idlist * Blocco * ( Loc | Id )
Descrizione di metodo: parametri formali * corpo del metodo * puntatore a oggetto o nome di classe

Method_decl := Id (Idlist) Blocco

Operazioni sugli ambienti di metodi e di classi:
• cbind((ρ:Cenv), (i:Id), (c:Cdescr)) estende ρ associando ad i il valore c
• cdefined(ρ:Cenv, i:Id) dice se ρ è definita per i
• mbind((μ:Menv), (i:Id), (m:Mdescr)) estende μ associando ad i il valore m
• mdefined(μ :Menv, i:Id) dice se μ è definita per i
• instantiate((μ:Menv), (l:Loc)) crea un nuovo ambiente μ1 diverso da μ perché tutte le descrizioni di metodi contengono l’oggetto l


Heap ζ: contiene gli oggetti (istanze di classi)

ζ è una funzione da locazioni a descrizioni di istanza (oggetto)
ζ : Heap = Loc -> Odescr

Odescr = Id * Frame * Menv

Descrizione di istanza: classe * variabili di istanza * metodi di istanza


Operazioni sullo heap:
• newheap() genera una heap vuota
• newloc(ζ) genera una nuova locazione in ζ
• hbind((ζ:Heap), (l:Loc), (o:Odescr)) estende ζ associando ad l il valore o

NB:
• un oggetto viene creato con l’espressione new Id
• genera il valore o:Odescr a partire dalla classe Id
• l = newloc(ζ)
• hbind((ζ:Heap), (l:Loc), (o:Odescr))
• restituisce l


Pila di attivazioni σ: per la valutazione dei metodi, simile alla pila dei record di attivazione nei linguaggi tradizionali

σ è una pila di records di attivazione di metodi
σ : Astack
Astack = Stack (Record)

Record = ( Id | Loc ) * Stack(Frame)
record di attivazione: oggetto o classe a cui il metodo appartiene * pila di frames (blocchi annidati)

Operazioni sulle pile (record, frame):
• emptystack() genera una pila vuota
• top((π:Stack(x)) restituisce l’elemento di tipo x in testa a π
• pop((π:Stack(x)) modifica π eliminando l’elemento in testa
• push((π:Stack(x),(e:x)) modifica π inserendo l’elemento e in testa
• empty((π:Stack(x)) verifica se π è vuota


[Fonte]

Appunti di Metodologie di programmazione (2): Information-hiding

Decomposizione > Astrazione

1. Linguaggi alto livello: costrutti semplici invece di linguaggio macchina
2. Astrazione attraverso parametrizzazione: parametri al posto di dati, permette di astrarre il codice dalle infinite computazioni che eseguire, eventualmente con parametri diversi
3. Astrazione attraverso specifica: si astrae dal COME e si considera solo il COSA, potendo così cambiare quest’ultimo in modo trasparente a tutto il resto; la specifica è data attraverso commenti e parole chiavi

2 e 3 permettono di definire:
• Astrazione procedurale: separazione tra definizione di un metodo e sue chiamate, permette di aggiungere nuove operazioni e descriverne proprietà
• Astrazione sui dati: permette di aggiungere nuovi tipi di dati e relative operazioni senza preoccuparsi dell’implementazione
• Iterazione astratta: permette di iterare sugli elementi di una collezione senza preoccuparsi di come sono stati ottenuti, astraendo così dal flusso dei dati
• Gerarchie di tipo: consiste nel raccogliere in famiglie e sottofamiglie i tipi che condividono operazioni astraendo le differenze


[Fonte]

Appunti di Metodologie di programmazione (1): Analisi statica

Analisi statica
(a tempo di traduzione, nella fase di interpretazione)


• Localizzazione degli errori
• Controllo dei tipi
• Risoluzione dei nomi

NB: in Java controlla solo i tipi APPARENTI, i tipi EFFETTIVI sono noti solo a tempo di esecuzione; in altre parole garantisce solo che il tipo apparente sia SUPERTIPO del tipo effettivo: casting, dispatching dei metodi, ecc. sono risolti solo a run-time


[Fonte]