Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

A Java programozási nyelv Programozási nyelvek és módszerek 1.gyakorlat Laki Sándor PPKE-ITK.

Hasonló előadás


Az előadások a következő témára: "A Java programozási nyelv Programozási nyelvek és módszerek 1.gyakorlat Laki Sándor PPKE-ITK."— Előadás másolata:

1 lakis@inf.elte.hu1 A Java programozási nyelv Programozási nyelvek és módszerek 1.gyakorlat Laki Sándor Email: lakis@inf.elte.hu PPKE-ITK

2 lakis@inf.elte.hu2 Követelmények Nagy házi (határidő: május 12. 24:00) 2 db ZH: beugró + géptermi ZH ZH-k időpontja: 1.ZH április 26., Szerda, 16-19 2.ZH május 22., Hétfő, 9-12 PótZH és UV szeptemberben

3 lakis@inf.elte.hu3 Tematika Eclipse IDE C++-ról Javara Típusok, tömbök, osztályok, interface … Kivételkezelés, öröklődés Collection Framework Template …

4 lakis@inf.elte.hu4 A nyelvről röviden SUN Microsystems gyermeke Különböző kiadások: J2SE,J2EE,J2ME Mi a J2SE 1.5 –tel foglalkozunk A JAVA ősei: SmallTalk ill. a C++ Jelölésrendszere a C++ -ból átvett DE figyelem a szemantika nem mindenütt ugyanaz!!!

5 lakis@inf.elte.hu5 A nyelvről röviden Mutatók helyett referenciák! Futtató környezet(interpretált nyelv) => BÍZTONSÁGOS fejlesztés…

6 lakis@inf.elte.hu6 Interpretált jelleg Java sourcecode Compiler(javac) Java bytecode környezetfüggetlen Solaris Virtual Machine Windows XP Virtual Machine Futtatás szintje …

7 lakis@inf.elte.hu7 Különbségek a C++-tól Interpretált jelleg Nincsenek mutatók Tisztán OO nyelv( a C++ multiparadigmás) Egy java program objektumok és ezek mintáiúl szolgáló osztályok összessége. Minden fv. valamely osztály tagfv.-e!

8 lakis@inf.elte.hu8 Típusrendszer

9 lakis@inf.elte.hu9 Típusok C++ szemmel C/C++ -ban a beépített típusok pontos mérete és értéktartománya nincsen definiálva(pl. char előjeles vs előj. nélk.) Bár vannak garanciák: pl. short int legalább 16 bites… Oka: a C++ filozófiája(max. optimalitás minden platformon)

10 lakis@inf.elte.hu10 Mi a helyzet a Javaval? Cél: bináris kompatibilitás Ezért az egyes típusok mérete és értéktartománya is platformfüggetlen kell legyen Erős korlátozások a primitív típusokkal szemben (nem lehet futási időben létrehozni őket) Példányaik nem objektumok java értelemben

11 lakis@inf.elte.hu11 Primitív típusok és burkolók TípusMéretWrapperHasonló C++ byte8bites előjeles egészBytesigned char short16bites előjeles egészShortshort int32bites előjeles egészIntegerlong 64bites előjeles egészLonglong booleanLogikai (nem egész!)Booleanbool float32bites lebegőpontosFloatfloat double64bites lebegőpontosDoubledouble char16bites Unicode kar.Characterwchar_t

12 lakis@inf.elte.hu12 Primitív típusok Ilyen típusú változókat nem hozhatunk létre futási időben, ezek nem számítanak objektumoknak Változókat adhatunk át metódushíváskor Primitív típusokat érték szerint Míg objektumokat referencia szerint

13 lakis@inf.elte.hu13 Egy-két különbség a C++-hoz Nincsenek mutatók Nincsen delete A garbage collector automatikusan szabadítja fel az objektumokat Konstruktorok vannak Destruktorok nincsenek ( esetleg finalize())

