Adatszerkezetek és algoritmusok 2. El®adás Típusok, osztályok
2012. október 18.
Ismétlés
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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!
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Típusok és m¶veletek
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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: 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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)
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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)
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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® ...
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 ...
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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, . . .
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Adatok ábrázolása
Valós számok a memóriában
A valós számok trükkje:
X
∗ 2Y
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) Az
X
23db
minden esetben 1
}| { z . 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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
+ 1, +1=0
Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 akkor is kapunk eredményt, mégpedig azt hogy 255 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 6= 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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
+ 1, +1=0
Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 akkor is kapunk eredményt, mégpedig azt hogy 255 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 6= 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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
+ 1, +1=0
Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 akkor is kapunk eredményt, mégpedig azt hogy 255 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 6= 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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
+ 1, +1=0
Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 akkor is kapunk eredményt, mégpedig azt hogy 255 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 6= 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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
+ 1, +1=0
Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 akkor is kapunk eredményt, mégpedig azt hogy 255 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 6= 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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
+ 1, +1=0
Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 akkor is kapunk eredményt, mégpedig azt hogy 255 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 6= 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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 Elemi típusok
Összetett típusok
Iterált Unió Direktszotzat ...
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Mutató
Skalár Diszkrét
Valós
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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) 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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.
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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];
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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.)
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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;
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
⇒
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"; 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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();
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
M¶veletek
M¶veletek
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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:
+, <<, >> (Balra, m¶veletek: ∼, &, |,
Bitenkénti eltolás: Bitenkénti
jobbra)
(Negálás, és, vagy, kizáró vagy)
==, !=, <, <=, >, >= +, - (el®jelek)
Relációs: Unáris:
Értékadás: A változónak új értéket ad. (Kombinálható más m¶velettel: 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
+=)
=
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)
+, Relációs: ==, !=, <, <=, >, >= Unáris: +, - (el®jelek) Additív:
Értékadás: A változónak új értéket ad. (Kombinálható más m¶velettel:
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
+=)
=
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
Példa valósra
10 / 3 = 3
10D / 3 = 3.3333 ...
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Függvények
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 . . .
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Bevezetés
Függvények bevezetés
main függvényre public static void main(String [] arguments) { int i = 10; int negyzet = i*i; KIIR (negyzet); } Példa
2
Ez a program kiszámolja az i , az i
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
= 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. 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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! 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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! 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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! 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 A
return
return
is, például elágazás esetén
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, típusa Semmilyen típus, nem hozható létre bel®le példány
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
void
a
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!
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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.
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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ó! 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Objektum Orientált Programozás
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Valós világ modellezése
Valós világ modellezése
Osztályhierarchia
Állat
Háziállat
Macska
Bodri
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Vadállat
Kutya
Morzsi
Tigris
Floki
Emu
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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) 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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) 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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) 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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) 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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) 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 állat nak 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állat ba . . .
(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) 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 ) { ...} ...
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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
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 . . . ) Ha egy mez®
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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]; } 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Az OOP gyakorlata Java-ban
Java osztály Kutya osztály
}
public void ugat() { } public void megy() { } public void oltastkap(String s, Date mikor) { }
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Az OOP gyakorlata Java-ban
UML diagram
Kutya
+Név: String +Fajta: String +Életkor: Integer #Oltások ideje: Date [] #Oltások neve: String [] +ugat(): void +megy(): void +oltástkap(mikor:Date,mit:String): void
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 annak a konstruktora. Miért m¶ködik ez így? 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Kutya
objektum, valamint lefut
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 annak a konstruktora. Miért m¶ködik ez így? 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Kutya
objektum, valamint lefut
Java objektumok
Java Objektum Object osztály bármely leszármazottját (legyen az tömb, String, Double, Kutya . . . ) deklaráljuk, akkor a változó, ami
Amikor az
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; 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Java objektumok
Java Objektum
A második miatt egyetlen
Kutya példány van a morzsi és rex
memóriában, csak
két névvel is hivatkozhatunk rá:
Egy objektumváltozó értéke Java-ban egy referencia a memóriában!
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
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.
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Referencia következményei
Következmények public void fuggveny(Double d, int i, Kutya k) { d = 5.0; i = 10; k.oltastkap("Veszettség", new Date()); } public static void main() { Double dd = 2.0; // → Double d = new Double(2.0) int ii = 10; Kutya kk = new Kutya(); fuggveny(dd, ii, kk); } 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Referencia következményei
Következmények
...fv(Double d, int i, Kutya k) { d = 5.0; i = 10; k.oltastkap(...); } public static void main() { Double dd = 2.0; int ii = 10; Kutya kk = new Kutya(); fuggveny(dd, ii, kk); } 2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Híváskor új változóba másolódnak az értékek (objektumnál referenciák) Új példány, új helyen létrejön Eleve másik memóriaterület Megváltoztatjuk az állapotot . Itt indul a program . Létrejön egy Double példány Létrejön egy int Létrejön egy Kutya példány Függvény hívása Program vége
Összefoglalás
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Összefoglalás
Összefoglalás Típusok Értékek és a rajta értelmezett m¶veletek összessége Vannak számok, karakterek, objektumok, logikai értéke, . . . Végül, zikai szinten, minden egyes és nulla Az objektum változók referenciát tárolnak Típusok Java-ban Függvények Kis részprogramok Függvényszignatúra Paraméterek átadása, visszatérési érték
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Összefoglalás
Összefoglalás Típusok Értékek és a rajta értelmezett m¶veletek összessége Vannak számok, karakterek, objektumok, logikai értéke, . . . Végül, zikai szinten, minden egyes és nulla Az objektum változók referenciát tárolnak Típusok Java-ban Függvények Kis részprogramok Függvényszignatúra Paraméterek átadása, visszatérési érték
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Összefoglalás
Összefoglalás
Objektumok, osztályok Valós világ absztrakt reprezentálása Osztályok hasonló objektumok csoportosítása, minta Metódusok, mez®k Láthatóság Objektumok Java-ban Érték szerinti paraméterátadás következményei
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok
Felhasznált el®adások
Felhasznált el®adások
Adatszerkezetek és algoritmusok 1. el®adás Nyékyné Gaizler Judit Bevezetés a programozásba I. 4-6 el®adás Feldhoer Gergely Programozás nyelvek és módszerek: OOP, Típusok el®adás Nyékyné Gaizler Judit Programozás nyelvek és módszerek 1. gyakorlat anyaga Tornai Kálmán
2. El®adás Típusok, osztályok Adatszerkezetek és algoritmusok