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
- tároló objektum
Specifikáció - Elemzés
Felhasznált változók listázva
Az előfeltétel a változók kezdőértékét határozza meg
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
[e] az e-t tartalmazó egyelemű zsák
Specifikáció - Tervezés
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
bal neutrális elem a 0
Ö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

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.