Adatszerkezetek és algoritmusok



Hasonló dokumentumok
Osztályok. 4. gyakorlat

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Adatszerkezetek és algoritmusok

Készítette: Nagy Tibor István

Java és web programozás

Java II. I A Java programozási nyelv alapelemei

Java és web programozás

Java II. I A Java programozási nyelv alapelemei

OOP #14 (referencia-elv)

JAVA PROGRAMOZÁS 2.ELŐADÁS

OOP: Java 8.Gy: Abstract osztályok, interfészek

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

III. OOP (objektumok, osztályok)

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

OOP. Alapelvek Elek Tibor

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Programozás alapjai. 10. előadás

A C programozási nyelv I. Bevezetés

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

A C programozási nyelv III. Pointerek és tömbök.

A C programozási nyelv I. Bevezetés

Programozás II. 4. Dr. Iványi Péter

Programozás I gyakorlat

A C programozási nyelv III. Pointerek és tömbök.

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

A C# programozási nyelv alapjai

Programozási nyelvek II.: JAVA, 4. gyakorlat

Java programozási nyelv 5. rész Osztályok III.

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Programozás I. Első ZH segédlet

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Programozási nyelvek Java

8. gyakorlat Pointerek, dinamikus memóriakezelés

C++ programozási nyelv Konstruktorok-destruktorok

Objektumorientált programozás C# nyelven

Java programozási nyelv 4. rész Osztályok II.

Programozási nyelvek Java

Programozási nyelvek Java

A C# PROGRAMOZÁSI NYELV

Adatszerkezetek és algoritmusok

Java III. I I. Osztálydefiníció (Bevezetés)

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Már megismert fogalmak áttekintése

Programozási nyelvek II.: JAVA, 4. gyakorlat

Programozás III. - NGB_IN001_3

Szoftvertechnológia alapjai Java előadások

Kifejezések. Kozsik Tamás. December 11, 2016

Java III. I I. Osztálydefiníció (Bevezetés)

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Adatszerkezetek és algoritmusok

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Java és web programozás

Programozási alapismeretek 4.

Objektumok inicializálása

Programozás módszertan

1. Egyszerű (primitív) típusok. 2. Referencia típusok

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Bevezetés a programozásba. 9. Előadás: Rekordok

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

3. Osztályok II. Programozás II

Objektumorientált Programozás VI.

Programozás II. labor

1. Jelölje meg az összes igaz állítást a következők közül!

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Programozas 1. Strukturak, mutatok

JAVA PROGRAMOZÁS 3.ELŐADÁS

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Bevezetés a programozásba Előadás: A const

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Bevezetés a C++ programozási nyelvbe

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Web-technológia PHP-vel

Programozás C++ -ban 2007/7

C++ programozási nyelv

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Objektumelvű programozás

Objektumorientált paradigma és programfejlesztés Bevezető

Programozás I gyakorlat

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Pénzügyi algoritmusok

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Átírás:

2012. október 18.

Ismétlés

El z órai anyagok áttekintése Ismétlés Ismerjük: Az algoritmizálás alapjait Kifejezések fogalmát Vezérlési szerkezeteket Egyszer programozási tételeket... és néhány példát

Specikáció Feladat specikációja Miel tt az algoritmusainkat megtervezzük, leírjuk, programozzuk specikálni kell a feladatot Mi az amit bemenetként megkapunk kimenetként adni kell el kell végezni Ezek mindegyike feltétel! Feltételezzük, hogy a bemenetre/kimenetre igaz az állítás A programunk akkor lesz helyes, ha a feltételek teljesülnek!

Specikáció Feladat specikációja Példa a négyzetgyök számításra Bemenet: egy szám, aminek a négyzetgyökét keressük: x Kimenet: egy olyan szám y, amire igaz, hogy y 2 = x illetve x = y Feladat: a program számolja ki a bemenet négyzetgyökét Tehát az el feltétel azt köti ki, hogy egy számot kapok az utófeltétel pedig azt, hogy az eredmény a bemenet négyzetgyöke lesz

Típusok és m veletek

Típus fogalma Típus fogalma Deníció Típusnak nevezzük egy megadott értékhalmazt és az azokon értelmezett m veletek összességét Példa típusra 1. Egészek: Értékek: 0... 1000, M veletek: + és Példa típusra 2. Logikai: Értékek: igaz, hamis, M veletek:, és Példa típusra 3. Karakter: Értékek: a... z, M veletek: < (reláció a bet rend szerint)

