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 A Java programozási nyelv Programozási nyelvek és módszerek 1.gyakorlat Laki Sándor PPKE-ITK

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

3 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 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 A nyelvről röviden Mutatók helyett referenciák! Futtató környezet(interpretált nyelv) => BÍZTONSÁGOS fejlesztés…

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

7 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 Típusrendszer

9 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 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 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 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 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 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 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 Eclipse IDE Letölthető a -rólwww.eclipse.org Itt egy kis demózás jön… Kommentek, javaDoc Jar készítése Manifest fájl

17 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 Változók Stack – Heap ?mi is ez? int i; long big = ; 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 Hozzáférési kategóriák private Névtelen (félnyílvános-csomagszintű) protected public

20 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 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 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 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 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 Example1.java public class Example1 { public static void main(String[] args) { Datum d = new Datum(2006,02,16); }

26 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 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 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 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 lesz??? // lehetne így is m = new Motor(1198, 65, new Datum(2000, 1, 1) ); }

30 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 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 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 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 Objektumok tömbje Referenciákból álló tömb MyClass[] t = new MyClass[10]; for (int i=0; i

35 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 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