1 / 171

Programozási technológiák

Előadó: dr. Nagy Mihály PHD, főiskolai tanár. Programozási technológiák. 2007/2008. 1. Az Objektumorientált programozás (OOP) főbb jellemzői. Objektum, osztály.

melinda
Download Presentation

Programozási technológiák

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Előadó: dr. Nagy Mihály PHD, főiskolai tanár Programozási technológiák 2007/2008

  2. 1. Az Objektumorientált programozás (OOP) főbb jellemzői

  3. Objektum, osztály • Objektum: Információkat tárol, és kérésre feladatokat hajt végre. Logikailag összetartozó adatok és rajtuk dolgozó algoritmusok összessége: • adatok • metódusok • Az objektumot üzenetek (kérelmek) által lehet megkérni a feladatok elvégzésére. (Ez egy metódus végrehajtását jelenti.) • Osztály (class): Objektumtípus, amely alapján példá-nyokat, azaz objektumokat hozhatunk létre.

  4. Előnyök, célok • A szoftverfejlesztés során az együtt változó részek elkülöníthetők • Projektek közötti újrahasznosíthatóság növelése

  5. Konstruktor, példánytag, osztálytag • Az objektumot létre kell hozni, és inicializálni kell. Az inicializálást végző metódust konstruktornak nevezzük. • További fogalmak: • példányváltozó, • példánymetódus, • osztályváltozó (közös változó), • osztálymetódus (objektum létrehozása nélkül is tud dolgozni, csak az osztályváltozókat manipulálhatja)

  6. OOP jellemzők • Bezárás, az információ elrejtése: az adatokat csak interfészeken (metódusok) keresztül lehet elérni. • Öröklődés: az utód osztály örökli az ős adatait, metódusait, valamint tartalmazhat újakat, és felülírhat régi metódusokat. • Polimorfizmus – többalakúság: ugyanarra az üzenetre (kérelemre), azaz metódus hívásra, különböző objektumok különbözőképpen reagál-hatnak.

  7. Láthatóság • Az osztály deklarálásakor megadhatjuk, hogy mely adatokat lehet az objektumon kívülről elérni • Nyilvános (public): kívülről elérhető • Védett (protected): hozzáférés csak saját és az örökös metódusok számára • Privát (private): hozzáférés csak saját metó-dusok számára

  8. 2. A Java nyelv

  9. OO nyelvek • Simula-67 • Smalltalk (70’ eleje, XEROX) • Hibrid nyelvek: C++, Turbo Pascal • Java: ’91-96, SUN MicroSystem

  10. A Java főbb jellemzői • C++-- kevesebb nyelvi eszköz, szigorúbb, kötöttebb, kevesebb hibalehetőség • Hordozható kód: egy virtuális gépen (JVM, Java Virtual Machine) futó ún. bájtkód. Nincsenek implementációfüggő elemek. • Rohamos fejlődés kulcsa a JVM beépítése a Web böngészőkbe. • Fejleszthető: • Alkalmazás (application) • Applet • Servlet • JSP (Java Server Pages)

  11. JDK (Java Development Kit) • Fejlesztői és futtató környezet (java.sun.com) Részei: • API (Application Programming Interface) – osztály-könyvtár (a Java egyik ereje a rengeteg kész osztály) • Fordító • Értelmező • Appletnéző • Help, stb • Újabb neve: pl. J2SE (Java 2 Platform, Standard Edition) • Csomag: logikailag összetartozó osztályok. Csomag struktúra – könyvtár struktúra.

  12. public class Hello{ public static void main(String[] args){ System.out.println("Hello World!"); }} • A Hello nevű osztály publikus, más csomagokból is látni lehet. • A main metódus a program belépési pontja. • Publikus • A static kulcsszó azt jelenti, hogy ez osztálymetódus • void: nincs visszatérési értéke, azaz eljárás • String[] args: a parancssor paraméterek • A System egy osztály, amelyben található egy out objektum, melynek a println egy metódusa.

  13. Kiírás, beolvasás import extra.*; //importálni kell azon osztályokat, csomagokat, //amelyekre hivatkozunk ... int egysegar, mennyiseg, ar; //4 b. egész típus egysegar=Console.readInt("Egységár: "); mennyiseg=Console.readInt("Mennyiség: "); ar=egysegar*mennyiseg; System.out.println("Ön " + mennyiseg + " l benzint tankolt összesen " + ar + "Ft értékben"); //a System osztály a java.lang csomagban van //benne, amit nem kell importálnunk

  14. Kiírás, beolvasás • A Console osztály metódusai (függvényei): int readInt() int readInt(String str) Hasonlóan: readLong, readDouble, readChar, readLine • A print és println metódusoknak egyetlen paramé-terük lehet, de az többféle típusú. Ha egyszerre több dolgot is ki szeretnénk íratni, akkor ezeket össze kell adnunk. A Java automatikusan szöveggé konvertál. • Pl. print("a+b=" + a + b) • Pl. print("a+b=" + (a + b))

  15. A program alkotóelemei • Azonosítóban betűk, számjegyek, a _ jel és a valuta szimbólumok szerepelhetnek. Számjeggyel nem kezdődhet. Akár ékezetes betűt is tartalmazhat (unikód), de ezt inkább kerüljük. • Kulcsszó • Literál: állandó, amely beépül a program kódjába. Lehet: • egész (automatikusan int típusú, lehet hexad., decimális, oktális), • valós (pl: 2.3 2. .3 6e23), • logikai (true, false), • karakter (pl. '?', '\u1ac5' ), • szöveg (pl. "valami"), • null. Vezérlő szekvenciák: \n \t \" \' \\ pl. println("Egy idézet: \"Talpra magyar!\"")

  16. Java típusok • Primitív típusok: (numerikus vagy logikai) • byte 1 b. -128 .. 127 • short 2 b. -32768 .. 32767 • int 4 b. kb -2*109 .. 2*109 • long 8 b. kb. -1019 .. 1019 • float 4 b. • double 8 b. • char 2 b. • boolean • Referencia típus: olyan mutató, mely egy objektum hivatkozását tartalmazza. Numerikus típusok

  17. A char is numerikus típus char c; int a; c=65; System.out.println(c); c='A'+1; System.out.println(c); a=c+1; System.out.println(a);

  18. float • 4 bájt • Kb. 1.4E-45 … 3.4E+38 • 6-7 jegy pontosság • double • 8 bájt • Kb. 5E-324 … 1.8E+308 • 14-15 jegy pontosság

  19. Változó deklarálás • Deklaráló utasítás • Adható kezdőérték is (inicializálás). • Pl: int a, b; double x, y = 2.4;

  20. Forrásprogram szerkezete • A forrásállomány (fordítási egység) egy vagy több osztályból állhat. • A forrásállomány neve a main metódust tartalmazó egyetlen publikus osztály neve lesz. • Fordításkor több class kiterjesztésű állo-mány keletkezhet.

  21. import java.utils.*; import extra.*; //Egy vagy több osztály deklarálása, a sorrend mindegy class C1{ ... } class C2{ ... } ... public class Prog{ ... public static void main(String[] args){ ... } ... }

  22. Operátorok • Unáris postfix és prefix operátorok • [ ] tömbképző • . minősítő • ( ) metódus képző • ~, ! bitenkénti, ill. logikai tagadás00 • new példányosító • (típus)kifejezés típuskényszerítő • +, - előjel • ++, -- léptető, pl. i++ vagy ++i mindkettő növeli i értékét, de az első értéke i eredeti, míg a második i megnövelt értéke lesz.

  23. ++, -- int a = 0, b, c; b = ++a; a = 0; c = a++; c = ++b + a++; c = a+++++b; c = a++ + ++b;

  24. Multiplikatív operátorok • *, / • % maradékos osztás • Ha az operandusok egészek, akkor az eredmény is egész, ha legalább az egyik operandus valós, akkor az eredmény is valós. • Pl.int ossz = 2 + 3; double atlag = ossz / 2; • Megj. A maradékképzés valós számokra is alkalmazható

  25. Additív operátorok +, - • Relációs operátorok (az eredmény boolean típusú lesz) <, <=, >, >=,==, != • Logikai operátorok • !nem • &, &&és(teljes, ill. rövid kiértékelésű) • |, ||vagy • ^kizáró vagy • Bitenkénti operátorok • ~komplementálás • &, |, ^ • <<,>>,>>>léptetések (>>>: minden esetben 0 lép be)

  26. Feltételes operátorok (feltétel) ? kifejezés1: kifejezés2pl. kamat = (fiz>200000)?10:0; • Értékadó operátorok =, +=, -=, *=, /=, %= … Az összetett értékadás szintaktikája: változóoperátor = kifejezés a += b szemantikája: változó = (típus) változóoperátor kifejezésa = a + b ahol típus a változó típusa, amelyet rákényszerí-tünk a jobboldalra.

  27. Értékadó operátorok • Vigyázzunk az összetett ill. a „hagyományos értékadó utasítások nem minden esetben teljesen egyformák! int a=10; a+=5; megegyezik az a=a+5 ut.-al, mindkét oldal int a+=1.5; nem egyezik meg az a=a+1.5 ut.-al, mely szintaktikai hibás, hiszen a jobb oldal double • Lehetséges a többszörös értékadás, pl: a=b=5;

  28. Kiértékelés • Egy kifejezés kiértékelési sorrendjétmeg-határozzák: • zárójel • prioritás • asszociativitás (balról – jobbra vagy jobbról – balra szabály)

  29. Java utasítások • deklaráló; pl. int a; • értékadó; pl. a = b * 2; • postfix és prefix növelő és csökkentő; pl. a++; • metódushívás, pl. System.out.println("Hahó!"); • példányosítás, pl. auto = new Auto("ABC123"); • Programvezérlő, pl. elágazások, ciklusok • üres: ;

  30. Java utasítások • Minden utasítást pontosvessző zár le. • Blokk (vagy összetett utasítás): { ... }

  31. Típuskonverziók • A Java erősen típusos nyelv • Típuskonverzió lehet • automatikus (implicit) • kényszerített (explicit): (típus)kifejezéstype cast illetve • szűkítő • bővítő

  32. Primitív típusok esetén egy szűkebb adattípus értéke konvertálható egy bővebb adattípus értékébe információ-vesztés nélkül. Ez általában automatikus. int i;double d;byte b;short s; b + s //implicit bővítő konverzió (int) d = i; //implicit bővítő konverzió i = d; //szintaktikai hiba i = (int)d; //explicit szűkítő konv.

  33. Numerikus operátorok típuskonverziói • Automatikus konverziók a következő szabályok szerint: • Unáris operátorok: ha az operandus int-nél szűkebb, akkor int-é konvertál, egyébként nem konvertál • Bináris operátorok: mindkét operandust a kettő közül bővebb, de minimum int-é konvertálja (Az egész literál automatikusan int, a valós literál automatikusan double)

  34. Értékadó utasítás • változó = kifejezés; • A kifejezés típusának értékadás szerint kompatíbilisnek kell lenni a változó típusával: • azonos típusok • a jobb oldal szűkebb, akkor implicit bővítő konverzió • a bal oldal byte, short vagy char, a jobb oldal int, és a fordító el tudja dönteni, hogy a jobboldal belefér a baloldalba, akkor implicit szűkítő konverzió. pl. byte b = 100; (az egész literál automatikusan int típusú). • minden más esetben fordítási hiba keletkezik

  35. Metódushívás • Osztály.metódus(paraméterek) pl. y=Math.sin(x); • Objektum.metódus(paraméterek)pl. hossz=szoveg.length(); • Saját osztályból elég csak a metódus neve: metódus(paraméterek) • Egy metódus lehet eljárás- vagy függvényszerű. • Túlterhelés (overloading): lehet több azonos nevű metódus, melyek a paraméterezésben és/vagy a visszatérési érték típusában térhetnek el egymástól. Pl. float max(float a, float b) illetve int max(int a, int b)

  36. A java.lang.Math osztály • Java API (Application Programming Interface): rengeteg csomag, osztály • Nem kell importálni. • Konstansok: E, PI • Függvények: abs, asin, sin, cos, atan, tan, exp, log, max, min, pow, sqrt, toDegrees, toRadians, random, round…

  37. Java API dokumentum részlet

  38. min • public static int min(int a, int b) • Returns the smaller of two int values. That is, the result the argument closer to the value of Integer.MIN_VALUE. If the arguments have the same value, the result is that same value. • Parameters: • a - an argument. • b - another argument. • Returns: • the smaller of a and b. • See Also: • Long.MIN_VALUE

  39. Szelekciók - if utasítás if(a>b) c=a;else c=b; if(feltétel)utasítás1;elseutasítás2; • feltétel: logikai kifejezés • az else ág elhagyható • a feltétel után nincs pontosvessző • az utasítás esetén viszont van pontosvessző • minden feltétel zárójelben • egy ágban több utasítás: blokk {...} • egymásba ágyazás

  40. Szelekciók - switch utasítás switch(kifejezés){ case érték1: utasítások; break; case érték2: utasítások; break; ... default: utasítások;} • akkor alkalmazható, ha egy kifejezés jól meghatározott, különálló értékeire szeretnénk bizonyos utasításokat végrehajtani • kifejezés: byte, short, int vagy char • a break hatására a switch blokk végére kerül a vezérlés, e nélkül a következő case ágra kerülne a vezérlés • egy case kulcsszóhoz csak egy érték tartozhat

  41. Szelekciók - switch utasítás switch(pont){ case 1: case 2: case 3: System.out.println("Elégtelen"); System.out.println("Készüljön tovább!"); break; case 4: System.out.println("Elégséges"); break; case 5: System.out.println("Közepes"); break; case 6: System.out.println("Jó"); break; default: System.out.println("Jeles"); }

  42. Iterációk - while utasítás while(feltétel)utasítás; • Amíg a feltétel igaz, újból végrehajtja az utasítást, ha hamis, akkor a ciklust követő utasításra lép. • Több utasítás esetén: blokk { ... } Példa: Bankba tesszük a pénzünket kamatozni, és addig tartjuk bent, amíg milliomosok nem leszünk. A program számolja ki, hogy hány évet kell várnunk.

  43. Iterációk - while utasítás import extra.*; public class Milliomos1{ public static void main(String[]args){ final double KAMAT=8.5; //konstans int ev=0; int penz=Console.readInt("Összeg: "); while(penz<1000000){ penz*=1+KAMAT/100; //Ft-ra kerekít ev++; } System.out.println(ev+ " ev mulva leszunk milliomosok!"); } }

  44. Iterációk - do...while utasítás doutasítás;while(feltétel) • Amíg a feltétel igaz, újból végrehajtja az utasítást, ha hamis, akkor a ciklust követő utasításra lép. • Több utasítás esetén: blokk { ... } Példa: Bankba tesszük a pénzünket kamatozni, és addig tartjuk bent, amíg milliomosok nem leszünk. A program számolja ki, hogy hány évet kell várnunk.

  45. Iterációk - do...while utasítás import extra.*; public class Milliomos2{ public static void main(String[]args){ final double KAMAT=8.5; //konstans int ev=0; int penz=Console.readInt("Összeg: "); do{ penz*=1+KAMAT/100; //Ft-ra kerekít ev++; }while(penz<1000000); System.out.println(ev+ " ev mulva leszunk milliomosok!"); } }

  46. Iterációk - for utasítás for(inicializálás; feltétel; léptetés)utasítás; • inicializálás: egy vagy több utasítás vesszővel elválasztva, mely(ek) egyszer hajtódik végre a ciklusmagba való első belépés előtt. Pl. ciklusváltozó deklarálása, inicializálása. A ciklusváltozó típusa tetszőleges. • feltétel: amíg igaz, újból végrehajtja az utasítást, ha hamis, akkor a ciklust követő utasításra lép. • léptetés: egy vagy több utasítás vesszővel elválasztva, mely(ek) a ciklusmag minden egyes lefutása után automatikusan végrehajtódik. Általában a ciklusváltozót szokás itt növelni vagy csökkenteni.

  47. Iterációk - for utasítás A while ciklus egy speciális esetének tekinthető: for(inicializálás; feltétel; léptetés)utasítás; inicializálás;while(feltétel){utasítás;léptetés}

  48. Iterációk - for utasításpéldák for(int i=1; i<=10; i++) System.out.print("*"); for(int i=1; i<=10; i++){ for(int j=1; j<=10; j++) System.out.print("*"); System.out.println();}

  49. for(char c='A'; c<='Z'; c++) System.out.print(c+" "); //(c+' ') esetén a kódokat írja ki for(char n='A',k='a'; n<='Z'; n++,k++) System.out.print(n+" "+k+" "); for(double d=500000; d<=1000000; d*=1.1) System.out.println(d);

More Related