14 lakis@inf.elte.hu14 HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println(”Hello World”); } A minden publikus osztályt külön – az osztály nevének megfelelő java kiterjesztésű – fájlba kell írni. Van egy kitüntetett osztály aminek van egy static main metódusa, ez lesz a főprogram! Konvenció: A java osztályok neve nagy betűvel kezdődik!

15 lakis@inf.elte.hu15 Fontos A main metódus szignatúrája a következő KELL legyen: public static void main(String[] args) Ez C++-ban úgy volt: int main(int argc, char** argv); A statikus metódusok futtathatók példányoktól függetlenül. Futtatásnál a VM –nek megmondjuk, melyik a „főosztály”, aminek a main metódusát meg kell hívnia. Így indul a prg.

16 lakis@inf.elte.hu16 Eclipse IDE Letölthető a www.eclipse.org -rólwww.eclipse.org Itt egy kis demózás jön… Kommentek, javaDoc Jar készítése Manifest fájl

17 lakis@inf.elte.hu17 Ismerkedés – Eclipse demo Algoritmus implementációk N! ciklussal VS rekurzív fv.-nyel LegNagyobb Közös Osztó ( külön statikus memberfv.-be)

18 lakis@inf.elte.hu18 Változók Stack – Heap ?mi is ez? int i; long big = 100000; boolean logical = true; String str = new String(”alma teve”); // ez objektum nem primitív típ. Vált. // az str úgy használható, mint C++-ban a mutató // (term. Ez egy referencia. ) String str2 = ”alma teve”; // String obj. Tartalmát nem lehet módosítani MyClass my = new MyClass();

19 lakis@inf.elte.hu19 Hozzáférési kategóriák private Névtelen (félnyílvános-csomagszintű) protected public

20 lakis@inf.elte.hu20 Ami eddig kimaradt Betűkészlet azonosítókban: a Unicode 2.0 betűi Miért publikus/félig nyitott/private az osztály? Egybe tartozó részeket csomagokba tesszük!

21 lakis@inf.elte.hu21 Csomagoljunk Osztályainkat csomagokba szervezzük Csomagok nem ágyazhatók egymásba Azonos csomag osztályai látják egymást Ha más csomag osztályát használom, akkor minősítés v./és import a fájl elején import org.apache.xerces.sax.XMLReader; import org.apache.xerces.sax.*;

