Tartalmi kivonat
Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 1.ELŐADÁS 2014-2015 tavasz Java bevezetés, nyelvi alapelemek Előadás tematika 2 1.Előadás: 2. Előadás: 3. Előadás: 4. Előadás: 5. Előadás: Bevezetés a Java nyelvbe: Java történet, Java nyelv tulajdonságai, Szintaxis, Programozói környezet, Egyszerű példák A Java nyelv alapelemei: változók, konstansok, metódusok, osztályok, objektumok, tömbök, vezérlési szerkezetek, operátorok. Csomagok használata és importálása. Objektumorientált programozás Javá-ban: Az osztályok részletes ismertetése. Példányváltozók, metódusok, metódusok hívása, metódus nevek túlterhelése objektumok használata, hozzáférési kategóriák. Statikus tagok: osztályváltozók, osztálymetódusok Konstruktorok, túlterhelés, láthatóság, getter-setter metódusok. Objektumorientált programozás Javá-ban: Konstruktorok, inicializáló blokkok, destruktor jellegű metódusok. Egységbe
zárás, öröklődés, polimorfizmus, absztrakt osztályok és metódusok. Interfészek. Interfészek közötti öröklődés, interfészek implementálása Rendező interface-ek: Comparator, Comparable; Interface készítés; equals() és hashCode() felüldefiniálása. Kivételkezelés Javá-ban Grafikus kezelői felület létrehozása (Java AWT) és esemény kezelés Az AWT csomag, Layout manager, AWT komponensek, Appletek készítése 6. Előadás: Grafikus kezelői felület létrehozása (Java Swing) SWING csomag, SWING komponensek 7. Előadás: Java Input/Output: Csatornák, leképzés fizikai adatszerkezetre, szűrők, véletlen elérésű file-ok, kapcsolat a file rendszerrel, kivételek kezelése. Sorosítás 8. Előadás: Hálózati alkalmazások készítése A java.net package, ServerSocket, Socket, és DatagramSocket osztályok 9. Előadás: 10. Előadás: 11. Előadás: Szálak. Szálak jellemzői, létrehozása, vezérlése Szinkronizálás Java Kollekciók és
generikus típusok Projektek védése Labor tematika 3 Nagyjából követi az előadás tematikát. Kitűzött feladatok közös illetve egyéni megoldása. Házi feladatok bemutatása Fejlesztési eszközök: JDK 8 (Java Platform, Standard Edition) (http://www.oraclecom/technetwork/articles/javase/i ndex-jsp-138363.html) IDE szerkesztő: NetBeans https://netbeans.org/ http://www.oraclecom/technetwork/articles/javase/index- jsp-138363.html Labor tematika – Fejlesztési eszközök 4 Egyéb fejlesztési eszközök: Eclipse https://eclipse.org/home/indexphp IntelliJ IDEA https://www.jetbrainscom/idea/ UML eszközök: Visual Paradigm (Integrálható Netbeans-be, Eclipse-be) ArgoUML OpenAmeos Könyvészet és dokumentáció 5 Könyvtári könyvek Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt, Budapesta, 2002. Kathy Sierra, Bert Bates:
Agyhullám: Java, Kiskapú, 2011. Könyvészet és dokumentáció 6 Könyvtári könyvek Antal Margit: Objektumorientált programozás, Scientia Kiadó, 2007 Más jegyzet: http://nagygusztav.hu/sites/default/ files/csatol/java programozas 1.3p df Könyvészet és dokumentáció 7 Hasznos linkek http://docs.oraclecom/javase/7/docs/ http://docs.oraclecom/javase/tutorial/ http://www.tutorialspointcom/java/ http://www.learnjavaonlineorg/ http://www.javatpointcom/ Könyvészet és dokumentáció 8 Előadások, labor feladatok, egyéb dokumentációk megtálalhatok az alábbi linken: http://www.emtesiculorumro/~pallaszlo/oktatas huhtml (Java programozás) Vizsgakövetelmények 9 Felmérési mód: kollokvium Zárthelyi: 60% (11. hét (Labor)) Gyakorlat + Elmélet Projekt: 30% (védés - 11. hét (Előadás)) Házi feladat: 10% (2 hetes határidő) Mind a zárthelyi és projekt átmenő (5-ös) kell legyen a sikeres vizsgához
Labor óra: max 3 hiányzás engedélyezett Részletes követelmények 10 1.Előadás Tartalom: Java történet 1. 2. Java nyelv tulajdonságai 3. Programozói környezet 4. Java nyelv alapelemei: változók, konstansok, vezérlési szerkezetek, operátorok, metódusok, osztályok, objektumok, tömbök, csomagok használata Programozási nyelvek rangsor 2014 11 TIOBE IEEE Spectrum Java nyelv bevezető a SUN Microsystems által kifejlesztett általános célú, objektumorientált programozási nyelv A fejlesztések a ‘90-es évek elején kezdődtek és folytatódtak egészen napjainkig 2009-ben az Oracle felvásárolta a SUN céget 2011-ben, Java 1.7-es verzió az Oracle gondozásában 2014-ben, 1.8-as verzió Szlogen: „write once, run anywhere” Java nyelv jellemzői Egyszerű Szintaxisa hasonlít a C, C++ nyelvekre, de számos elemet egyszerűsítettek. Automatikus memória kezelés Objektumorientált Elosztott
Támogatja a HTTP, FTP protokollokat Robusztus, biztonságos Nincsenek pointerek Java nyelv jellemzői Architektúra semleges, hordozható Bájtkódot használ, amit a virtuális gép futtat Interpretált Just-In-Time (JIT) compiler Többszálú Párhuzamosításra lehet használni, ami hasznos lehet főleg több processzoros gépek esetén Java nyelv jellemzői A Java forráskód .java kiterjesztésű A forráskód .class kiterjesztésű fájlokba fordítódik A .class fájl bájtkódot tartalmaz (nem natív kód) A bájtkódot a Java Virtuális Gép (Java Virtual Machine) hajtja végre Java nyelv jellemzői A Java VM (JVM) tetszőleges operációs rendszerre telepíthető, ezért ugyanaz a bájtkód (.class) mindegyik operációs rendszeren fut Java kronológia 1991: James Gosling, Oak (tölgyfa) nyelv 1996: JDK 1.0, fordító, virtuális gép, javac, appletek 1997: JDK 1.1 1988: J2SE 1.2, esemény
kezelés, JIT 2000: J2SE 1.3, J2EE, J2ME, JDBC, stb 2002: J2SE 1.4 2004: J2SE 5.0, generikus osztályok 2006: Java SE 6 2011: Java SE 7 2014: Java SE 8 Java szabványok Java Standard Edition (J2SE) Java Enterprise Edition (J2EE) Kliens alkalmazások, appletek készítése Szerver oldali alkalmazások készítése (Java Servlets, Java Server Pages) Java Micro Edition (J2ME) Mobil alkalmazások készítése Java keretrendszer – Java SE 8 19 Java nyelv Eszközök, Java API javac, java, javadoc, jar, JConsole, stb. Felhasználói felületek JavaFX, AWT, Swing Integration libraries JDBC Java Virtuális gép Java keretrendszer – Java SE 8 20 Java keretrendszer – Java SE 8 21 Java platform leegyszerűsítve: Java VM Java API (Application Programming Interface): Sok használatra kész szoftverkomponenst tartalmaz: csomagokba szervezett osztályokat es interfészeket Java környezet 22 Java programok
futtatása Elegendő a JRE (Java Runtime Environment) Java programok fejlesztése Java Development Kit (JDK) Tartalmazza IDE: a JRE-t és egyéb eszközöket: javac: Java fordító java: futtatóprogram javadoc: dokumentáció generáló jar: JAR fájlok kezelésére szolgál pld. NetBeans Forrásprogram(.java) szerkezete 23 Csomagok importálása Main metódus: a program belépési pontja App a fordítási egység egyetlen publikus osztálya Forrásprogram 24 Egy forrásfájl neve a fájlban implementált osztály nevével egyezik meg Ha a megvalósított osztály valamilyen csomagban (package) van, akkor a fájl a package nevével azonos alkönyvtárba kell elhelyezni Fordítás, futtatás parancssorból 25 Fordításhoz használható a javac parancs eloadasokE1Hello.java Futtatás a java paranccsal történik Példa: javac Példa: java eloadasok.E1Hello A Path környezeti változó beállítása szükséges
Példa: set PATH=%PATH%;c:ProgramFilesJavajdk1.80 31in Példa – Hello World!, NetBeans-ben 26 Példa – Hello World!, NetBeans-ben 27 Szerkesztés Futtatás, kimenet: 28 A Java nyelv alapelemei Azonosítók 29 A Java az Unicode karakterkészletet használja Betűvel kezdődik – betűvel vagy számmal folytatódik Case-sensitive, azaz különböznek a kis- és nagybetűk Az azonosítók hossza nincs korlátozva A nyelv kulcsszavai nem lehetnek azonosítók Megjegyzések 30 Javában a megjegyzés (comment) két típusú lehet: Egysoros megjegyzés: // Ez egy egysoros megjegyzes Többsoros megjegyzés: /* */ Dokumentációs megjegyzés: /* / Literálok 31 Literál: egy állandó, amely beépül a program kódjába Egész literál: Decimális: +125, -12 Oktális: 021, 077 Hexadecimális: 0xa1, 0xff Valós literál Tizedes: 3.14 Lebegőpontos: -3.4e12 Karakter literál: ‘a’, ‘X’, ‘u0041’, ‘ ’
Szöveg literál: “almafa” Kivételes karakterek 32 Egyszerű típusok (primitív) 33 boolean: logikai típus (true, false) char: 16 bites Unicode karakter byte: 8 bites egész szám (-128 - +127) short: 16 bit, (-32 768 - +32 767) int: 32 bit (-2 147 483 648 - +2 147 483 647) long: 64 bit (-9 223 372 036 854 775 808 - +.) float: 32 bites lebegőpontos szám (-3,40292347E+38 +3,40292347E+38) double: 64 bit (-1,79769313486231570E+308 - +.) Változók 34 Változó: egy névvel azonosított memóriaterület Egy változónak mindig van azonosítója, adott méretű memóriahelye, típusa és aktuális értéke Javában minden változót deklarálni kell Két típusú változó: egyszerű (primitív), referencia (lásd később) Deklarálás, inicializálás: típus változo1 [=kifejezes1], változo2; Példa: double x = 4.5, y; Konstansok 35 Konstans: Egy változónak a „befagyasztása”, azaz nem engedjük
megváltoztatni Nem összetévesztendő a literállal Kódolási konvenció: nagybetűvel írjuk Példa: final int EVSZAM=2015; Operátorok 36 Java kifejezés: operandusokból és operátorokból (műveletekből) áll. Operátor: Unáris: egyetlen operandusa van Prefix: operandus előtt szerepel (++i) Postfix: operandus után szerepel (i--) Bináris: két operandusa van Operátorok 37 Unáris postfix és prefix operátorok: [] tömbképző (lásd később) minősítő operátor .(pont) (param) metódus képző ~, ! Bitenkénti operátorok new példányosító operátor (lásd később) (típus) kifejezés típuskényszerítő +(plusz), -(minusz) előjel operátorok ++, -léptető operátorok Operátorok 38 Aritmetikai operátorok: + * / % összeadás kivonás szorzás valós osztás maradékképzés Relációs operátorok: > >= < <= == != nagyobb nagyobb vagy egyenlő kisebb kisebb vagy egyenlő egyenlő nem egyenlő
Operátorok 39 Logikai operátorok: && logikai és || logikai vagy ! logikai nem & bitenkénti és | bitenkénti vagy ^ bitenkénti nem ~ bitenkénti tagadás (negáció) Feltételes kiértékelés: (feltétel) ? kif1 : kif2 Példa: int y = 70; int x = (y>50)?100:0; Operátorok 40 Értékadó operátorok: = alapértékadó operátor, érték rendelése változóhoz Rövidített értékadó operátorok: +=, -=, *=, /=, %=, stb. Példa: Kifejezések kiértékelési sorrendje 41 A kifejezések kiértékelési sorrendjét meghatározza: Zárójelezés Operandusok prioritása Azonos prioritás eseten balrol-jobbra szabály, kivétel az értékadás, amely jobbrol-balra értékelődik ki. Operátorok precedenciája 42 Utasítások 43 Blokk utasítás: {} Mindaz, amit abban a blokkban adunk meg, pontosan arra a blokkra érvényes Egy blokk utasításokból áll Minden utasítást pontosvessző zár le Utasítások
fajtái 44 Deklaráló utasítás (Memóriahelyek foglalása): int letszam; Értékadó utasítás (Memóriahelyek foglalása): int letszam; Postfix és prefix növelő és csökkentő utasítások : letszam++; --letszam; Metódushívás: System.outprintln("Hello"); Példányosítás (Új objektum létrehozása): aDatum = new Datum(2000,11,05); Programvezérlő utasítás: if (i==0) . Üres utasítás: ; (csak egy pontosvessző) Típuskonverziók 45 Java erősen típusos nyelv: a fordító a típus kompatibilitásának az ellenőrzését minden esetben elvégzi Két szempont: Automatikus (implicit) vagy kényszerített (explicit) konverzió Szűkítő vagy bővítő konverzió Példa: double d; int i = 5; // int konvertálása doubel-re implicit módon. Bővités d = i; Típuskonverziók 46 Példa: d = 79.4; // double konvertálása int-re explicit módon. Szűkités ->79 i = d; //szintaktikai hiba A szűkítő
konverzió információvesztéssel jár i = (int)d; Egyágú szelekció - if 47 Példa Kétágú szelekció - if.else 48 if (feltétel) utasítás1; else utasítás2; if (feltétel) { utasítás; . } else { utasítás; . } Többágú szelekció - else if és switch 49 if (feltétel1) utasítás1; else if (feltétel2) utasítás2; . else utasításN; switch (kifejezés) { case érték1: utasítások; break; case érték2: utasítások; break; . default: utasítások; } Többágú szelekció - else if és switch 50 Iterációk – for 51 for (inicializálás; feltétel; léptetés) { utasítás1; utasítás2; . utasításN; } Iterációk – for Parancsori paraméterek kiíratása: Iterációk – while, do while 53 while (feltétel) { utasítás1; utasítás2; . utasításN; } do { utasítás1; utasítás2; . utasításN; } while (feltétel); Iterációk – while, do while - Példa 54 Kiugrás ciklusból Break: az
aktuális utasításblokkból (pl. ciklusból) való azonnali kiugrást eredményezi Continue: hatására a vezérlés az utasításblokk (ciklus) végére kerül Példa: Metódusok Eljárás: Utasítások egyszerű végrehajtása Visszatérítési típusa: void (semleges) Függvény: Van visszatérítési értéke Eljárásként is hívható Statikus metódusból kizárólag az osztály statikus elemeire hivatkozhatunk Metódusok Szintaxis: <módosítók>]<visszatérési típus><metódus neve> ([<formális paraméterlista>])[<throws .>] { <metódusblokk> } Megjegyzések: Javában csak érték szerinti paraméterátadás van, azaz a paraméter helyén szereplő értékről másolat készül. A metódus ezt a másolatot látja, használja Fordítási hiba, ha függvényben van return nélküli ág; lokális változó nincs inicializálva Metódusok - Példa Metódusok - Példa Metódusok - Példa
Java osztályok rendszerezése 61 Java API: kb. 2000 osztály A java.lang csomag legfontosabb osztályai: Az Object osztály 62 Minden osztály közös őse Bármely osztályból létrehozott példány “az egy” objektum A Java minden objektumára jellemző metódusokat tartalmaz. Például: boolean equals(Object obj) String toString() Class getClass() Primitív típus vs. Referencia 63 Primitív: 8 primitív típus: boolean, char, byte, short, int, long, float, double A változó azonosítójával közvetlenül hivatkozunk a változó memóriahelyére A deklaráló utasítás végrehajtása: memória foglalás A programozó nem definiálhat primitív típust Primitív típus példa 64 Közvetlen (direkt) címzés: Referencia típus 65 Objektumra mutat A változó azonosítójával az objektum memóriahelyére közvetve hivatkozunk egy referencián (hivatkozáson) keresztül A hivatkozás rejtve marad (automatikus
indirekció) NULL referencia: nem mutat semmire, nem hivatkozik objektumra Referencia típus példa 66 Ember ember = new Ember("Erika",1953); ember objektum címe Objektum létrehozása 67 Létrehozás a new operátorral: new <OsztályAzonosító>(<aktuális paraméterlista>) Példányosítás Memóriafoglalás Konstruktorhívás: beállítja az objektum kezdeti állapotát adatok kapcsolatok Visszaadja az új objektum referenciáját Objektum deklarálása 68 Deklarálás: <OsztályAzonosító> objektum; Az objektum egy referencia típusú változó Memóriafoglalás: csak a referencia részére Az objektum létrehozása a programozó feladata <OsztályAzonosító> objektum; objektum=new <OsztályAzonosító>(<aktuálisparaméterlista>); <OsztályAzonosító> objektum = new <OsztályAzonosító>(<aktuális paraméterlista>); Objektum értékadás 69
Objektumok egyenlőségvizsgálata 70 Objektumok állapotát nem lehet a (==, !=) operátorokkal összehasonlítani (referencia hasonlíás) Objektumok egyenlőségét az equals metódussal szokás megállapítani Példa: Kimenet: Objektumok egyenlőségvizsgálata 71 Objektumok állapotát nem lehet a (==, !=) operátorokkal összehasonlítani Objektumok egyenlőségét az equals metódussal szokás megállapítani Példa: Kimenet: Objektum élete, automatikus szemétgyűjtés 72 Automatikus szemétgyűjtés (garbage collection): A rendszer bizonyos időnként automatikusan felszabadítja a hibatkozás nélküli objektumok memóriahelyét Példa: ember1 = new String("Gábor"); ember1 = new String("Anikó"); A String osztály 73 Szöveg tárolására szolgál Értéke egész élete során állandó marad Unikód karakterek sorozata, a karakterek sorszámozottak (0 a legelső sorszám) Létrehozás: String
szoveg=new String(”Kész!"); String szoveg=”Kész!"; Konstruktorok: String() String(value: String), String(buffer: StringBuffer) A String osztály 74 Hossz, index length(): int charAt(index: int): char Manipulált karakterláncok toLowerCase(): String toUpperCase(): String trim(): String replace(oldChar: char, newChar: char): String substring(beginIndex: int, endIndex: int): String Konkatenálás concat(str: String): String A StringBuffer osztály 75 Manipulálható szöveg Konstruktorok StringBuffer() StringBuffer(length: int) StringBuffer(str: String) Kapacitás, hossz, index capacity(): length(): int int ensureCapacity(minimumCapacity: int) setLength(newLength: int) charAt(index: int): char A StringBuffer osztály - Példa 76 Objektum átadása paraméterként 77 Az aktuális paraméter értékadás szerint kompatibilis kell legyen a formális paraméterrel Nem az objektum
másolódik át, hanem csak a referencia Az átmásolt referenciával éppúgy meg tudjuk változtatni az objektumot Objektum átadása paraméterként 78 Primitív típusok csomagolása 79 Célok: Primitív típusú változók objektumként kezelése Primitív típusokkal kapcsolatos információk lekérdezése Minden primitív típushoz tartozik egy csomagoló osztály (wrapper class): Character, Boolean, Byte, Short, Integer, Long, Float, Double. A csomagoló osztályok példányai változtathatatlanok Konstruktorok: <Type> (<type> value) Például: Character cObj = new Character(A); Primitív típusok csomagolása 80 Konstruktorok: <Type> (String s) Például: Boolean bObj = new Boolean("True"); Példánymetódusok: String toString() Például: Double dObj = new Double(6099.8); //s=="6099.8” String s = dObj.toString(); <type> <type>Value() Például: Integer iObj = new Integer(30); int i
= iObj.intValue(); double d = iObj.doubleValue(); // i==30 // d==30.0 Primitív típusok csomagolása 81 Numerikus csomagoló osztályok static final <type> MIN VALUE = <a típusnak megfelelı érték>; static final <type> MAX VALUE = <a típusnak megfelelı érték>; Például: System.outprintln(ByteMIN VALUE); static <type> parse<Type>(String s) Például: int i = Integer.parseInt("50"); // i==50 Java csomagok 82 Az osztályok, interfészek csoportosítását a Java nyelvi szinten támogatja, a csomag (package) segítségével A csomagok hierarchikus rendszert alkotnak A csomagnevekben az egyes szinteket pont választja el. Példa: java.io, javamath, stb A hierarchiaszintek száma tetszőleges lehet Java csomagok 83 A Java megengedi, hogy két külön csomagban legyen két azonos nevű osztály minősített nevek (qualified name): az azonos nevű osztályok megkülönböztetésére
szolgálnak A minősített nevek az osztályt tartalmazó csomag teljes nevéből, és az osztály egyszerű nevéből állnak Csomagok deklarációja 84 Egy osztályt a package kulcsszó segítségével helyezhetünk el egy csomagban Egy forráskódban csak egy package deklaráció lehet, a forráskód legelején Ha nincs package deklaráció, az adott osztály, vagy interfész a névtelen csomagba kerül Példa: A definiált osztály minősített neve csomag.A lesz Csomagok leképzése fájlrendszerre 85 A fordítási egységek fájlok .java kiterjesztéssel A csomag, alcsomag nevek könyvtárak, alkönyvtárak Példa: package cs1.cs2cs3; Mindig a package root alól adjuk ki a fordításhoz/futtatáshoz szükséges parancsokat Példa: Fordítás Futtatás Osztályok elérése 86 Egy osztályra a definíciójával megegyező csomagban az egyszerű nevével hivatkozhatunk Példa: Osztályok elérése 87 Egy osztályra a
definíciójától eltérő csomagban többféleképpen hivatkozhatunk: Minősített nevek használata (kényelmetlen) Osztályok elérése 88 Import deklarációk import csomag.osztalynev; import csomag.*; (minden publikus osztályt importálunk) Az import java.lang*; minden fordítási egységben automatikusan megtörténik Könyvészet 89 Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt, Budapesta, 2002 Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011