Advertisement
wandrake

Untitled

Jul 16th, 2013
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. 1)
  2.  
  3. T_1[[Den(E)]]ρ ((v1, ..., vk), sk) = Let {(l, sk') = E[[E]]ρ(sk)} ((v1, ..., vk, VD(l)), sk')
  4. B_1[[byReference Ik]] (ρ, (vk, ..., vn), sk) =
  5. Let {sk' = sk}{ρ' = bind(Ik, vk, ρ)} (ρ', (vk+1, ..., vn), sk')
  6. R_1[[byReference Ik]]ρ ((vk, ..., vn), sk) = Let{sk' = sk} ((vk+1, ..., vn), sk')
  7.  
  8. 2)
  9.  
  10. Valori Memorizzabili, Denotabili, Esprimibili.
  11.  
  12. Mutabili (variabili / memorizzabili): ovvero che possono essere modificati, usati principalmente in tutti i linguaggi imperativi
  13. Immutabili (o costanti): ovvero che non possono essere modificati, largamente usati nei linguaggi funzionali, dove anche i valori strutturati sono immutabili (ovvero devono essere ricreati ogni volta che si vogliono modificare)
  14. Denotabili: che possono avere un nome, ovvero espressi dalle definizioni, tutte le volte che viene definita una funzione o procedura con nome, o un nuovo valore mutabile in linguaggi imperativi
  15. Esprimibili: che hanno una rappresentazion sintattica esplicita nel linguaggio, usati nelle definizioni di valori mutabili o immutabili (ad es Java {1, 2, 3, 4, 5}, Caml Costr(val1, val2))
  16.  
  17. 3)
  18. class A extends Object {
  19. public int x;
  20. private C y = new C();
  21. public A () { }
  22. public A (C u) {
  23. x = this.y.x + 2;
  24. y = u;
  25. }
  26. public int add(int u) {
  27. this.x = 2*this.x+u;
  28. }
  29. }
  30.  
  31. class B extends A {
  32. public int x = 0;
  33. public B (C u) {
  34. super(u);
  35. }
  36. public B () {
  37. super();
  38. this.x = 10;
  39. }
  40. public int add(int u) {
  41. this.x = u;
  42. }
  43. }
  44.  
  45. class C extends Object {
  46. public int x = 7;
  47. C () {}
  48. }
  49.  
  50. A z = new B(new C())
  51. int w = z.x
  52.  
  53. 4) Le astrazioni totalmente astratte sono astrazioni (funzioni, procedure) che hanno la stessa struttura del programma, e quindi sono unità di programmazione: permettono di definire entità locali, che possono essere anche astrazioni, avere identificatori di entità non locali, passaggio di parametri e valori di ritorno.
  54. Vengono usate per la programmazione basata su decomposizioni, dove si vuole poter decomporre ogni problema in sottoproblemi a qualunque grado di profondità (ovvero anche i sottoproblemi possono essere divisi in sotto-sottoproblemi a loro volta, cosa non possibile per esempio in C)
  55.  
  56. 5) Abbiamo due elementi sintattici per definire record, uno in E per l'allocazione dinamica e uno in D per l'allocazione statica
  57. D ::= ... | Rec T1:I1 T2:I2 ... Tn:In End I | ...
  58. E ::= ... | Talloc (Rec T1:I1 T2:I2 ... Tn:In End) | ...
  59.  
  60. D[[Rec T1:I1 ... Tn:In End I]]ρ(s) =
  61. Let {s0 = s}
  62. {\forall i (li, si) = allocate(Ti, s{i-1})}
  63. {\forall i γ(Ii) = li}
  64. (bind(I, ED(γ), ρ), sn)
  65.  
  66. E[[Talloc (Rec T1:I1 T2:I2 ... Tn:In End)]]ρ(s) =
  67. Let {s0 = s}
  68. {\forall i (li, si) = allocate(Ti, s{i-1})}
  69. {\forall i γ(Ii) = li}
  70. (EV(γ), sn)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement