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.

Slides:



Advertisements
Hasonló előadás
Deduktív adatbázisok.
Advertisements

Preferenciák, rendezések, reprezentálhatóság
Programozási feladatok
Osztott rendszer: (kommunikáció csatornán keresztül). Osztott rendszer informális definíciója. • Egymástól elkülönülten létező program-komponensek egy.
Jt Java Feltételek, logikai kifejezések. jt 2 Logikai operátorok Logikai kifejezésekre alkalmazhatók a következő műveletek: 1. nem! 2. és&ill.&& 3. kizáró.
A webes tesztelés jövője
Lambda kalkulus.
Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
1.) A programfejlesztés hagyományos életciklus modellje és adattípus.
Euklidészi gyűrűk Definíció.
Gyűrűk Definíció. Az (R, +, ·) algebrai struktúra gyűrű, ha + és · R-en binér műveletek, valamint I. (R, +) Abel-csoport, II. (R, ·) félcsoport, és III.
JavaScript.
Bevezetés a Java programozásba
Vizuális modellezés Uml és osztálydiagram UML eszközök

Halmazok, relációk, függvények
C# tagfüggvények.
C# tagfüggvények.
1.3 Relációk Def. (rendezett pár) (a1 , a2 ) := {{a1} , {a1 , a2 }} .
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,...,
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Alphabet is a type specification = sorts: alphabet oprs: a:  alphabet,...,z:  alphabet end alphabet; nat is a type specification = sorts:nat oprs:zerus:
Nem determinisztikusság és párhuzamosság. A nem determinisztikusság a párhuzamosságban gyökeredzik. Példa: S par  parbegin x:=0   x:=1   x:=2 parend;
Szoftvertechnológia Rendszertervezés.
1 Operációs rendszerek Az ütemezés megvalósítása.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Funkcionális programozás 2. gyakorlat
Kölcsönös kizárás (bináris és nembináris szemaforok)
Kifejezések a Pascalban Páll Boglárka. Ismétlés: Ahogy algoritmikából láttuk, a kifejezések a Pascal nyelvben is operátorokból és operandusokból állnak.
Átalakítás előltesztelő ciklusból hátultesztelő ciklusba és fordítva.
Természetes és formális nyelvek Jellemzők, szintaxis definiálása, Montague, extenzió - intenzió, kategóriákon alapuló gramatika, alkalmazások.
Operátorok Értékadások
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
VÉGES AUTOMATA ALAPÚ TERVEZÉSI MODELL
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üggvényjelek (function symbols) (névfunktorok) FOL-ban Névfunktor: olyan kifejezés, amelynek argumentumhelyeire neveket vagy in- változókat lehet írni.
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Filekezelés
Java programozási nyelv Metódusok
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.
ORACLE ORDBMS adminisztrációs feladatok 3. rész dr. Kovács László 2004.
IT rendszerek modellezése
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.
Egyenesvonalú (lineáris) adatszerkezetek
Objektumvezérelt rendszerek tervezése 7. óra – Iterator, State, Interpreter © Szőke Gábor.
Lineáris algebra.
Párhuzamosság, kritikus szakasz, szemaforok Operációs rendszerek.
A Visual Basic nyelvi elemei
MI 2003/6 - 1 Elsőrendű predikátumkalkulus (elsőrendű logika) - alapvető különbség a kijelentéslogikához képest: alaphalmaz. Objektumok, relációk, tulajdonságok,
ADATBÁZIS- RENDSZEREK 12. rész: Konkurenciavezérlés.
Adva S  parbegin S 1 ...  S n parend; Párhuzamos programszerkezet két vagy több olyan folyamatot tartalmaz, amelyek egymással közös változó segítségével.
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.
Kommunikáció és szinkronizáció. 1.) Kommunikáció: Lehetőség arra, hogy egyik folyamat befolyásolja a másik folyamat lefutását. Kommunikáció eszközei: közös.
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);
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.
Példa. Az ábrázolás szemléltetése.  = ({stack, elem },{ create :  stack; push : stack elem  stack}),  = ( {vector, nat, elem}, { create c :  vector.
Példa: Dinteger = {..., -1,0,1,...}; Dboolean = {true, false};
1.3 Relációk Def. (rendezett pár) (a1 , a2) := {{a1} , {a1 , a2 }} .
Csoport, félcsoport, test
Algoritmus készítés.
Szálszinkronizáció.
Előadás másolata:

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 * m 2 ) * m 3 = m 1 * (m 2 * m 3 ) ; end semigroup;

monoid = ({s},{ *: s s  s[infix], e:  s}. monoid is a type specification = semigroup + oprs: e:  s eqns: m  s e*m = m m*e = m

group = ({s},{ *: s s  s[infix], e:  s, ( _ ) -1 : s  s}. group is a type specification = monoid + oprs: ( _ ) -1 : s  s eqns: m  s m*(m -1 ) = e (m -1 )*m = e

ring = ({s},{ z:  s, * : s s  s[infix], + : s s  s[infix], - : s  s}. ring is a type specification = semigroup + oprs: z :  s, + : s s  s[infix], - : s  s eqns: m, m 1, m 2, m 3  s (m 1 + m 2 )+ m 3 = m 1 + (m 2 + m 3 ) m 1 + m 2 = m 2 + m 1 m + z = m m + (-m) = z (m 1 + m 2 )*m 3 = (m 1 *m 3 ) + (m 2 *m 3 )) m 1 *(m 2 + m 3 ) = (m 1 *m 2 ) + (m 1 *m 3 )) end ring;

Mátrix. Egyszerűség kedvéért 2  2-es mátrixot definiálunk. matrix(ring) is a type specification = parameters = ring + exports = type sort : matrix oprs : zero :  matrix unit :  matrix MATRIX: ring ring ring ring  matrix add: matrix matrix  matrix sub: matrix matrix  matrix

eqns: a1,a2,a3,a4, b1,b2,b3,b4  ring zero = MATRIX(z,z,z,z) unit = MATRIX(e,z,z,e) add(MATRIX(a1,a2,a3,a4), MATRIX(b1,b2,b3,b4)) = MATRIX(a1+b1,a2+b2,a3+b3,a4+b4) sub(MATRIX(a1,a2,a3,a4), MATRIX(b1,b2,b3,b4)) = MATRIX(a1+(-b1),a2+(-b2),a3+(-b3),a4+(-b4)) end matrix;

Ismételt paraméter átadás. Példa: Van: int, matrix(ring); string(data); bintree(data); Kellene. bintree(string(matrix(int))); 1. Megoldás: int  matrix(ring) = matrix(int); matrix(int)  string(data) = string(matrix(int)); string(matrix(int))  bintree(data) = bintree(string(matrix(int))); 2. Megoldás: string(data)  bintree(data) = bintree(string(data)); matrix(ring)  bintree(string(data)) = bintree(string(matrix(ring))); int  bintree(string(matrix(ring))) = bintree(string(matrix(int)));

Paraméter átadás kompozíciója asszociatív: (f °g) ° h = f ° (g ° h); data bintree(data) h1 param string(param)(3) h2 h2' (1) ring matrix(ring) string(matrix(ring)) h3 h3 (2) int string(matrix(int)) bintree(string(matrix(int))); (Az eredmény független a választott stratégiától!)

Cél: megbízható szoftver előállítása. Módszer : absztrakció + modularizáció. Objektum elvű szoftverfejlesztési módszer: Objektum modul, az objektumhoz való szabványos hozzáférhetőséggel. Szinkronizált objektum modul párhuzamos környezetben. nem szinkronizált objektum szinkronizációs mechanizmus request enter exit

Az objektumon végzendő operációk fázisai: request enter exit Állapot az objektum létezésének egy feltételnek eleget tevő szakasza. (aktivitást fejt ki, vagy vár egy esemény bekövetkezésére). állapot entry/ event/ exit/ Az objektum állapotához három fázis kötődik: Indulás fázis. (Az entry akció kezdeményezi). Belső tevékenységek fázisa. (Az event akció). Kilépési fázis. (Az exit akció).

p.req p.ent[  ] p.ex  : a szinkronizáció követelményeinek megfelelő belépési feltétel.  pre obj p

Adattípus specifikációja: eqns: is a type specification = parameters =... ; exports = class sort: oprs: eqns:. f s (f c (a)) = h(a)  pre(f s (b)) : b = f c (a); attr(f c (a))  n  f c (a) = "undefined"  pre(f c (a)) : attr(a)  n. sync:.... Egy specifikációs nyelv a szinkronizációra: elsőrendű predikátum kalkulus nyelve + klózok (operáció, akció, időbeli rendezettség).

Individuum változók: közös erőforráson végzendő operációkhoz tartozó akciók. Az akciók szintaktikai formája:  operáció neve  [  végrehajtásának sorszáma  ](  paraméter  ),  ;   {req, ent, ex}; Például: p[i](x).req; Individuumok halmazán értelmezett reláció: akciók közötti időbeli rendezettségi reláció:  Szintaxis: akció akció  bool [infix]. Például : p[i].req  q[j].exit; A reláció tulajdonságai: nem reflexív: ~ (A  B); asszimmetrikus: (A  B)  ~ (B  A); tranzitív: (A  B) ~ (B  C)  (A  C); Szemantika: A  B = ha A műveleti akció megelőzi B műveleti akciót akkor "true" különben "false".

Paraméterekre vonatkozó relációk az elsőbbségi relációban. Szintaxis: R(x,y)  (f[i](x).ex  g[j](y).ent), ahol R(x,y) reláció. Szemantika: R(x,y)  (f[i](x).ex  g[j](y).ent) = ha az f(x) művelet exit akciója az i. végrehajtás esetén megelőzi a g(y) művelet enter akcióját a j. végrehajtás esetén és a paramétereikre ugyanakkor fennáll az R(x,y)="true" állítás akkor "true" különben "false". Megjegyzés: Az univerzális és az egzisztenciális kvantor:  : for all;  : for some. implementor absztrakt szinkronizációs specifikáció program követelményeknek való megfelelés ellenőrzése szinkronizációs tulajdonságok bizonyítása függetlenül az operáció algoritmusától

Axiómák: (  i)( p(i).req  p(i).ent); (  i)( p(i).ent  p(i).ex); (  i,k; k  0)(p(i).req  p(i+k).req); Erőforráshoz való hozzáférési korlátozások: 1.) Addig az adaton nem végezhető p művelet, amíg nem jött létre: (  i)(create.ex  p[i].ent); 2.) Ugyanabból a műveletből egyszerre csak egy dolgozhat az objektumon (kizárólagos használat): (  i)(p[i].ex  p[i+1].ent); 3.) Ugyanabból a műveletből egyszerre csak n  1 dolgozhat az objektumon: (  i)( h[i].ex  h[i+1].ent);

4.) Különböző műveletekből egyszerre csak egy dolgozhat az objektumon (kölcsönös kizárás): (  i,j)( p[i].ex  q[j].ent  q[j].ex  p[i].ent ); 5.) Két különböző művelet esetén q művelet az objektumhoz való hozzáférések számában legfeljebb n-nel haladhatja meg a p hozzáféréseinek számát: (  i)( p[i].ex  q[i+n].ent ); Prioritásos korlátozások. 1.) A p operációnak elsőbbsége van a q operációval szemben az erőforráshoz való hozzáférésben (prioritásos belépés): (  i,j)( p[i].req  q[j].ent)  p[i].ent  q[j].ent );

2.) A p operációnak elsőbbsége van a q operációval szemben az erőforráshoz való hozzáférésben (prioritásos belépés): (  i,j)( p[i].req  q[j].ent)  p[i].ent  q[j].ent ); 3.) A p operációnak elsőbbsége van a q operációval szemben az erőforrás kizárólagos használatában (prioritásos kölcsönös kizárás): (  i,j)( p[i].req  q[j].ent)  p[i].ex  q[j].ent ); 4.) Paraméterektől függő prioritásos kölcsönös kizárás : (  i,j)( p[i](x).req  q[j](y).ent)  R(x,y)  p[i](x).ex  q[j](y).ent);

