Fa

A fa matematikai definíciója: összefüggő, körmentes gráf. Amellett, hogy pontos és precíz, programozási szempontból semennyit nem segít abban, hogy megértsük, mire is jó. Ehelyett kevésbé “precízen”, de sokkal hasznosabban fogjuk megfogalmazni. A fa egy olyan adatszerkezet, amely egy gyökérelemből indul ki, és minden elemnek lehet egy vagy több további gyereke. Ezen belül, attól függően, hogy milyen egyéb megkötéseket hozunk, hogyan tároljuk az elemeket, a különböző fa-típusok különböző célra lesznek jók. ...

2018. december 02. · Halász Gábor

Hash függvény, hash tábla

A hash függvény egy olyan függvény, amely tetszőleges méretű bemenetet képez le egy adott, fix méretű kimenetre. Hash függvény pl: f(Személy) = Személy születésnapja (1-365 közötti szám) f(Szám) = Az adott szám utolsó számjegye (0-9 közötti egész) A hash függvényeket több különböző célra is fel lehet használni, a választott céltól függ, hogy melyik hash függvény lesz nekünk épp jó. Hash függvény egyirányú, hiszen pl. az ember születésnapjából nem derül ki egyértelműen, kiről van szó. ...

2018. december 01. · Halász Gábor

Interfészek

Az interfész (interface) szó azt jelenti, hogy határfelület. A szerepe, hogy két különböző, egymástól független dolog között létesítsen kapcsolatot anélkül, hogy a két dolognak ismernie kelljen egymást: Egy felhasználói interfész segítségével a felhasználó használni tudja a programot anélkül, hogy ő maga fejlesztő lenne Egy hálózati interfész segítségével két számítógép képes egymással kommunikálni anélkül, hogy ismernék egymás belső felépítését Programozási szempontból Informálisan egy modul, egy komponens, egy osztály interfészének azt nevezzük, ami “kívülről”, a modult felhasználó programkódból elérhető. A tanult programnyelvekben ez a publikus függvényeket, változókat, osztályokat jelenti. ...

2018. december 01. · Halász Gábor

Névtelen/lambda függvények

Függényeket általában akkor írunk, ha egy programkódot, kódrészletet többször, akár különböző paraméterekkel szeretnénk végrehajtani. Akkor is hasznos, ha a kódunkat kisebb, logikai részekre szeretnénk bontani. Van azonban egy fontos haszna még: a keretrendszer által generált különféle események (pl. egy gombra kattintás) kezelésére. Ebben az esetben általában csak egy helyen használnánk a függényt: az eseményre feliratkozáskor. Pl.: public class Form1: Form { Button btn = new Button(); public Form1() { btn.Text = "Katt"; this.Controls.Add(btn); // Nincs (), mert itt a btn_Clicked nem függvényhívás - // nem a végeredményt várjuk, hanem magára a függvényre hivatkozunk btn.Click += btn_Clicked; } private void btn_Clicked(object sender, EventArgs e) { MessageBox.Show("Kattintottal"); } } A példában a btn_Clicked függvény csak azért szerepel, hogy a kattintás eseményre reagálhassunk. Nem fogjuk máskor meghívni, többször felhasználni, de mégis fel kellett vennünk egy külön függvényt. Vagy mégsem? ...

2018. október 16. · Halász Gábor

Adattervezés

A program megvalósításának egyik leggyakoribb kezdőlépése, hogy difiniáljuk, milyen adatokkal szeretnénk dolgozni, mit szeretnénk tárolni - vagyis milyen osztályaink, milyen objektumaink legyenek. Ezt egy példán keresztül mutatom be. Feladat Egy kisvasút menetrendjét szeretnénk tárolni. Kíváncsiak vagyunk arra, hogy melyik járat melyik állomásra mikor érkezik. Az adatokat egy szimpla webes felületen szeretnénk megjeleníteni (amit aztán ki is lehet nyomtatni, hogy az állomásokon is legyen belőle egy példány). Egyéb extra funkciókkal (pl. online jegyvásárlás, késések adminisztrálása) nem kell foglalkozni. ...

2018. október 01. · Halász Gábor

Objektum-orientált fejlesztés alapok

Az osztály és az objektum Az objektum-orientált szemlélet célja, hogy a logikailag egybe tartozó adatokat egységben tudjuk kezelni a hozzá tartozó műveletekkel - mind a forráskódban, mind használat közben. Definiálás: class Animal { string name; int hungerLevel; void Eat(Animal a) { /* ... */ } void MakeSound() { /* ... */ } int GetHungerLevel() { return hungerLevel; } } Használat: Animal hawk = new Animal("Hawk"); Animal mouse = new Animal("Mouse"); h.Eat(mouse); h.hungerLevel -= 10; Az osztály egy összetett adattípus, ami azt jelenti, hogy több, más adattípusból áll össze. A fenti példában az Animal osztály egy névből és egy éhségszintből áll. ...

2018. szeptember 26. · Halász Gábor

Hogyan tartsunk verziókezelés órát?

Cél Az óra célja, hogy a diákok biztosan tudják kezelni a git verziókezelő rendszer alapfunkcióit: Új projekt/repó létrehozása, létező klónozása Commit, push, pull Konfliktusok feloldása Ha ezekkel az ismeretekkel rendelkeznek, az nem csak azért fontos, mert előnybe helyezi őket a többi frissen végzett diákkal szemben, hanem a saját munkákat is megkönnyítjük vele: a házi feladatok, záródolgozatok begyűjtésekor nem kell zip fájlokkal szórakozni, harcolni a levelezőrendszer fájlméret korlátaival és a becsomagolt .exe fájlokkal, valamint ha a diák nem küld levelet / fenn akad a spam szűrőn, de a feladat fent van a github oldalán, akkor is lesz értékelhető munkája (és nem tud kifogással élni, hogy “Én pedig elküldtem”). A saját tapasztalatom az volt, hogy kis gyakorlással a fentieket minden 14-es diák képes volt készségszinten elsajátítani. ...

2018. szeptember 01. · Halász Gábor

Git bevezető

2023-09-28 frissítés: NetBeans-es részeket VS Code-ra cseréltem, a VS képeket frissítettem a 2022-es verzióra, néhány vizsgán előkerülő fogalmat hozzáadtam. Egy verziókezelő rendszer az alábbi problémákat oldja meg: Több fejlesztőnek kell egyszerre ugyanazon a projekten dolgozni Meg akarjuk tartani az időközbeni változásokat is: Könnyebb a hibakeresés Ha szükséges, vissza lehet állni A forráskód legfrissebb változata(i) egy központi helyen lesznek elérhetők A git egy a sok verziókezelő rendszer közül, talán a legelterjedtebb. (Népszerű alternatívák még: mercurial, subversion) ...

2018. február 21. · Halász Gábor