S0-02 Típusmodellek (Programozás elmélet)

Tartalom

  1. Absztrakt adattípus
  2. Adattípus specifikációja
  3. Adattípus osztály
  4. Paraméterátadás
  5. Reprezentációs függvény
  6. Öröklődés és polimorfizmus
  7. Liskov féle szubsztitúciós elv
  8. További források

1. Absztrakt adattípus

Típus fogalma általában

Mi a típus? Biteken tárolt információk jelentése, illetve hogy hogyan kell értelmezni és módosítani őket

Típus fogalma formálisan

Egy

\[(A, F)\]

páros, ahol

Absztrakt adattípus (ADT)

ADT specifikációja

ADT megvalósítása

ADT korai és modernebb megközelítése

Szignatúra

Lényeg: a műveletek szortokból szortokba képeznek le

Szignatúra algebra

2. Adattípus specifikácija

Absztrakt adattípus specifikációja

Specifikáció: \(SPEC = (\sum, E)\) (alternatív jelölés: \(SPEC = (S, OP, E)\))

Absztrakt adattípus specifikációk fajtái

1. Állapot elvű specifikáció (Hoare-féle módszer)

2. Procedurális specifikáció

3. Axiomatikus specifikáció (algebrai specifikáció)

Szignatúra algebrák közötti homomorfizmus

(morfizmus: leképezés)

\(h: A \rightarrow B\) egy függvénycsalád

  1. Minden S-beli s szortra \(h_s: A_s \rightarrow B_s\)
  2. \(\forall f_{A_i}\) és \(\forall (A_{s_{i_1}}, A_{s_{i_2}}, ..., A_{s_{i_k}})\) esetén: \(f_{B_i} megfelel f_{A_i}\)-nek

Szignatúra algebra homomorfizmusok speciális esetei

  1. Átnevezés
  2. Bővítés
  3. Új ábrázolás

Szignatúra algebra izomorfizmus

Adattípus szignatúra algebrai megközelítésben

\[osztály[A] = \{B \in Alg(\sum): B \simeq A\}\]

ahol

Monomorfikus és polimorfikus absztrakt típus

Specifikáció homomorfizmus

Szignatúra algebra homomorfizmus kiterjesztése a \(SPEC = (\sum, E)\) specifikációban lévő műveleti szemantikát leíró \(E\) specifikációban lévő

Specifikáció változói és kifejezései leképezhetők \(\rightarrow\) másik specifikáció változóira és kifejezéseire

3. Adattípus osztály specifikációja

Adattípus osztály morfizmus diagramja

Adattípus osztály morfizmus diagramja

Specifikációk

Morfizmusok

Az adattípus osztályspecifikációjának részei és “szabályai”: adattípus osztály interfésze, konstrukciós része, megnyílvánulási aspektus része, megvalósítás része

1. Interfész

2. Konstrukciós rész

3. Megnyilvánulási aspektus rész

4. Megvalósítás

4. Paraméterátadás, annak jelentése és morfizmus diagramja

Paraméteres specifikáció

Paraméterátadás morfizmus diagramja

Paraméterátadás morfizmus diagramja

Programozási nyelvekben: template-ek (C++) és generikus típusok (Java, C#)

5. Reprezentációs függvény

Adva egy adattípus absztrakt és konkrét specifikációja:

\[d_a = (A, F, E_a); \qquad d_c = (C, G, E_c);\] \[A = \{A_0, ..., A_n\}; \qquad C = \{C_0, ..., C_m\};\] \[F = \{f_0 \rightarrow A_0, ..., f_i: A_j ... A_k \rightarrow A_l, ...\}; \qquad G = \{g_0: \rightarrow C_0, ..., g_i: C_j ... C_k \rightarrow C_l, ...\};\]

ahol

Absztrakt és konkrét objektumok egymáshoz való viszonya:

\[\varphi: C \rightarrow A\] \[\varphi = (\varphi_0, ..., \varphi_n)\] ahol \[\varphi_0: C_0 \rightarrow A_0; \varphi_1: C_1 \rightarrow A_1; ...; \varphi_n: C_n \rightarrow A_n;\]

A C objektumhalmazt az A objektumhalmaz egy reprezentánsának nevezzük az adott \(\varphi\) mellett

Ennek jelentősége kettős specifikációnál: eb megmondja hogyan reprezentáljuk IMP-el \(PAR + EXP\)-et

6. Típusöröklés

Típusöröklődés definíciója:

Adva \(f_s = (f_{S_P}, f_{S_E})\) morfizmus:

Öröklődés morfizmus diagramja

Öröklődés morfizmus diagramja

úgy, hogy

Morfizmus során az operációk szintaktikai formája megőrződik

7. Liskov féle szubsztitúciós elv

Más néven: szemantikai öröklődési követelmény

Szemantikai örkölődés T_1-ből T_2-be

Szemantikai örkölődés \(T_1\)-ből \(T_2\)-be

Ha a \(T_1\) típusnak minden \(o_1\) objektumához létezik a \(T_2\) típusnak egy olyan \(o_2\) objektuma, amelyre igaz a következő:

\(\Longrightarrow\) akkor a \(T_2\) a \(T_1\) típus altípusa!

8. További források