Adatok ábrázolása Adatok ábrázolása a memóriában Két állapot tárolható zikai szinten matematikailag: 0 és 1 Egyetlenegy érték a bit, ez lehet 0 vagy 1 8 biten lehet ábrázolni egy bájtot, kettes számrendszerb l tízesre átírva ez 0 és 255 közötti számokat teszi lehet vé A bájtokat kett hatványai szerint szokás további egységekbe foglalni, szélesítend az ábrázolható értékek halmazát. Két bájt (16 bit): 0 és 65535 között Négy bájt (32 bit): 0 és 4294967295 között (32-bites rendszerekben ezt szónak (word) is hívják)

Adatok ábrázolása Adatok ábrázolása a memóriában Két állapot tárolható zikai szinten matematikailag: 0 és 1 Egyetlenegy érték a bit, ez lehet 0 vagy 1 8 biten lehet ábrázolni egy bájtot, kettes számrendszerb l tízesre átírva ez 0 és 255 közötti számokat teszi lehet vé A bájtokat kett hatványai szerint szokás további egységekbe foglalni, szélesítend az ábrázolható értékek halmazát. Két bájt (16 bit): 0 és 65535 között Négy bájt (32 bit): 0 és 4294967295 között (32-bites rendszerekben ezt szónak (word) is hívják)

Adatok ábrázolása Adatok ábrázolása a memóriában A tárolni kívánt érték típusától függ a számok jelentése... Például 16 biten (2 bájton) tárolni lehet: El jel nélküli egész számokat (0... 65535) El jeles egész számokat ( 32768... 0... 32767) (Els bit el jelbit) Karaktereket (úgynevezett Unicode táblázat alapján) Minden egyes számértékhez egy karaktergraka rendelhet...

Adatok ábrázolása Adatok ábrázolása a memóriában Mit tudunk tárolni még: Logikai értékeket Racionális számokat, meghatározott tizedes pontossággal Karaktersorozatokat (szövegeket) Memóriarekeszek címét Programutasításokat (az egyes bájtoknak utasítások felelnek meg) Dátumot, id t (például eltelt másodpercekben mérve) Az el z ek sorozatát vektorok formájában...

Adatok ábrázolása Adatok ábrázolása a memóriában Hogyan történik mindez? A memória rekeszekre van osztva A rekeszek hossza rendszerenként más, például 32 bit Egy rekeszben egy érték van A programozó (így a gépi utasításokra fordított program) tudja, hogy melyik rekeszben milyen típusú érték van, hogy kell értelmezni A rekeszeknek tudunk nevet adni, ezek a változók Változókkal rekeszeket lehet együttesen is kezelni (összefogni) Pédául tömbök, karaktersorozatok,...

