Paraméterátadó-morfizmus diagramja: p: tartalmazás SPEC SPEC 1 h : SPEC  SPEC' h 1 : SPEC 1  SPEC 1 ' SPEC' SPEC 1 ' p': tartalmazás SPEC: paraméter.

Slides:



Advertisements
Hasonló előadás
Sor láncolt ábrázolással
Advertisements

MESTERSÉGES INTELLIGENCIA (ARTIFICIAL INTELLIGENCE)
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Probléma formálisan specifikált: valós világ (domai) (hibás eredmény) ködös határ (félreértés, hiba) formális világ (megoldás) A specifikáció csak nagyvonalakban.
Összefoglalás 1. Pascal program szerkezete 2. Pascal típusai
Tömbök C#-ban.
Öröklődés 2..
1.) A programfejlesztés hagyományos életciklus modellje és adattípus.
Visual Basic for Application (VBA)
JavaScript.
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Dinamikus tömbök.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Vizuális modellezés Uml és osztálydiagram UML eszközök
Programozás II. 3. Gyakorlat C++ alapok.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: d a = ( A, F, E a ); d c = ( C, G, E c ); A = {A 0,..., A n };C = {C 0,...,
16. Verem műveletei Kaszab Gábor.
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
5. előadás Parametrikus polimorfizmus. Generikus programozás
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Alphabet is a type specification = sorts: alphabet oprs: a:  alphabet,...,z:  alphabet end alphabet; nat is a type specification = sorts:nat oprs:zerus:
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Egyszerű típusok csoportosítása
További vektor, mátrix algoritmusok
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
Összetett adattípusok
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Karakterláncok Páll Boglárka.
Karakterláncok Páll Éva Boglárka. Ismétlés Deklaráció var s:string; Length(karlánc) Concat(karlánc1,...,karláncn) Copy(miből,honnan,hányat) Delete(miből,honnan,hányat)
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Fák.
Termelő-fogysztó modell. A probléma absztrakt megfogalmazása: informális leírás. Adott egy N elemű közösen használt tároló, N  1. Adott a folyamatoknak.
Koncepció: Specifikáció: e par exp i = eb imp bod ib Specifikáció elemzése: tulajdonságok felírása a koncepció alapján + tulajdonságok bizonyítása.
Copyright, 1999 © Szlávi Péter Sor típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Egyenesvonalú (lineáris) adatszerkezetek
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
1 Mivel foglalkozunk a laborokon? 7. hét: Do-Loop-Until Do-Until-Looptömbök Function 7. hét: Do-Loop-Until és Do-Until-Loop ciklusok. Egy indexes tömbök,
A Visual Basic nyelvi elemei
1 Mivel foglalkoz(t)unk a laborokon? 1.hét: Word dokumentumok 1.hét: Word dokumentumok tagolása, tartalomjegyzék, ábrák számozása, hivatkozások, egyenlet-szerkesztő.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Mintapélda Készítsünk programot, amely beolvas egy egész számot, és eldönti arról, hogy prímszám-e. Készítsünk programot, amely beolvas egy egész számot,
1. feladat  Készíts olyan függvényt, mely paraméterül kapja két egész típusú változó címét, s hívása után a két változó értéke helyet cserél.
1 Objektum orientált programozás Az objektumok és az osztályok – példányosodás Nagy Szilvia.
A 2. géptermi beszámoló VBA anyagának összefoglalása
1 Mivel foglalkoz(t)unk a laborokon? 1.Labor: Word alapok Excel alapok: Excel alapok: Cellahivatkozás, munkalapfüggvény, diagram varázsló, trendvonal 2.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
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);
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Excel programozás (makró)
Félcsoport (semigroup) = ({s},{ *: s s  s [infix]}. semigroup is a type specification = sorts: s oprs: *: s s  s [infix] eqns: m 1, m 2, m 3  s (m 1.
1 Függvények használata – az első függvénynél a formulát háromszor be kell írni, rendre az x, x+h, x-h argumentumokkal, – a második függvénynél az új (feltételes.
Az 5,6,7 laborok VBA anyagának összefoglalása
Példa. Az ábrázolás szemléltetése.  = ({stack, elem },{ create :  stack; push : stack elem  stack}),  = ( {vector, nat, elem}, { create c :  vector.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
a programegységek között
Excel programozás (makró)
Típusok Halmaz (a világ objektumai közül néhány) Neve van
Példa: Dinteger = {..., -1,0,1,...}; Dboolean = {true, false};
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Web programozás és haladó fejlesztési technikák – C#
3. osztályban.
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Függvénysablonok használata
Előadás másolata:

Paraméterátadó-morfizmus diagramja: p: tartalmazás SPEC SPEC 1 h : SPEC  SPEC' h 1 : SPEC 1  SPEC 1 ' SPEC' SPEC 1 ' p': tartalmazás SPEC: paraméter specifikáció. SPEC 1 = SPEC + (S 1,OP 1,E 1 ) : típus spec. formális paraméterekkel. SPEC': aktuális paraméter specifikáció. h : SPEC  SPEC': specifikáció morfizmus. h 1 : (  s  S  S 1 )  (  op:s 1,...,s n  s  OP  OP 1 )(h 1 (op:s 1,...,s n  s) = if op:s 1,...,s n  s  OP 1 then op:h 1 (s 1 ),...,h 1 (s n )  h 1 (s) else h(op):h(s 1 ),...,h(s n )  h(s) fi;

Példa: p data string(data) h h 1 nat string(nat) p' Paraméter : data : (data,  :  data); string(data): ( {string, data}, {empty:  string, make: data  string concat: string string  string,...} Aktuális paraméter: nat; h: data  nat; Eredmény: string(nat): ( {string, nat}, {empty:  string, make: nat  string })

Adva h 1 : SPEC A  SPEC B, h 2 : SPEC A  SPEC C, h 3 : SPEC B  SPEC D ; és h 4 : SPEC C  SPEC D morfizmusok. Ha h 3  h 1 = h 4  h 2 ; akkor a morfizmus diagrammot kommutatívnak nevezzük. h 1 SPEC A SPEC B h 2 = h 3 SPEC C SPEC D h 4 = jelentése: h 3  h 1 = h 2  h 4 ;

Példa: p datastring(data) h = h 1 natstring(nat) k 1 p' = = k k' spec h 1  p = p'  h ; k'(nat) = k(nat); k(string) = k 1 (string); k' = k  p' ; k 1 = k  h 1 ;

Adattípus osztály specifikációja: e PAREXP i = eb IMPBOD ib PAR : formális paraméterek specifikációja; EXP = PAR+(S 1,OP 1, E 1 ) : export felület specifikációja; IMP = PAR' + (S 2, OP 2, E 2 ) : import felület specifikációja; BOD = IMP + eb(EXP) : megvalósítás specifikációja; Specifikáció: PAR, IMP; Kitüntetett sortú specifikáció: EXP = ( S EXP,OP EXP,E EXP ); BOD = (S BOD, OP BOD, E BOD ); Tartalmazás: e, ib; Tartalmazás, vagy tartalmazás és átnevezés i; eb: EXP  BOD; kitüntetett sortú morfizmus, reprezentáció;

 osztálynév(  paraméterek ,  korlátozás  )  is a class specification = parameters = sorts: oprs : eqns: exports = classsort: oprs : eqns: imports = sorts: oprs : eqns: body = oprs : rep: pt(  bod )  pt(  exp ); eqns : Interfész (kívülről látható rész):

 osztálynév(  paraméterek ,  korlátozás  )  is a class specification = parameters = sorts: oprs : eqns: exports = classsort: oprs : eqns: imports = sorts: oprs : eqns: body = oprs : rep: pt(  bod )  pt(  exp ); eqns : Konstrukciós (construction) rész :

 osztálynév(  paraméterek ,  korlátozás  )  is a class specification = parameters = sorts: oprs : eqns: exports = classsort: oprs : eqns: imports = sorts: oprs : eqns: body = oprs : rep: pt(  bod )  pt(  exp ); eqns : (megnyilvánulási aspektus (behaviour) rész):

 osztálynév(  paraméterek ,  korlátozás  )  is a class specification = parameters = sorts: oprs : eqns: exports = classsort: oprs : eqns: imports = sorts: oprs : eqns: body = oprs : rep: pt(  bod )  pt(  exp ); eqns : Megvalósítás (beburkolt rész).

 osztálynév(  paraméterek ,  korlátozás  )  is a class specification = parameters = sorts: oprs : eqns: exports = classsort: oprs : eqns: imports = sorts: oprs : eqns: body = oprs : rep: pt(  bod )  pt(  exp ); eqns : Ha a body részben a reprezentációs függvény: a =  (c). Ha a body részben egy axióma: f s (f c (a)) = h(a). Akkor az a body részben: f s (f c (  (c), )) = h(  (c), ).

Példa. Adott a zsák informális specifikációja. bempty : üres zsák előállítása; binsert( b,e ) : a b zsákban egy e elem elhelyezése, a zsákban egy elem többszörösen is előfordulhat. bdelete(b,e) : a b zsákból egy e elem kitörlése. many(b,e) : eredményül a b zsákban az e elem multiplicitását szolgáltatja. bsize : a zsákban lévő összes elem száma. Válasszunk két vektort és egy mutatót a zsák ábrázolására. Az egyik vektorban hézagmentesen egymás után elhelyezzük az elemeket A másik vektorban pedig azonos index értékek mellett az elemek multiplicitásának értékeit helyezzük el. A mutató egy nem negatív egész szám, amely azt mutatja, hogy hány különböző elem van a zsákban. Az ábrázolás : vector  vector  natbool  bag. Készítsük el a zsák típusosztály specifikációját. A zsáktípus neve legyen bag.

Megoldás. bag(data, n: nat ) is a class specification = parameters = nat + bool + sorts : data oprs :  :  data = : data data  bool [infix] eqns: a, b, c  data; a = b  b = a a = b  b = c  a = c

exports = class sorts : bag oprs : bempty :  bag binsert : bag data  bag bdelete : bag data  bag many : bag data  nat bsize : bag  nat eqns : b  bag; a, e  data bdelete(bempty, a) = bempty many(bempty, a) = zerus bsize(bempty) = zerus bdelete(binsert(b, a), e) = if a=e then b else binsert(bdelete (b,e))fi many(binsert(b,a), e) = if a=e then succ(many(b,e)) else many(b,e) fi bsize(binsert(b, a)) = succ(bsize(b)) bsize(binsert(b, a))  n  binsert(s,a) = "undefined"

imports = sorts : vector oprs : nil :  vector put: vector nat data  vector access: vector nat  data shift L : vector nat  vector eqns : v  vector ; i,j  nat; d  data; access(nil, i) =  ; shift L (nil) = nil; access(put(v,i,d),j) = if i=j then d else access(j) fi i = j  shift L (put(v,i,d),j) = shift L (v,j); 1  i  j  shift L (put(v,i,d),j) = put(shift L (v,j),i,d); i  j  shift L (put(v,i,d),j) = put(shift L (v,j),prec(i),d);

body = oprs: rep : vector vector nat  set eqns: v,u  vector, m  nat, a  data; 1=succ(zerus); empty = (nil, nil, zerus) insert((v,u, m), a) = if (  /, 1  /  m)(v[ / ] = a) then (v, u[ / ]: = succ(access(u,l)), m) else (v[succ(m)] := a, u[succ(m)] := 1), succ(m) fi; end set;

nat is a class specification = parameters = - exports = sorts: nat oprs: zerus:  nat succ: nat  nat prec: nat  nat add: nat nat  nat eqns: a,b  nat; prec(zerus) = "undefined"; prec(succ(a)) = a; add(a,b) = add(b,a) add(a,zerus) = a add(a,succ(b)) = succ(add(a,b))

imports = sorts: nat oprs: 0 :  nat _+1: nat  nat _ -1: nat  nat + : nat nat  nat[infix] eqns: n,m  nat; = "undefined" (n + 1) - 1 = n; n + m = m + n n + 0 = n

body = oprs : rep: int  nat eqns : i  int; zerus = 0 succ(i) = i +1 end nat; (rep(i):  (i)) (zerus =  (0)) (succ(  (i)) =  (i+1)) prec(  (0)) = "undefined"; prec(succ(  (i) )) = n; add(  (i),  (k) ) = add(  (k),  (i)); add(  (i),zerus) = n; add(  (i),succ(  (k))) = succ(add(  (i),  (k)));