Beütemezések. 1.) Beütemezés prioritás alapján kölcsönös kizárással: (  i,j,k)( q[j].req  p[i].ex  q[j].ent  r[k].req  p[i].ex  r[k].ent  q[j].ex  r[k].ent); 2.) Beütemezés kölcsönös kizárással paramétertől függő prioritás alapján: (  i,j,k)((q[j](x).req  p[i].ex  q[j](x).ent  r[k](y).req  p[i].ex  r[k](y).ent)  R(x,y)  q[j](x).ex  r[k](y).ent); Sorrendiségi korlátozás. p[i] operáció után közvetlenül q[j] operáció használja az erőforrást: (~  k)( p[i].ex  r[k].ent  q[j].ent);

Korlátos buffer szinkronizációs axiómája. syn = for all j; create.ex  deposit[j].ent  deposit [j].ex  remove[j].ent  remove [j].ex  deposit[j+n].ent  (szinkronizáció); deposit[j].ex  deposit [j+1].ent  remove[j].ex  remove[j+1].ent; (kizárólagos használat) Adatbázis szinkronizációs axiómája. syn: for all i,j: create.ex  writer[i].ent  (write[i].ex  write[i+1].ent)  (writer[i].ex  reader[j].ent  reader[j].ex  writer[i].ent)  (writer[i].req  read[j].ent  writer[i].ex  reader[j].ent)

Példa. Az adatbázis típusának a specifikációja párhuzamos esetre. db(elem) is a class specification = parameters = sorts: elem oprs:  :  elem exports = class sorts: db oprs: create:  db write: db elem  db read: db  elem eqns: d  db; e  elem; read(create) =  read(write(d,e)) = e syn: for all i,j: create  writer[i].ent  (write[i].ex  write[i+1].ent  (writer[i].ex  reader[j].ent  reader[j].ex  writer[i].ent)  (writer[i].req  read[j].ent  writer[i].ex  reader[j].ent) end db;

Adva a lista típus specifikációja: listx(elem) is a type specification = sorts : listx, elem oprs : empty :  listx add : elem listx  listx _. _ : listx listx  listx eqns : /, m  list; e  elem; empty. / = / add(e, /). m = add(e, /. m ) end listx; Egészítsük ki a specifikációt a szinkronizációs specifikációval.

Megoldás. listx(elem) is a type specification = sorts : listx, elem oprs : /, m  listx; e  elem; empty :  listx add : elem listx  listx _. _ : listx listx  listx eqns : /, m  list; e  elem; empty. / = / add(e, /). m = add(e, /. m ) syn : (  i,j)(empty.ex  _. _ [j].ent  _. _ [j].ex  _. _ [j+1].ent  add[j].ex  add[j+1].ent  (add[i].ex  _. _ [j].ent  _. _ [j].ex  add[i].ent)) end listx;