Adat, Kifejezés, Utasítás, Állapot

Specifikáció újra

Mit ír le egy specifikáció?

Egy probléma **megoldását** **Mi** oldja meg a problémát? Az hagyján hogy hogyan...

Mi értelme volt specifikációnak?

Le tudjuk írni hogy mit várunk el. - teljesen - részletesen

Programozási probléma megoldási terve

- Mi oldja meg a problémát (Specifikáció) - Mire van ehhez szükség (Adat) - Hogyan használjuk ezeket a szükséges dolgokat (Algoritmus)

Adat

Minden amit külvilágból leképezve számítógépen tárolunk

- adatnak van: - típusa - értéke - ha eltároljuk, van neve - típus meghatározza: - értékkészletet - elvégezhető műveleteket

- ```a = 2``` - ```b = "nemjó!"``` - ```c = 4.6``` - ```fing = True``` - ```papucs = [1, 2, 22, 56]```

Adat elnevezés

Algoritmusban betöltött szerep alapján Attól függően, hogy egy programban hogyan használjuk az adatot, lehet - konstans - értéke nem változhat a programban - $\pi$-től fix szövegű hibaüzenetig lehet bármi - változó - nem feltétlen bemenet (de lehet bemenet) - értéke változhat

Elemi adattípusok

- Szám - Valós (féle) (float/double) - Egész (integer) - Szöveg (string) - nem mindenhol azonos string/char - kódolás számíthat - Logikai (boolean)

Kifejezés

- Kiértékelhető: ugyanúgy értéke és típusa van. - Konstansokon és/vagy változókon elvégzett műveletek (operációk) elvégzésével lehet kiértékelni - Rénézésre konstansok/változók és operátor(ok)

Műveleteket fel lehet fogni függvényként, és nagyon jól kell ismerni őket! Pl: - $+(4,6)$ ként is jelölhetjük $4 + 6$-ot, az összeadás egy függvény - $ge(13,9)$ lehet $13 \geq 9$, logikai értékű függvény

Kifejezések

Kifejezés | Típus | Érték | Probléma --- | --- | --- | --- 3 + 4 | egész <!-- .element: class="fragment" data-fragment-index="1" --> | 7 <!-- .element: class="fragment" data-fragment-index="1" --> | 2 + 2.5 | float/hiba <!-- .element: class="fragment" data-fragment-index="2" --> | 4.5/hiba <!-- .element: class="fragment" data-fragment-index="2" --> | különböző típusok! <!-- .element: class="fragment" data-fragment-index="2" --> 4 $>$ 2 | logikai <!-- .element: class="fragment" data-fragment-index="3" --> |IGAZ <!-- .element: class="fragment" data-fragment-index="3" --> | 4 = 2 | hiba <!-- .element: class="fragment" data-fragment-index="4" --> | hiba <!-- .element: class="fragment" data-fragment-index="4" --> | értékadás, nem összehasonlítás (==) <!-- .element: class="fragment" data-fragment-index="4" --> 4 == 2 <!-- .element: class="fragment" data-fragment-index="5" --> | logikai <!-- .element: class="fragment" data-fragment-index="6" --> | Hamis <!-- .element: class="fragment" data-fragment-index="6" --> | 4 == "négy" <!-- .element: class="fragment" data-fragment-index="5" --> | hiba/logikai <!-- .element: class="fragment" data-fragment-index="7" --> | hiba/HAMIS <!-- .element: class="fragment" data-fragment-index="7" --> | programnyelve válogatja <!-- .element: class="fragment" data-fragment-index="7" -->

Kiértékelési különbségek

Melyiknek kellene működnie? - 2 + 2.5 - 2 == "kettő" - "béna" + "béla" Szempontok: - kényelmes - gyors - tudjam pontosan hol basztam el

Hogyan hozunk létre névvel, típussal és értékkel rendelkező adatot?

1. Deklarálás - adat nevét megadjuk - egyes programnyelveknél típusát 2. Értékadás - egyenlőségjel jobb oldalán lévő kifejezést kiértékeljük - értékét hozzárendeljük a deklarált névhez

- ```a = 12``` - ```b = fgv(adat)``` - ```c = adat_egyik + adat_masik``` - ```d = h - g / fgv2(y)``` - ```x = x + 1``` **!**

Adat és kifejezés ismétlés

Mivel jellemezzük az adatot? <!-- .element: class="fragment" data-fragment-index="1" --> Milyen adattípusokat ismertek? <!-- .element: class="fragment" data-fragment-index="2" --> Hogyan hozunk létre változókat? <!-- .element: class="fragment" data-fragment-index="3" -->