Adatok ábrázolása Valós számok a memóriában A valós számok trükkje: X 2 Y alakban ábrázoljuk Pl.: 32 bit esetén 23 bit az X és 8 bit az Y, illetve el jelbit Lebeg pontos számábrázolás (egy IEEE szabvány esetén) 23db { }} { Az X minden esetben 1. xxxxxxxxxxxxxxxxxxxxxxx alakú, ahol az x egy bináris érték Az exponens adja meg a kettedes pont helyét A vezet egyest valójában nem tároljuk, mivel mindig egy

Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot

Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot

Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot

Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot

Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot

Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot

Típusok osztályozása Általános osztályozása a típusoknak A programozási nyelvekben el forduló típusokat az alábbiak szerint lehet csoportosítani: Típusok Összetett típusok Elemi típusok Iterált Skalár Mutató Unió Diszkrét Valós Direktszotzat Felsorolási Fixpontos... Egész Lebeg pontos

Beépített alaptípusok JAVA nyelven Primitívek A továbbiakban a JAVA nyelv alaptípusait vesszük sorra A Java objektum alapú nyelv, azaz néhány kivételt l eltekintve minden típusa objektum. Amik nem objektumok, azokat primitíveknek nevezzük. Primitívek Java-ban: boolean: Logikai típus byte: 8-bites el jeles egész short: 16-bites el jeles egész int: 32-bites el jeles egész long: 64-bites el jeles egész float: 32-bites lebeg pontos racionális szám double: 64-bites lebeg pontos racionális szám char: 16-bites Unicode karakter

Beépített alaptípusok JAVA nyelven Primitívek A továbbiakban a JAVA nyelv alaptípusait vesszük sorra A Java objektum alapú nyelv, azaz néhány kivételt l eltekintve minden típusa objektum. Amik nem objektumok, azokat primitíveknek nevezzük. Primitívek Java-ban: boolean: Logikai típus byte: 8-bites el jeles egész short: 16-bites el jeles egész int: 32-bites el jeles egész long: 64-bites el jeles egész float: 32-bites lebeg pontos racionális szám double: 64-bites lebeg pontos racionális szám char: 16-bites Unicode karakter

Beépített alaptípusok JAVA nyelven Csomagoló osztályok Minden egyes primitív típusnak létezik egy objektum párja, amit csomagoló osztálynak hívunk. Boolean: boolean Byte: byte Short: short Integer: int Long: long Float: oat Double: double Character: char Objektum alapú programozási szemlélet miatt vannak. Értékük csak úgy változtatható meg, hogy új példány jön létre, aminek ugyanaz lesz a változóneve. (Egyúttal a régi érték példány elérhetetlen lesz)

Beépített alaptípusok JAVA nyelven Tömbök A tömb ahhoz hasonlít, amit matematikában vektornak hívunk. A memóriában folytonosan több ugyanolyan típusú változó foglalódik le deklarációkor, amelyet indexelten lehet elérni. Java nyelven egy egészekb l álló tömb deklarációja a következ képpen történik: Deklaráció tombtipusa [] tombneve ; Egy létrehozott tömb hossza nem változtatható meg a kés bbiekben, viszont lehet ség van újabb, nagyobb deklarációjára.

Beépített alaptípusok JAVA nyelven Tömbök értékadás Egy tömbnek értéket adni többféleképpen lehet: Értékadás Felsorolással int [] tombneve; tombneve = {1,2,3,4,5}; Ugyanakkor létrehozható egy tömb kezd értékek nélkül is, csak a méret megadásával: Értékadás Üres létrehozása int [] tombneve; tombneve = new int[10];

Beépített alaptípusok JAVA nyelven Tömbök értékadás Illetve a tömb értékadásánál lehet ség van egy másik tömbbel egyenl vé tenni Értékadás Másik tömbbel int [] masiktomb = {0, 1}; int [] egyiktomb = masiktomb; Fontos, hogy ekkor a memóriában egyetlen tömb lesz csak, ugyanakkor kétféle változónévvel lehet elérni. (B vebben az objektumoknál.)

Beépített alaptípusok JAVA nyelven Tömbök használat A tömbök tartalmát indexeléssel érjük el, a számozás 0-val kezd dik. Például int [] egyiktomb = new int[10]; Az el z tömb esetén 0... 9 indexek érvényesek, a többi kiindexel a tömbb l. Egy tömb méretének megismerését a következ példa mutatja be: Tömbméret int tombmerete = egyiktomb.length;

Beépített alaptípusok JAVA nyelven Tömb, mint típus Deklaráció tombtipusa [] tombneve ; A tömbök is típusok, azaz szerepelhetnek tömb objektum létrehozási paramétereként: Deklaráció tipus [] [] matrix; Ezáltal két-, vagy többdimenziós tömböket is létre lehet hozni, a korlát a memória mérete (Kétdimenziós vektorok mátrixok)

Karakterláncok Karakterláncok Nagyon hasznos típus a karakterlánc String (objektum) Deklaráció String s; Értéket adni idéz jelek között megadott szöveggel lehet: Értékadás String s = "Szervusz világ"; Ha idéz jelet szeretnénk belevinni a szövegbe akkor: Idéz jelek egy karakterláncban String s = "Szervusz \"szép\" világ";

Karakterláncok Karakterláncok Hasonlóan a csomagoló típusokhoz a karakterláncok sem változtathatóak meg. Amikor új értéket adunk, akkor egy új jön létre ugyanazzal a névvel a memóriában. Karakterek száma egy Stringben: Karakterlánc mérete String s = "Szervusz világ"; int meret = s.length();

M veletek M veletek

M veletek számokon Egész típusokon végzett m veletek A következ m veletek értelmezettek egész típusokon: (Precedencia) Növelés, csökkentés: ++, -- Multiplikatív: *, /, % (Szorzás, Maradékos osztás, és maradékos osztás maradéka) Additív: +, - Bitenkénti eltolás: <<, >> (Balra, jobbra) Bitenkénti m veletek:, &,, (Negálás, és, vagy, kizáró vagy) Relációs: ==,!=, <, <=, >, >= Unáris: +, - (el jelek) Értékadás: A változónak új értéket ad. = (Kombinálható más m velettel: +=)

M veletek számokon Racionális típusokon végzett m veletek A következ m veletek értelmezettek racionális típusokon: (Precedencia) Növelés, csökkentés: ++, -- Multiplikatív: *, /, % (Szorzás, Osztás, és maradékos osztás maradéka) Additív: +, - Relációs: ==,!=, <, <=, >, >= Unáris: +, - (el jelek) Értékadás: A változónak új értéket ad. = (Kombinálható más m velettel: +=)

M veletek számokon Érdekességek Java esetén minden értéknek van valamilyen típusa a kódban. Példa egészre Példa valósra 2 2.0 2.0F Ha egészeket osztunk, egészet kapunk eredményül, ha valósakat, akkor valóst. Példa egészre 10 / 3 = 3 Példa valósra 10D / 3 = 3.3333...

M veletek logikai értéken Logikai típusokon végzett m veletek A következ m velek értelmezettek logikai típusokon: Tagadás:! Relációs: ==,!= Logikai és, vagy: &&, Értékadás: A változónak új értéket ad. = (Az érték true vagy false)

M veletek karakterláncokon Karakterláncokon végzett m veletek A következ m veletek értelmezettek karakterláncokon Értékadás: A változónak új értéket ad. = Összef zés: + Több különböz karakterláncot f z össze

Függvények

Bevezetés Függvények bevezetés Olyan (rész)programok, amelyeknek bemen paramétereik vannak m veleteket végeznek valamilyen eredménnyel kimenettel rendelkeznek Minden Java programban van egy függvény, a main függvény, ami a program elindulásakor kezd futni Ha a main függvény futása befejez dik, akkor a program is befejez dik A main további függvényeket hív(hat) meg, illetve a függvények is továbbiakat hívhatnak meg...

Bevezetés Függvények bevezetés Példa main függvényre public static void main(string [] arguments) { int i = 10; int negyzet = i*i; KIIR (negyzet); } Ez a program kiszámolja az i 2, az i = 10 és kiírja.

Függvényhívás részletei Függvényhívás Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(side, height); } Ez a program egy háromszög területét számoló függvényt hív meg.