22 lakis@inf.elte.hu22 Csomagoljunk Azt, hogy az adott osztály melyik csomagban van, a fájl eleji package kulcsszóval adjuk meg. Ha nem adunk meg semmit, akkor a default csomag. package org.menrod.core; public class XMLPair { //variables protected String namespace = null; protected String element = null; … Az XMLPair az org.menrod.core nevű csomagba került!

23 lakis@inf.elte.hu23 Konstruktorok Ha nem adunk meg, akkor alapértelmezetten hozzáad egy ürest Ha megadunk egyet, és azt akarjuk, hogy létezzen üres konstr., akkor explicit meg kell adnunk!!! public class MyClass { // alapértelmezetten // létrejön egy def. // konstr. } public class MyClass { public MyClass(int i) { } }

24 lakis@inf.elte.hu24 Datum.java public class Datum { protected int ev; protected int ho; protected int nap; public Datum(int ev, int ho, int nap) { this.ev = ev; this.ho = ho; this.nap = nap; } } // end of Datum Nincs a végén pontosvessző!!!!

25 lakis@inf.elte.hu25 Example1.java public class Example1 { public static void main(String[] args) { Datum d = new Datum(2006,02,16); }

26 lakis@inf.elte.hu26 Bővítsük a „Datum”-ot public class Datum { protected int ev; protected int ho; protected int nap; public Datum(int ev, int ho, int nap) { … } public String kiir() { System.out.print(ev + ”.” + ho + ”.” + nap + ”\n”); return ev + ”.” + ho + ”.” + nap; } } // end of Datum

27 lakis@inf.elte.hu27 Example2.java public class Example2 { public static void main(String[] args) { Datum d = new Datum(2006,02,16); d.kiir(); // de lehet így is System.out.println( d.kiir() ); // vajon ez mit ír ki: System.out.println( d ); }

28 lakis@inf.elte.hu28 1. Feladat Készíts egy motor nevű publikus osztályt! Attribútumok(legyenek protectedek): Hengerűrtartalom Teljesítmény Gyártás ideje( a korábbi Datum ) Legyen egy konstruktora, ahol ezeket be lehet állítani! Műveletek: getHUT getTeljesitmeny getGyartasiIdo ill. setGyartasiIdo(Datum d)

29 lakis@inf.elte.hu29 Referencia átadása public class Example3 { public static void main(String[] args) { Datum d = new Datum(2006, 02, 16); Motor m = new Motor(1998, 130, d); d.setEv(2009); m.getGyartasiIdo().kiir(); //???2006 v. 2009 lesz??? // lehetne így is m = new Motor(1198, 65, new Datum(2000, 1, 1) ); }

30 lakis@inf.elte.hu30 2.Feladat Készíts egy Gepkocsi osztályt! Attribútumok:  Motor  Gyártási idő  Megtett kilométerek Műveletek:  getEvjarat  getMotor  getKilometerek

31 lakis@inf.elte.hu31 Objectum hierarchia, operátorok Operátorok primitíveken ugyanúgy, ahogy C++-ban Objektum változóin/referenciákon a hagyományos operátorok olyanok, mint ha C++-ban mutatókon végeznénk ezeket. == helyett equals

32 lakis@inf.elte.hu32 Tömbök Tömb változók deklarációja:  int t[];  int[] t; Változó dekl. nem hozza létre a tömböt Tömb típusok olyanok, mint az osztályok. Lesznek attribútumaik… Objektumok csak dinamikusan allokálhatók, hasonló a C++ dinamikus tömbkezeléséhez Hibásak: int t[10]; int[10] t;

33 lakis@inf.elte.hu33 Tömbök Tényleges objektumok létrehozása:  int t[] = new int[10];  int[] t = new int[10];  int[] t = { 1, 2, 3, 4 };  t = new int[] { 1, 2, 3, 4 }; Tömb vált. csak referencia Tömbök 0-tól indexelődnek A hossz lekérdezése: t.length Tömb indexelése: t[i] Kivételt dob, ha elindexelünk ArrayIndexOutOfBoundsException

34 lakis@inf.elte.hu34 Objektumok tömbje Referenciákból álló tömb MyClass[] t = new MyClass[10]; for (int i=0; i { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.hu/8/2091461/slides/slide_34.jpg", "name": "lakis@inf.elte.hu34 Objektumok tömbje Referenciákból álló tömb MyClass[] t = new MyClass[10]; for (int i=0; i

35 lakis@inf.elte.hu35 Többdimenziós tömbök int[][] mx = new int[4][3]; for (int i=0;i<4;i++) for (int j=0;j<3;j++) mx[i][j] = i + j; Nincs többdimenziós tömb, de helyette tömbök tömbje Hasonlóan a dinamikus C++-os módszerhez int[][] mx; mx = new int[4][]; for (int i=0;i<4;i++) for (int j=0;j<3;j++) mx[i][j] = i + j;

36 lakis@inf.elte.hu36 Feladatok Írj verem típust(osztályt)! Amiben int- eket tárolhatsz! A megvalósításhoz használj tömböket! Írd át láncoltlistásra! Írj mátrix típust, annak műveleteivel! Figyelem operátorok túlterhelésére javaban nincs lehetőség!!!!


Letölteni ppt "A Java programozási nyelv Programozási nyelvek és módszerek 1.gyakorlat Laki Sándor PPKE-ITK."

Hasonló előadás


Google Hirdetések