Kihagyás

Típus és osztály

Procedurális vs OOP paradigma

Paradigma - Sajátos gondolkodási mód, ami irányt szab egy programozási feladat megoldásában

Hatással van a feladat elemzésére és megvalósítására, de még a tesztelésére is.

Procedurális

Egy probléma megoldásához a problémát részfeladatokra bontjuk, és az ezeket megoldó tevékenységeket önálló egységekbe, Procedúrákba (részprogram, makró, eljárás, függvény) szervezzük.

A problémát megoldó folyamatot ezen procedúrák közötti vezérlés-átadásoknak (eljárások, függvény-hívások) láncolata határozza meg

OOP

Egy probléma megoldásához szükséges adatok egy-egy részét a hozzájuk kapcsolódó tevékenységgel (metódusokkal) együtt önálló egységekbe, objektumokba zárjuk.

A problémát megoldó folyamatot ezen objektumok metódusai közötti vezérlés-átadások (közvetlen hívások, signaling) jelöli ki.

Feladat

Egy nem üres tömbben 0 és m közé eső természetes számok találhatók. Melyik a tömb leggyakoribb eleme?

  • Procedurális megoldás
    • maximum kiválasztás és megszámlálás
  • Objektum elvű megoldás
    • tároló objektum
      • mind az elemek elhelyezése, és az elem lekérdezése gyors

Specifikáció - Elemzés

\[ A = (x:\mathbb{N}, m:\mathbb{N}, elem:\mathbb{n}) \]

Felhasznált változók listázva

\[ Ef: (x:x_{0} \wedge m = m_{0} \wedge n \geq 1 \wedge \forall i \in[1..n]: x[i]\in[0..n]) \]

Az előfeltétel a változók kezdőértékét határozza meg

\[ Uf = (x = x_{0} \wedge m = m_{0} \wedge b: Zsák \wedge b = \overline \cup _{i=1..n}[x[i]] \wedge elem = leggyakoribb(b)) \]

Az input változók megőrzik a kezdőértéküket, létrejön a Zsák típusú segédváltozó (halmaz, ismétlésekkel)

Disclaimer

\[\overline \cup$$: Egy zsákot zsákkal egyesítő művelet, neutrális eleme az üres zsák $$\emptyset\]

[e] az e-t tartalmazó egyelemű zsák


Specifikáció - Tervezés

\[ A = (x:\mathbb{N}, m:\mathbb{N},b:Zsák, elem:\mathbb{n}) \]
\[ Ef: (x:x_{0} \wedge m = m_{0} \wedge n \geq 1 \wedge \forall i \in[1..n]: x[i]\in[0..n]) \]
\[ Uf = (EF \wedge b = \overline \cup _{i=1..n}[x[i]] \wedge elem = leggyakoribb(b)) \]

Végrehajtható specifikáció - Nem csak a feladatot írja le, de a megoldást is magába foglalja (előre felvéve a segédváltozó, UF egyszerűsítve)


Összegzés

\[ s = \sum_{i=m..n} f(i) \]
\[ f:[m..n]\longrightarrow H \]
\[ +: H \times H \longrightarrow H \]

bal neutrális elem a 0

\[ s:H \]

Összevetés az összegzéssel

Egyezés

\[ s = \sum_{i=m..n} f(i) \thickspace\sim\thickspace b = \overline \cup _{i=1..n}[x[i]] \]

Eltérés

Eredmény \(\(s:H\)\) \(\(\sim\)\) \(\(b:Zsák\)\)
Művelet \(\(H, +, 0\)\) \(\(\sim\)\) \(\(Zsák, \overline \cup, \emptyset\)\)
Elem \(\(f(i)\)\) \(\(\sim\)\) \(\([x[i]]\)\)
Felsorolás \(\(i = m .. n\)\) \(\(\sim\)\) \(\(i = 1 .. n\)\)

Adattípus fogalma

Egy adat (változó) típusának definiálásához szükség van a típus specifikációjára és annak megvalósítására.

A típus-specifikáció megadja:

  • Az adat által felvehető értékek halmazát
    • Típusértékek
  • A típusértékekkel végezhető művelet
    • Típusműveletek

A típus-megvalósítás megmutatja:

  • A típusértékek reprezentálását
  • milyen programok implementálják a műveleteket
Típusértékek A típussa jellemzett adat lehetséges értékei
Típusműveletek A típusértékekkel kapcsolatos feladatok
Típus-reprezentáció Típusértéket helyettesítő elemek és azok értékeit korlátozó variáns
Típus-implementáció A típusműveleteket megoldó programok, amelyekben a típusértékek helyett azok reprezentánsai állnak

Típusinvariáns - egy típusérték reprezentálásához használt adatok közti kapcsolat

(Az értékek helyetessítő elemek, és azok megszorításai)

Adattípus példa - Zsák

Adattípus példa a Zsák típusra

Objektum fogalma

Objektumnak egy feladat megoldásának olyan önelló egyedként azonosított részét neveztzük, amely a megoldás adott részéért felellős adatokat, és az ezekkel kapcsolatos műveleteket foglalja magába.

Osztály fogalma

Az osztály egy objektum szerkezetének és viselkedésének mintáját adja meg, azaz

  • Felsorolja az objektum adattagjait azok nevével, típusával és láthatóságának (rejtett (-,#) vagy publikus (+) megadásával, kiegészítve az esetleges típusinvariánssal)
  • Megadja az objektmra meghívható metódusokat (tagfüggvény, művelet) szignatúrájukkal és törzsükkel

Szignatúra - Függvény neve, paraméterlisája, visszatérési értékének típusa és láthatósága együttesen. pl.: public static void Main(string[] args)

Az osztály lényegében az objektum típusa

  • Az objektumot az osztálya alapján hozzuk létre, azaz példányosítjuk

Egy osztályhoz több objektum is példányosítható

  • Minden objektum rendelkezik az osztályleírás által leírt adattagokkal és metódusokkal

Egységbezárás

Egy adott feladatkör megvalósításához szükséges adatokat és az azokat manipuláló programrészlet a program többi részétől elkülönítve adhatjuk meg.

Konstruktor

A példányosítást a konstruktor végzi, amely memóriát foglal az objektum adattagjainak (lefutnak azoknak a konstruktorai is, ha nem primitív típus), amelyek kezdeti értéket is kapnak.

Ha más konstruktort nem definiálunk, üres konstruktorral mindenképp rendelkezünk

Elrejtés

Az egységbe zárt elemek láthatóságának korlátozása.

Általában az afattagok rejtettek, értékeikhez csak publikus metódusokkal férünk hozzá (később getterek, vagy getter metódusok)

Hibakezelés, tesztelés

Kivétel-kezelés - Ha egy utasítás valamilyen hibát észlel, akkor dobjon kivételt, amitől a program futása megszakad, ha nincsen megfelelően lekezelve.