La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Classi: class Foo { public int x; public int y; public void swap (boolean z) { if (z) {int temp = x; x = y; y = temp;}; }; } Ambienti per le classi: Cenv.

Presentazioni simili


Presentazione sul tema: "Classi: class Foo { public int x; public int y; public void swap (boolean z) { if (z) {int temp = x; x = y; y = temp;}; }; } Ambienti per le classi: Cenv."— Transcript della presentazione:

1 Classi: class Foo { public int x; public int y; public void swap (boolean z) { if (z) {int temp = x; x = y; y = temp;}; }; } Ambienti per le classi: Cenv Cenv = {Ide  Menv x  x Menv} variabili di istanza: metodi: operazioni sugli oggetti  c = { , y->  },  m )> }  m ={ >

2 Oggetti: istanze di classe ogni oggetto una differente istanza: istanze differiscono per:: i valori nel frame i metodi non cambiamo Class Foo {....}; Foo obj1 = new Foo; Foo obj2 = new Foo;.... frame per obj1:  1 = {x-> , y->  } frame per obj2:  2 = {x-> , y->  } ({x-> , y->  },  m ) Heap per gli oggetti: Heap Heap = {Loc  Ide x  }

3 Valori, Classi e Oggetti: una vista grafica Class Foo {public int x; public int y; public void swap (boolean z){ if (z) {int temp = x; x = y; y = temp;}; }; } Class Fie { public int y;} } Foo oj1 = new Foo; Fiepp oj2 = new Fie; boolean b = true;.... L2 Il Nuovo Stato : Class_Env x  x Heap Foo cc Fie  fie x  x  y   foo L1 Foo  x  y  y  Fie altri frames dello stato  oj1 oj2 btt  

4 Sistema di transizioni per: Semantica dei Comandi S S com ={<  com, T com,  com }  com = { | C  Com,  ,  c   c  Cenv,   Heap }   >  { |  ,   Heap }  >  T com = { |  ,   Heap }  com = {(=),..., tutte le regole che vedremo }

5 Comandi (nuova semantica)  com >  com  com >  com  com  com >  com (Block) (StmL)  c, ,  >  exp v  (x)≠   c, ,   >  com (=)

6  exp tt  cmd >  exp tt  cmd  com >  com  exp ff  cmd >  exp ff  cmd  com >  com (if-tt) (if-ff) Condizionale

7  exp ff >  exp ff  com ,  >  com  exp tt  cmd >  exp tt >  cmd >  com  com >  com (W-ff) (W-tt) Iterazione (while)

8 La sintassi del nucleo Progr::=prog {ClassDeclList {StmtList}} ClassDecl_List::=ClassDecl | ClassDecl ClassDeclList ClassDecl::=class Ide {StatMetDecList InstVarDecList MetDecList} InstVarDecList::=InstVarDec | InstVarDec InstVarDecList InstVarDec::=public Type Ide StmtList::= Stmt | Stmt StmtList Stmt::= Com | Decl Decl::= Type Ide | Type Ide= Exp; | Type ide = new Ide(); Type::= int | boolean | char | Ide Block::= {StmtList} Exp::= Ide.Ide | Ide | NumExp | BoolExp | Ide.Ide m (Exp)

9 La sintassi del nucleo MetDecList::= MetDec MetDecList |  MetDec::=public void Ide(T Ide){StmtList} StatMetDecList::= StatMetDec StaticMetDecList |  StatMetDec::=public static TypeR Ide(Type Ide){StmtList} TypeR::=Type | void Com::= Ide= Exp; | Ide.Ide=Exp; | Ide = new Ide(); | Block |Ide.Ide m (Exp) | if (BoolExp) Com else Com; | while (BoolExp) Com;

10 Esempio prog{ class Foo { public int x; public int y;} class Fie { public int x;} {Foo oj1= new Foo(); Fie oj2= new Fie(); oj1.x=5; oj1.y=oj1.x+4; oj2.x=oj1.x+oj1.y;}} public class volume { public static class Foo { publicint x ; public int y;} public static class Fie { publicint x ;} public static void main (String [ ] args) { Foo oj1=new Foo(); Fie oj2=new Fie(); oj1.x=5; oj1.y=oj1.x+4; oj2.x=oj1.x+oj1.y; }} programma Java

11  classdecl  c  com ,   classdecl  c >  com  classdecl ,   classdecl (prog) Semantica: il programma

12   c ’   c ”   c ’   c ” <ClassDecl ClassDecList,  c   c ” <ClassDecl ClassDecList,  c   c ”  istdecl s  istdecl   mdl m  istdecl  s  istdecl   mdl  m / c]   c [ / c] Semantica: classi (classdecl) (classdeclList)

13   s [ /m]   s [ /m]   s ’   s ”   s ’   s ” < MetDef MetDefList,  s   s ”  istdecl  [  /x]  istdecl  [  /x]   ”   ’   ”   ”   ” (instdecl) Semantica: istanza e metodi d’istanza (instdeclist) (MetDef) (MDL)

14  c (c) = l = newloc (  )  c (c) = l = newloc (  ) >  /l ]> >   = .  ’ >   = .  ’  = .  ’ >  new (declnew) Semantica: dichiarazioni di oggetti (declnonew)

15 >   ’ =  [v/x] >  v  (o)= l  ( l )=  ’ =  [v/x] >   (o)=l  (l)=  (o)=l  (l)= >   ( x ) (com =new ) (com o.x= ) Semantica: assegnamento ed espressioni exp o.x

16  c (c)=  m (m)=  >  v  (o)=l  (l)=  c (c)=  m (m)=  >  Semantica: metodi d’istanza invocazione (Ipotesi che le espressioni non modifichino lo stato) invoc


Scaricare ppt "Classi: class Foo { public int x; public int y; public void swap (boolean z) { if (z) {int temp = x; x = y; y = temp;}; }; } Ambienti per le classi: Cenv."

Presentazioni simili


Annunci Google