Mi lesz az értéke a következő változóknak?

a = 4 > 5<!-- .element: class="fragment" data-fragment-index="1" --> b = 'alma' * 2 <!-- .element: class="fragment" data-fragment-index="2" --> c = a + b <!-- .element: class="fragment" data-fragment-index="3" -->

Mi kell ahhoz, hogy létrehozzuk az adatot

Statement (utasítás)

- legkisebb imperatív programozási elem - program állapotát (state) változtatja - kategorizálható - blokkosítható

Kifejezés vs Utasítás

- a == 4 - a = 4 **valami** vs **csinálj valamit** - Kifejezés kiértékelhető egy értékké - Utasításból több fajta van, a program **állapot**át változtatja - deklaráció - értékadás - függvénydefiníció - függvénymeghívás - ...

Állapot

Minden, a program által adott pontban elérhető és általa tárolt információ.

Állapot keret

Az általunk értelmezett állapotban egy **keret** jellemezhető egy három oszlopos táblázattal: Név (identifier) | Micsoda | Érték/tartalom --- | --- | --- ... | ... | ...

Paradigmában

Objektum Orientált Programozás

Nem tevékenység vagy logika, hanem objektumok, illetve adat köré építjük a programot

Imperatív programozási paradigma

Lépésenként adunk választ a hogyan kérdésre

Imperatív OOP

Lépésenként adunk utasításokat a programnak arra, hogy egyes objektumokat hogyan manipuláljon/kezeljen. Programnak ebben a megközelítésben bármely pillanatban van állapota, amiben világos a program számára elérhető objektumok *tulajdonságai* és értékei. Legtöbb népszerű nyelv így közelíti meg a programokat. Pl: C++, Java, C\#, PHP, Python...

Adatlétrehozás példák

[**pythontutor**](http://www.pythontutor.com/visualize.html#code=a%20%3D%2010%0D%0Ab%20%3D%20%22fing%22%0D%0Ac%20%3D%20False%0D%0A%0D%0Ax%20%3D%2010%20%2B%204%20/%206%0D%0Ay%20%3D%20a%20-%20x%0D%0Ay%20%3D%20y%20%2B%20a%20%2B%20x%0D%0A%0D%0Aboo%20%3D%2010%20%3E%205%0D%0Afoo%20%3D%20boo%20and%20%283%20%3C%20a%29%0D%0A%0D%0As%20%3D%20b%20%2B%20%22%20jajj%22&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false) ```python a = 10 b = "fing" c = False x = 10 + 4 / 6 y = a - x y = y + a + x boo = 10 > 5 foo = boo and (3 < a) s = b + " jajj" ```

Változók létrehozása más nyelvekben

[JAVASCRIPT TUTOR](http://pythontutor.com/javascript.html#code=var%20a%0Avar%20b%0Avar%20c%0A%0Aa%20%3D%2010%0Ab%20%3D%20%22fing%22%0Ac%20%3D%20false%0A%0Avar%20x%20%3D%2010%20%2B%204%20/%206%0Avar%20y%20%3D%20a%20-%20x%0Ay%20%3D%20y%20%2B%20a%20%2B%20x%0A%0Avar%20boo%20%3D%2010%20%3E%205%0Avar%20foo%20%3D%20boo%20%26%20%283%20%3C%20a%29%0A%0Avar%20s%20%3D%20b%20%2B%20%22%20jajj%22&curInstr=0&mode=display&origin=opt-frontend.js&py=js&rawInputLstJSON=%5B%5D) [C++ TUTOR](http://pythontutor.com/cpp.html#code=int%20main%28%29%20%7B%0A%0A%20%20int%20k%3B%0A%20%20int%20n%3B%0A%20%20int%20m%3B%0A%20%20k%20%3D%202%3B%0A%20%20n%20%3D%20k%20%2B%204%3B%0A%20%20m%20%3D%202%20*%20k%20-%20n%3B%0A%20%20bool%20l%20%3D%20m%20%3E%20k%3B%0A%20%20%0A%20%20char%20a%20%3D%20'HELLO'%3B%0A%20%20char%20b%20%3D%20'K'%3B%0A%20%20bool%20c%20%3D%20a%20%3E%20b%3B%0A%20%20%0A%20%20float%20x%20%3D%203.245%3B%0A%20%20float%20y%20%3D%204.876%3B%0A%20%20float%20z%20%3D%20x%20*%20y%3B%0A%20%20y%20%3D%202%3B%0A%7D%0A&curInstr=0&mode=display&origin=opt-frontend.js&py=cpp&rawInputLstJSON=%5B%5D)