160 likes | 312 Views
Paraméter továbbítás. (parameter passing). Paraméteres specifikációk: Pl.: string(spec) : hasonló specifikációk családja; string(nat); string(data); string(integer); string(alphabet);. A paraméteres specifikáció előnye: formális paraméterekkel felírt specifikáció [formal spec.];
E N D
Paraméter továbbítás. (parameter passing) Paraméteres specifikációk: Pl.: string(spec) : hasonló specifikációk családja; string(nat); string(data); string(integer); string(alphabet);... A paraméteres specifikáció előnye: formális paraméterekkel felírt specifikáció [formal spec.]; általános mechanizmus segítségével aktuális paraméterekkel felírt specifikáció; [érték specifikáció (value spec.)] Mechanizmus: paraméter továbbítás. • Egyszerű paraméter passing: "spec" egyszerű adattípus; • Iterált paraméter passing: "spec" paraméteres adattípus;
Paraméter továbbítás. (parameter passing) Adva: PSPEC paraméter-specifikáció: p SPEC SPEC1 SPEC = (S,OP,E); formális paraméterek specifikációja. p: benne foglaltatás; SPEC1 =SPEC(S1,OP1,E1); Például: p data string(data) Adva: h: SPEC SPEC' morfizmus; ahol SPEC' = (S',OP',E') : aktuális paraméterek specifikációja;
A paraméter továbbítás diagramja: p SPEC SPEC1 h = h1 SPEC' SPEC1' p' • SPEC1' : érték specifikáció; • h: SPEC SPEC' :specifikáció morfizmus; • p': benne foglaltatás; • h1: h1(s); sSS1: if sS1then s else h(s) fi. • (N:s1...sns)OPOP': • h1(N:s1...sns) = if N:s1...sns OP1then • N:h1(s1)...h1(sn)h1(s)else h(N):h(s1)...h(sn)h(s) fi. • SPEC1'= SPEC'(S1',OP1',E1'); S1'= S1, OP1'= h1(op1), • E1'= h1(E1),
Példa: p data string(data) h = h1 nat string(nat) p'
string(data) is a type specification = parameters = data+ exports = type sort: string oprs: empty: string make: data string concat: string string string ladd: data string string radd: string data string eqns: ddata, s,s1,s2,s3string; concat(s,empty) = s concat(empty,s) = s ladd(d,s)= concat(make(d),s) radd(s,d)= concat(s,make(d)) end string;
Paramétereket tartalmazó paraméter továbbítás. (Parameterized parameter passing.) Adva PSPEC = (SPEC, SPEC1); SPEC1= SPEC + (S1,OP1,E1); p SPECSPEC1 PSPEC paraméteres formális specifikáció; p: tartalmazás; Pl.: PELEM = (ELEM, SET); p ELEM SET Adva: PSPEC' = (SPEC', SPEC1'); SPEC1'= SPEC' + (S1',OP1',E1'); Paraméteres aktuális specifikáció. Pl.: PELEM' = (NAT, SET ' );
Paraméter átadás morfizmusa: h: SPEC SPEC1'; Paraméteres paraméter-átadás szintaxisa: p SPEC SPEC1 h = h1 SPEC' SPEC1' SPEC2' p' q p, p' : tartalmazás; Paraméteres érték specifikáció: (SPEC', SPEC2'); Jelölés: (SPEC', SPEC2') = PSPEC h PSPEC' table(data) hset(data) = (table hset)(data) = table(set(data)).
Példa: Paraméter átadás morfizmusa: h: data set(data); Paraméteres paraméter-átadás szintaxisa: p PS(datanat) PS(tablea(data)) h = h1 PS(set(nat)) PS(set(nat)nat) PStable(set(nat)) p' q p, p' : tartalmazás; Paraméteres érték specifikáció: (set(nat), PStable(set(nat))); Jelölés: (SPEC', SPEC2') = PSPEC h PSPEC' table(data) hset(nat) = (table hset)(nat) = table(set(nat)).
Modul specifikációkon értelmezett alapvető operációk: Kompozíció. Adva M1= (PAR1, EXP1, IMP1, BOD1, e1, i1, eb1,ib1); M2= (PAR2, EXP2, IMP2, BOD2, e2, i2, eb2,ib2); Felmerülő igény: M1import interfészének és M2export interfészének az összeillesztésével hozzunk létre egy új M3 modulspecifikációt. Kompozíció. h: = M1 M2; h=(h1,h2); h1 : IMP1 EXP2; h2 : PAR1 PAR2; M3 = M1hM2;
M1= (PAR1, EXP1, IMP1, BOD1, e1, i1, eb1,ib1); M2= (PAR2, EXP2, IMP2, BOD2, e2, i2, eb2,ib2); M3 = M1hM2; Eredmény: M3 = (PAR3, EXP3, IMP3, BOD3, e3, i3, eb3,ib3); PAR3= PAR1; EXP3= EXP1; IMP3= IMP2; e3 = e1;
e1 PAR1 EXP1 i1 = eb1 ib1 IMP1 BOD1 h2 h1 b1 e2 PAR2 EXP2 i2 = eb2 ib2 IMP2 BOD2 BOD3
Megvalósítás: reprezentáció (ábrázolás) + implementáció. Reprezentáció: : C A;
Interfész megvalósításai. e PAR EXP i = eb IMP BOD ib Interfész: ( PAR, EXP, IMP, e, i ) body rész jelölése az osztály morfizmus diagramjában. body = oprs: rep : C A eqns: c C; f0 : g0 fc(c): gc(c) A jelölés jelentése: f0 = rep(g0); (f0 = (g0)); fc(c): rep(gc(c)); fc(c): (gc(c))
Kettős specifikáció: e par exp i = eb imp bod ib absztrakt specifikáció reprezentáció + tartalmazás konkrét specifikáció Tartalmazás: exp= body = typesort: a typesort: (c) oprs: fi:a, p1,...,pka oprs: fi: (c), p1,...,pk(c) . . . eqns: eqns: fs(fc(a)) = h(a) fs(fc((c))) = h((c))
Az interfész megvalósítása a diagram kommutációját fejezi ki: e PAR EXP i IMP rP rE e' PAR' EXP' i' = eb' IMP' BOD' ib' rI i' rP = rI i; és e' rP = rE e; Ha rP= rE= rI = identitás, akkor egzakt megvalósítás.
Interfész egzakt megvalósítása (realizációja): Adott INT = (PAR1, EXP1, IMP1, e1, i1) interfész specifikáció. MOD = (PAR, EXP, IMP, BOD, e, eb, i, ib); modulspecifikációt az INT interfész egzakt megvalósításának nevezzük, ha I(MOD) = INT. I(MOD) = (PAR, EXP, IMP, e, i ). MOD' = ( PAR', EXP', IMP', BOD', e', eb', i', ib'); modulspecifikációt az INT interfész specifikáció megvalósításának nevezzük, ha létezik olyan (rP: PAR1 PAR, rE:EXP1 EXP, rI:IMP1 IMP) specifikáció morfizmus-hármas, amelyikre i' rP = rI i; és e' rP = rE e;