Függvényhívás részletei Függvényhívás Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(side, height); } Figyeljük meg a függvényhívást!

Függvényhívás részletei Függvényhívás aktuális paraméterek Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(side, height); } Figyeljük meg a függvény aktuális paramétereit!

Függvényhívás részletei Függvényhívás formális paraméterek Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(side, height); } Figyeljük meg a függvény formális paramétereit!

Függvényhívás részletei Függvényhívás paraméterátadás Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(10, 8); } Paraméterek behelyettesítése

Függvényhívás részletei Függvényhívás számítás Területszámítás public double terulet(double 10, double 8) { return (10 * 8) / 2; // = 40 } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(10, 8); } Eredmény kiszámítása

Függvényhívás részletei Függvényhívás visszatérési érték Területszámítás public double terulet(double 10, double 8) { return (10 * 8) / 2; // = 40 } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = 40; } Visszatérési érték

Függvényszignatúra Függvényszignatúra Függvényszignatúra visszatérésitipus fuggvenynev (parameterdeklarációk ) A visszatérés típusát hívják a függvény típusának is A függvény neve bármi, kivéve a nyelv fenntartott szavai A paramétereknél vessz vel elválasztott változódeklarációk A függvény szignatúra alapján használjuk a függvényt

Függvénytörzs Függvénytörzs A függvénytörzs m veleteket végez Használhatja a bemen paramétereket, új változókat,... Benne van egy return, amit a visszatérési típusnak megfelel kifejezés követ ez lesz a függvény visszatérési értéke Lehet több return is, például elágazás esetén A return utasítással befejez dik a függvény, még akkor is, ha van mögötte további utasítás Annak a függvénynek, aminek nincs visszatérési típusa, void a típusa Semmilyen típus, nem hozható létre bel le példány

Paraméterek Paraméterek Formális paraméterek a függvényszignatúrában vannak deklalrálva, új változók! Ezek a függvény hívásakor felveszik az aktuális paraméterek értékét (hogy hogyan azt kés bb) Tehát a formális és aktuális paraméter más-más terület a memóriában. A változónév azonban lehet ugyanaz! A visszatérési érték, a függvény befejeztekor, annak az értékadó utasításnak a jobb oldala lesz, amiben a függvény neve szerepelt A függvények aktuális paraméterei lehetnek további függvényhívások!

Változók láthatósága Változók láthatósága Egy változó láthatósági körének nevezzük azt a részt a programban, ahol az adott változó és általa képviselt memóriaterület elérhet, módosítható. Egy változó hatáskörének nevezzük azt a részt programban, ahol a változó deklarációja érvényben van. Egy függvényen belül deklarált változó csak a függvényen belül látható és arra terjed ki a hatásköre. Egy utasításblokkon belül deklarált változó hasonlóan viselkedik az el z höz. Ezeket lokális változónak hívjuk.

Változók láthatósága Változók láthatósága Léteznek globális változók is, amelyeket több függvényb l el lehet érni, használatuk azonban nem javasolt. Példa a hatáskörre int i = 10; int j = 100; { int i = 50; } i++; j++; Az els i-nek a teljes példára kiterjed a határköre, azonban a bels részben nem látható. A második i csak a bels részben látható és a hatásköre is ugyanaz. Nem engedi látni a küls i-t, elfedi azt Az j a programblokkon belül is látható!

Objektum Orientált Programozás

Valós világ modellezése Valós világ modellezése Az ember a világ megértéséhez modelleket épít, alábbi alapelvekkel Absztrakció az a szemléletmód, amelynek segítségével a valós világot leegyszer sítjük, úgy, hogy csak a lényegre, a cél elérése érdekében feltétlenül szükséges részekre összpontosítunk elvonatkoztatunk a számunkra pillanatnyilag nem fontos, közömbös információktól és kiemeljük az elengedhetetlen fontosságú részleteket Megkülönböztetés az objektumok a modellezend valós világ egy-egy önálló egységét jelöli az objektumokat a számunkra lényeges tulajdonságaik, viselkedési módjuk alapján megkülönböztetjük

Valós világ modellezése Valós világ modellezése Az ember a világ megértéséhez modelleket épít, alábbi alapelvekkel Absztrakció az a szemléletmód, amelynek segítségével a valós világot leegyszer sítjük, úgy, hogy csak a lényegre, a cél elérése érdekében feltétlenül szükséges részekre összpontosítunk elvonatkoztatunk a számunkra pillanatnyilag nem fontos, közömbös információktól és kiemeljük az elengedhetetlen fontosságú részleteket Megkülönböztetés az objektumok a modellezend valós világ egy-egy önálló egységét jelöli az objektumokat a számunkra lényeges tulajdonságaik, viselkedési módjuk alapján megkülönböztetjük

Valós világ modellezése Valós világ modellezése Osztályozás Az objektumokat kategóriákba, osztályokba soroljuk, oly módon, hogy a hasonló tulajdonságokkal rendelkez objektumok egy osztályba, a különböz vagy eltér tulajdonságokkal rendelkez objektumok pedig külön osztályokba kerülnek Az objektum-osztályok hordozzák a hozzájuk tartozó objektumok jellemz it, objektumok mintáinak tekinthet k Általánosítás, specializálás Az objektumok között állandóan hasonlóságokat vagy különbségeket keresünk, hogy ezáltal b vebb vagy sz kebb kategóriákba, osztályokba soroljuk ket

Valós világ modellezése Valós világ modellezése Osztályozás Az objektumokat kategóriákba, osztályokba soroljuk, oly módon, hogy a hasonló tulajdonságokkal rendelkez objektumok egy osztályba, a különböz vagy eltér tulajdonságokkal rendelkez objektumok pedig külön osztályokba kerülnek Az objektum-osztályok hordozzák a hozzájuk tartozó objektumok jellemz it, objektumok mintáinak tekinthet k Általánosítás, specializálás Az objektumok között állandóan hasonlóságokat vagy különbségeket keresünk, hogy ezáltal b vebb vagy sz kebb kategóriákba, osztályokba soroljuk ket

Valós világ modellezése Valós világ modellezése Példa Sok embernek van kutyája különböz névvel és jellemz tulajdonságokkal objektumok (példányok) A kutyák, mint egy állatfaj egyedei sok mindenben hasonlítanak is például mindegyik tud ugatni

Valós világ modellezése Valós világ modellezése Osztályhierarchia Állat Háziállat Vadállat Macska Kutya Tigris Emu Bodri Morzsi Floki

Az OOP elmélete Objektumok és állapotaik Az objektumorientált program egymással kommunikáló objektumok összessége, ahol minden objektumnak megvan a feladata Az objektum: Információt tárol, kérésre feladatokat hajt végre Bels állapota van, üzeneten keresztül lehet megszólítani Objektum = adattagok + m veletek (függvények) Felel s feladatainak korrekt elvégzéséért Az objektum állapota Mindig van egy állapota, amit a mez k (objektumhoz tartozó változók) pillanatnyi értékei írnak le Az objektum m veleteket hajt végre, melyek hatására állapota megváltozhat Két objektumnak ugyanaz az állapota, ha az adattagok értékei megegyeznek

Az OOP elmélete Objektumok és állapotaik Az objektumorientált program egymással kommunikáló objektumok összessége, ahol minden objektumnak megvan a feladata Az objektum: Információt tárol, kérésre feladatokat hajt végre Bels állapota van, üzeneten keresztül lehet megszólítani Objektum = adattagok + m veletek (függvények) Felel s feladatainak korrekt elvégzéséért Az objektum állapota Mindig van egy állapota, amit a mez k (objektumhoz tartozó változók) pillanatnyi értékei írnak le Az objektum m veleteket hajt végre, melyek hatására állapota megváltozhat Két objektumnak ugyanaz az állapota, ha az adattagok értékei megegyeznek

Az OOP elmélete Osztály, példány Osztály (class) Olyan objektumminta vagy típus, mely alapján példányokat (objektumokat) hozhatunk létre Példány (instance) Minden objektum születését l kezdve egy osztályhoz tartozik Életciklusa van megszületik, él, meghal Létrehozásához inicializálni kell speciális függvény, a neve konstruktor Változóknak kezd értéket ad Az objektum m ködéséhez szükséges tevékenységek végrehajtása

Az OOP elmélete Osztály, példány Osztály (class) Olyan objektumminta vagy típus, mely alapján példányokat (objektumokat) hozhatunk létre Példány (instance) Minden objektum születését l kezdve egy osztályhoz tartozik Életciklusa van megszületik, él, meghal Létrehozásához inicializálni kell speciális függvény, a neve konstruktor Változóknak kezd értéket ad Az objektum m ködéséhez szükséges tevékenységek végrehajtása

Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)

Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)

Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)

Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)

Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)

Az OOP elmélete Örökl dés Az állat osztálynak vannak bizonyos tulajdonságai (mez i) és függvényei Ha elkészítjuk a háziállat osztályt, nyilvánvaló, hogy sok olyan tulajdonsága lesz, mint ami az állatnak Lehet ség van az OOP nyelvekben a háziállat osztályt az állat osztály leszármazottjaként létrehozni, ekkor az összes mez t és függvényt örökli a háziállat, ami az állatban megvolt Természetesen további függvényeket és mez ket vehetünk a háziállatba... (Az örökl dés, dinamikus kötés és polimorzmus (statikus és dinamikus típus) nagyon messzire elvinne minket, így elméletben többr l nem esik szó. Fontos megjegyezni azonban, hogy a fentebbiek alapelvek, ennél sokkal színesebb paletta áll rendelkezésre)

Az OOP gyakorlata Java-ban Java osztály Osztály létrehozása public class osztálynév extends szül [és még más] { public int mezonev; private String mezonev;... public osztályneve (paraméterek ) { // Konstruktor } public int fuggvenyneve (paraméterek ) {...}... }

Az OOP gyakorlata Java-ban Néhány lehetséges kulcsszó A mez k és függvények el tt néhány kulcsszó: public: mindenki számára elérhet private: csak az adott osztályban protected: csak az adott osztályban és leszármazottjaiban nincs kulcsszó: adott osztályban, leszármazottjaiban és a csomagban static-kal jelöljük az osztálymez t illetve függvényt Ha egy mez final, akkor nem módosítható Ha egy osztály final, akkor nem örökölhet bel le tovább (Van még: abstract, synhronized, volatile, native... )

Az OOP gyakorlata Java-ban Java osztály Kutya osztály public class Kutya extends Allat { public String nev; public String fajta; public Integer eletkor; private Date [] oltasok_ideje; private String [] oltasok_neve; public Kutya () { oltasok_ideje = new Date[10]; oltasok_neve = new String[10]; }

Az OOP gyakorlata Java-ban Java osztály Kutya osztály public void ugat() { } public void megy() { } public void oltastkap(string s, Date mikor) { } }

Az OOP gyakorlata Java-ban UML diagram +Név: String +Fajta: String +Életkor: Integer #Oltások ideje: Date [] #Oltások neve: String [] +ugat(): void +megy(): void Kutya +oltástkap(mikor:date,mit:string): void

Java objektumok Java Objektum Az el z kutya osztály, mint típus az alábbiak szerint deklarálható Deklaráció Kutya bodri; Ez még csak deklaráció, a tényleges példány létrehozása a new kulcsszóval történik. Példányosítás bodri = new Kutya(); Ekkor a memóriában létrejön egy új Kutya objektum, valamint lefut annak a konstruktora. Miért m ködik ez így?

Java objektumok Java Objektum Az el z kutya osztály, mint típus az alábbiak szerint deklarálható Deklaráció Kutya bodri; Ez még csak deklaráció, a tényleges példány létrehozása a new kulcsszóval történik. Példányosítás bodri = new Kutya(); Ekkor a memóriában létrejön egy új Kutya objektum, valamint lefut annak a konstruktora. Miért m ködik ez így?

Java objektumok Java Objektum Amikor az Object osztály bármely leszármazottját (legyen az tömb, String, Double, Kutya... ) deklaráljuk, akkor a változó, ami lefoglalásra kerül a memóriában egy referenciát (memóriacímet) tartalmaz értékként Az referencia alapértelmezésben null! Azaz a változó képes egy adott típusú objektumra hivatkozni, de éppen nem hivatkozik egyre sem Ahhoz hogy hivatkozzon létre kell hozni egy új példányt, vagy egy meglév hivatkozást kell átadni értékként (egy meglév példányt) Példányosítás Kutya morzsi = new Kutya(); Kutya rex = morzsi;

Java objektumok Java Objektum A második miatt egyetlen Kutya példány van a memóriában, csak két névvel is hivatkozhatunk rá: morzsi és rex Egy objektumváltozó értéke Java-ban egy referencia a memóriában!

Java objektumok Java Objektum Egy objektumpéldány mez it és tagfüggvényeit a következ módon lehet elérni, meghívni Tagfüggvények, mez k bodri.ugat(); String kutyaneve = bodri.nev; Természetesen ez csak megfelel látható mez kre és függvényekre igaz. Egy osztály osztálymez it és függvényeit az osztály nevén keresztül célszer elérni Osztálymez Kutya.ALAPÉRTELMEZETTUGATÁSIHANGERŽ

Java objektumok Java Objektum Egy objektumpéldány mez it és tagfüggvényeit a következ módon lehet elérni, meghívni Tagfüggvények, mez k bodri.ugat(); String kutyaneve = bodri.nev; Természetesen ez csak megfelel látható mez kre és függvényekre igaz. Egy osztály osztálymez it és függvényeit az osztály nevén keresztül célszer elérni Osztálymez Kutya.ALAPÉRTELMEZETTUGATÁSIHANGERŽ

Referencia következményei Következmények Java nyelven, amikor függvényt hívunk, az aktuális paraméter értéke átmásolódik a formális paramétert jelent változóba. (Létrejön(nek) a függvényszignatúra szerinti új változó(k), és az értékük az lesz, ami a függvényhíváskor az aktuális paraméter volt.) Objektumok esetén ez a referencia lesz! Nem jön létre másolat az objektumról, hanem pontosan ugyanazon az objektumon dolgozunk, mint ami az aktuális paraméter. (Primitívek esetén létrejön másolat és a másolaton dolgozunk.) Csomagolók esetén nincs másolat, mivel azonban változtatáskor új jön létre, a tényleges hatás ugyanaz, mint a primitívek esetén.