171
Programozási Programozási technológiák technológiák 2007/08 2007/08

Prog Techn

Embed Size (px)

DESCRIPTION

Programozási technológiák

Citation preview

  • Programozsi technolgik2007/08

  • 1. Az OOP fbb jellemzi

  • Objektum, osztlyObjektum: Informcikat trol, s krsre feladatokat hajt vgre. Logikailag sszetartoz adatok s rajtuk dolgoz algoritmusok sszessge:adatokmetdusokAz objektumot zenetek (krelmek) ltal lehet megkrni a feladatok elvgzsre. (Ez egy metdus vgrehajtst jelenti.)Osztly (class): Objektumtpus, amely alapjn pld-nyokat, azaz objektumokat hozhatunk ltre.

  • Elnyk, clokA szoftverfejleszts sorn az egytt vltoz rszek elklnthetkProjektek kztti jrahasznosthatsg nvelse

  • Konstruktor, pldnytag, osztlytagAz objektumot ltre kell hozni, s inicializlni kell. Az inicializlst vgz metdust konstruktornak nevezzk.Tovbbi fogalmak: pldnyvltoz, pldnymetdus, osztlyvltoz (kzs vltoz), osztlymetdus (objektum ltrehozsa nlkl is tud dolgozni, csak az osztlyvltozkat manipullhatja)

  • OOP jellemzkBezrs, az informci elrejtse: az adatokat csak interfszeken (metdusok) keresztl lehet elrni.rklds: az utd osztly rkli az s adatait, metdusait, valamint tartalmazhat jakat, s fellrhat rgi metdusokat.Polimorfizmus tbbalaksg: ugyanarra az zenetre (krelemre), azaz metdus hvsra, klnbz objektumok klnbzkppen reagl-hatnak.

  • LthatsgAz osztly deklarlsakor megadhatjuk, hogy mely adatokat lehet az objektumon kvlrl elrniNyilvnos (public): kvlrl elrhetVdett (protected): hozzfrs csak sajt s az rks metdusok szmraPrivt (private): hozzfrs csak sajt met-dusok szmra

  • 2. A Java nyelv

  • OO nyelvekSimula-67Smalltalk (70 eleje, XEROX)Hibrid nyelvek: C++, Turbo PascalJava: 91-96, SUN MicroSystem

  • A Java fbb jellemzi C++-- kevesebb nyelvi eszkz, szigorbb, ktttebb, kevesebb hibalehetsgHordozhat kd: egy virtulis gpen (JVM, Java Virtual Machine) fut n. bjtkd. Nincsenek implementcifgg elemek. Rohamos fejlds kulcsa a JVM beptse a Web bngszkbe.Fejleszthet: Alkalmazs (application)AppletServletJSP (Java Server Pages)

  • JDK (Java Development Kit) Fejleszti s futtat krnyezet (java.sun.com) Rszei:API (Application Programming Interface) osztly-knyvtr (a Java egyik ereje a rengeteg ksz osztly)FordtrtelmezAppletnzHelp, stbjabb neve: pl. J2SE (Java 2 Platform, Standard Edition)Csomag: logikailag sszetartoz osztlyok. Csomag struktra knyvtr struktra.

  • A Hello nev osztly publikus, ms csomagokbl is ltni lehet.A main metdus a program belpsi pontja.PublikusA static kulcssz azt jelenti, hogy ez osztlymetdusvoid: nincs visszatrsi rtke, azaz eljrsString[] args: a parancssor paramterekA System egy osztly, amelyben tallhat egy out objektum, melynek a println egy metdusa.public class Hello{ public static void main(String[] args){ System.out.println("Hello World!"); } }

  • Kirs, beolvassimport extra.*;//importlni kell azon osztlyokat, csomagokat, //amelyekre hivatkozunk...int egysegar, mennyiseg, ar; //4 b. egsz tpusegysegar=Console.readInt("Egysgr: ");mennyiseg=Console.readInt("Mennyisg: ");ar=egysegar*mennyiseg;System.out.println("n " + mennyiseg + " l benzint tankolt sszesen " + ar + "Ft rtkben");

    //a System osztly a java.lang csomagban van //benne, amit nem kell importlnunk

  • Kirs, beolvassA Console osztly metdusai (fggvnyei): int readInt() int readInt(String str) Hasonlan: readLong, readDouble, readChar, readLineA print s println metdusoknak egyetlen param-terk lehet, de az tbbfle tpus. Ha egyszerre tbb dolgot is ki szeretnnk ratni, akkor ezeket ssze kell adnunk. A Java automatikusan szvegg konvertl. Pl. print("a+b=" + a + b) Pl. print("a+b=" + (a + b))

  • A program alkotelemeiAzonostban betk, szmjegyek, a _ jel s a valuta szimblumok szerepelhetnek. Szmjeggyel nem kezddhet. Akr kezetes bett is tartalmazhat (unikd), de ezt inkbb kerljk.KulcsszLiterl: lland, amely bepl a program kdjba. Lehet:egsz (automatikusan int tpus, lehet hexad., decimlis, oktlis), vals (pl: 2.3 2. .3 6e23), logikai (true, false), karakter (pl. '?', '\u1ac5' ), szveg (pl. "valami"), null.Vezrl szekvencik: \n \t \" \' \\pl. println("Egy idzet: \"Talpra magyar!\"")

  • Java tpusokPrimitv tpusok: (numerikus vagy logikai)byte1 b.-128 .. 127short2 b.-32768 .. 32767int4 b.kb -2*109 .. 2*109long8 b.kb. -1019 .. 1019float4 b.double8 b.char2 b.booleanReferencia tpus: olyan mutat, mely egy objektum hivatkozst tartalmazza.Numerikus tpusok

  • A char is numerikus tpus char c; int a; c=65; System.out.println(c); c='A'+1; System.out.println(c); a=c+1; System.out.println(a);

  • float4 bjtKb. 1.4E-45 3.4E+386-7 jegy pontossgdouble8 bjtKb. 5E-324 1.8E+30814-15 jegy pontossg

  • Vltoz deklarls Deklarl utastsAdhat kezdrtk is (inicializls). Pl: int a, b; double x, y = 2.4;

  • Forrsprogram szerkezeteA forrsllomny (fordtsi egysg) egy vagy tbb osztlybl llhat. A forrsllomny neve a main metdust tartalmaz egyetlen publikus osztly neve lesz.Fordtskor tbb class kiterjeszts llo-mny keletkezhet.

  • import java.utils.*;import extra.*;//Egy vagy tbb osztly deklarlsa, a sorrend mindegy

    class C1{ ...}

    class C2{ ...}...public class Prog{ ... public static void main(String[] args){ ... } ...}

  • OpertorokUnris postfix s prefix opertorok[ ] tmbkpz. minst( ) metdus kpz~, ! bitenknti, ill. logikai tagads00new pldnyost(tpus)kifejezs tpusknyszert+, - eljel++, --lptet, pl. i++ vagy ++i mindkett nveli i rtkt, de az els rtke i eredeti, mg a msodik i megnvelt rtke lesz.

  • ++, --int a = 0, b, c;b = ++a;a = 0;c = a++;

    c = ++b + a++;c = a+++++b;c = a++ + ++b;

  • Multiplikatv opertorok*, / % maradkos oszts Ha az operandusok egszek, akkor az eredmny is egsz, ha legalbb az egyik operandus vals, akkor az eredmny is vals.Pl.int ossz = 2 + 3; double atlag = ossz / 2;Megj. A maradkkpzs vals szmokra is alkalmazhat

  • Additv opertorok+, -Relcis opertorok (az eredmny boolean tpus lesz)=,==, !=Logikai opertorok! nem &, && s (teljes, ill. rvid kirtkels)|, || vagy^ kizr vagyBitenknti opertorok~ komplementls&, |, ^,>>> lptetsek (>>>: minden esetben 0 lp be)

  • Feltteles opertorok(felttel) ? kifejezs1: kifejezs2 pl. kamat = (fiz>200000)?10:0; rtkad opertorok=, +=, -=, *=, /=, %= Az sszetett rtkads szintaktikja: vltoz opertor = kifejezs a += b szemantikja: vltoz = (tpus) vltoz opertor kifejezs a = a + bahol tpus a vltoz tpusa, amelyet rknyszer-tnk a jobboldalra.

  • rtkad opertorokVigyzzunk az sszetett ill. a hagyomnyos rtkad utastsok nem minden esetben teljesen egyformk!int a=10;a+=5;megegyezik az a=a+5 ut.-al, mindkt oldal inta+=1.5;nem egyezik meg az a=a+1.5 ut.-al, mely szintaktikai hibs, hiszen a jobb oldal doubleLehetsges a tbbszrs rtkads, pl: a=b=5;

  • KirtkelsEgy kifejezs kirtkelsi sorrendjt meg-hatrozzk:zrjelprioritsasszociativits (balrl jobbra vagy jobbrl balra szably)

  • Java utastsokdeklarl; pl. int a;rtkad; pl. a = b * 2;postfix s prefix nvel s cskkent; pl. a++;metdushvs, pl. System.out.println("Hah!");pldnyosts, pl. auto = new Auto("ABC123");Programvezrl, pl. elgazsok, ciklusokres: ;

  • Java utastsokMinden utastst pontosvessz zr le.Blokk (vagy sszetett utasts): { ... }

  • TpuskonverzikA Java ersen tpusos nyelvTpuskonverzi lehetautomatikus (implicit)knyszertett (explicit): (tpus)kifejezs type castilletveszktbvt

  • Primitv tpusok esetn egy szkebb adattpus rtke konvertlhat egy bvebb adattpus rtkbe informci-veszts nlkl. Ez ltalban automatikus.

    int i; double d; byte b; short s;b + s//implicit bvt konverzi (int)d = i; //implicit bvt konverzii = d; //szintaktikai hibai = (int)d; //explicit szkt konv.

  • Numerikus opertorok tpuskonverziiAutomatikus konverzik a kvetkez szablyok szerint:Unris opertorok: ha az operandus int-nl szkebb, akkor int- konvertl, egybknt nem konvertlBinris opertorok: mindkt operandust a kett kzl bvebb, de minimum int- konvertlja

    (Az egsz literl automatikusan int, a vals literl automatikusan double)

  • rtkad utastsvltoz = kifejezs;A kifejezs tpusnak rtkads szerint kompatbilisnek kell lenni a vltoz tpusval:azonos tpusoka jobb oldal szkebb, akkor implicit bvt konverzia bal oldal byte, short vagy char, a jobb oldal int, s a fordt el tudja dnteni, hogy a jobboldal belefr a baloldalba, akkor implicit szkt konverzi. pl. byte b = 100; (az egsz literl automatikusan int tpus).minden ms esetben fordtsi hiba keletkezik

  • MetdushvsOsztly.metdus(paramterek) pl. y=Math.sin(x);Objektum.metdus(paramterek) pl. hossz=szoveg.length();Sajt osztlybl elg csak a metdus neve: metdus(paramterek) Egy metdus lehet eljrs- vagy fggvnyszer. Tlterhels (overloading): lehet tbb azonos nev metdus, melyek a paramterezsben s/vagy a visszatrsi rtk tpusban trhetnek el egymstl.Pl. float max(float a, float b) illetve int max(int a, int b)

  • A java.lang.Math osztlyJava API (Application Programming Interface): rengeteg csomag, osztlyNem kell importlni.Konstansok: E, PIFggvnyek: abs, asin, sin, cos, atan, tan, exp, log, max, min, pow, sqrt, toDegrees, toRadians, random, round

  • Java API dokumentum rszlet

  • min

    public static int min(inta, intb)

    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

  • Szelekcik - if utasts if(felttel) utasts1; else utasts2;

    felttel: logikai kifejezsaz else g elhagyhata felttel utn nincs pontosvesszaz utasts esetn viszont van pontosvesszminden felttel zrjelbenegy gban tbb utasts: blokk {...}egymsba gyazsif(a>b) c=a; else c=b;

  • Szelekcik - switch utasts switch(kifejezs){ case rtk1: utastsok; break; case rtk2: utastsok; break; ... default: utastsok; }akkor alkalmazhat, ha egy kifejezs jl meghatrozott, klnll rtkeire szeretnnk bizonyos utastsokat vgrehajtanikifejezs: byte, short, int vagy chara break hatsra a switch blokk vgre kerl a vezrls, e nlkl a kvetkez case gra kerlne a vezrlsegy case kulcsszhoz csak egy rtk tartozhat

  • Szelekcik - switch utastsswitch(pont){ case 1: case 2: case 3:System.out.println("Elgtelen");System.out.println("Kszljn tovbb!");break; case 4:System.out.println("Elgsges");break; case 5:System.out.println("Kzepes");break; case 6:System.out.println("J");break; default:System.out.println("Jeles");}

  • Itercik - while utasts while(felttel) utasts;

    Amg a felttel igaz, jbl vgrehajtja az utastst, ha hamis, akkor a ciklust kvet utastsra lp.Tbb utasts esetn: blokk { ... }

    Plda: Bankba tesszk a pnznket kamatozni, s addig tartjuk bent, amg milliomosok nem lesznk. A program szmolja ki, hogy hny vet kell vrnunk.

  • Itercik - while utastsimport 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
  • Itercik - do...while utasts do utasts; while(felttel)

    Amg a felttel igaz, jbl vgrehajtja az utastst, ha hamis, akkor a ciklust kvet utastsra lp. Tbb utasts esetn: blokk { ... }

    Plda: Bankba tesszk a pnznket kamatozni, s addig tartjuk bent, amg milliomosok nem lesznk. A program szmolja ki, hogy hny vet kell vrnunk.

  • Itercik - do...while utastsimport 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 kerekt ev++; }while(penz
  • Itercik - for utasts for(inicializls; felttel; lptets) utasts;inicializls: egy vagy tbb utasts vesszvel elvlasztva, mely(ek) egyszer hajtdik vgre a ciklusmagba val els belps eltt. Pl. ciklusvltoz deklarlsa, inicializlsa. A ciklusvltoz tpusa tetszleges.felttel: amg igaz, jbl vgrehajtja az utastst, ha hamis, akkor a ciklust kvet utastsra lp.lptets: egy vagy tbb utasts vesszvel elvlasztva, mely(ek) a ciklusmag minden egyes lefutsa utn automatikusan vgrehajtdik. ltalban a ciklusvltozt szoks itt nvelni vagy cskkenteni.

  • Itercik - for utastsA while ciklus egy specilis esetnek tekinthet:

    for(inicializls; felttel; lptets) utasts;

    inicializls; while(felttel){ utasts; lptets }

  • Itercik - for utastspldkfor(int i=1; i
  • for(char c='A'; c
  • Kiugrs a ciklusblBreak utasts: az aktulis utastsblokk-bl (pl. ciklusbl) val azonnali kiugrst eredmnyezi.Continue utasts: hatsra a vezrls az utastsblokk (ciklus) vgre kerl.

  • Metdusok rsaA metdus fej szintaktikja: [mdostk] visszatrsitpus metdusneve( [paramterlista] )

    Nhny plda:public static int min(int a, int b)public void vonalhuz()public void vonalhuz(int hossz) long fakt(byte n)//csomag szint lthatsgMdostk lehetnek: public, private, protected: lthatsgstatic: osztlymetdusstb.

  • Fggvny, eljrsA metdusoknak kt fajtjt klnbztetjk meg:Eljrsszer metdus: visszatrsi rtknek tpusa void, azaz res tpus, nem tr vissza rtkkelFggvnyszer metdus: visszatrsi rtk-nek tpusa valamilyen voidtl klnbz tpus, azaz igazi rtkkel tr visszaA fggvny eljrsknt is hvhat.

  • Metdusok jellemziTlterhels (overloading): lehet kt egyforma nev, de klnbz paramterezs metdus. pl. vonalhuz() ill. vonalhuz(int hossz) vagy min(int a, int b) ill. min(double a, double b)Paramtertads: rtk szerinti. Az aktulis paramter tpusnak rtkads szerint kompatbilisnek kell lennie a formlis paramterrel.Visszatrs a metdusbl: fggvny esetn return utn ktelezen meg kell adnunk egy rtket.

  • Metdusok jellemziAz osztly metdusainak deklarlsi sor-rendje tetszleges. A main-t elsnek vagy utolsnak clszer megadni. A metdusok nem gyazhatak egymsba.Lehet rekurzv metdusokat is definilni.A metdusban mint egybknt is brmely blokkban definilhatunk loklis vltozt.

  • public class Metodusok{

    static void vonalhuz(int hossz){ for (int i=1; i=0) return n; else return -n; }

  • static int jegySzam(int n){ int jszam=0; do{ n/=10; jszam++; }while(n!=0); return jszam; } public static void main(String[] args){ int a=-10; int b=12345678; vonalhuz(); System.out.println(a+" abszolut erteke: "+abs(a)); vonalhuz(40); System.out.println(b+" jegyeinek szama: "+jegySzam(b)); vonalhuz(); } }

  • Osztly ksztse

  • OO programfutvezrl objektumobjektum1zenet3zenet1objektum2objektum3zenet2zenet1Egy objektumorientlt program egymssal kommunikl objektumok sszessge, melyben minden objektumnak megvan a feladatkre

  • Plda - Ember osztly s pldnyai

  • Az OOP fontosabb definciinak sszefoglalsa Pldnydeklarci (pldnytag): A pldnyonknt (objektumonknt) helyet foglal vltozk a pldnyvltozk (pldnyadatok). Azon metdusokat, melyek pldnyadatokon dolgoznak, pldnymetdusoknak nevezzk. Osztlydeklarci (osztlytag) (static) Az osztlyvltoz az osztly sajt vltozja, az egyes pldnyokban nem szerepel, valamilyen kzs adatot trol. Az osztlymetdus az osztly sajt metdusa, amely csak osztlyvltozkon dolgozik.

  • Lthatsg Privt (private): csak az osztly sajt metdusai fr-hetnek hozz.Nyilvnos (public): minden, az objektummal kapcsolat-ban ll kliens elri, hasznlhatja.Egy osztly adatai ltalban privt adatok.

    Egy fordtsi egysg (java fjl) tbb osztlyt is tartalmaz-hat, de kzlk csak egy lehet nyilvnos (public). Ha valamelyik osztlyban szerepel a main metdus, akkor az nyilvnos kell hogy legyen.

  • Egy osztlyban ugyanazon a nven dekla-rlhat metdus s vltoz, st a metdu-sok tlterhelhetek. A deklarls sorrendje ltalban: vltozk konstruktorok metdusok main metdus, ha van.

  • A loklis vltozk eltakarjk az ugyanolyan nev osztly-, illetve pldnyvltozkat. Ha az osztly deklarcijra szeretnnk hivat-kozni, akkor osztlyvltoz esetn az osztly nevvel, pldnyvltoz esetn pedig a this referencival kell azt minstennk.

    Vltozk alaprtelmezs szerinti kezdeti rtkei: osztlyvltoz vagy pldnyvltoz esetn 0, loklis vltoz esetn hatrozatlan.

  • KonstruktorokFeladata az objektum new opertorral val ltrehozsakor annak inicializlsa.Auto auto = new Auto("GHJ123);A konstruktor specilis metdus, a kvetkez szablyok rvnyesek r:Neve ktelezen megegyezik az osztly nevvel.Csak a new opertorral hvhat.Tlterhelhet.Nincs visszatrsi rtke, s nem is void.Ha az osztlyban nem adunk meg explicit mdon konstruktort, akkor az osztlynak lesz egy alaprtelmezs szerinti (default), paramter nlkli konstruktora. Ha az osztlyban ltezik egy explicit konstruktor, akkor nem lesz implicit, alaprtelmezs szerinti konstruktora.

  • Plda - RaktrprogamAdott egy zldsgraktr, melyben pillanatnyilag egyetlen rut, paradicsomot raktrozunk. A raktrba gyakran te-sznk be, illetve vesznk ki onnan paradicsomot. A para-dicsom pillanatnyi egysgra 300 Ft, de ez vltozhat. Ksztsnk olyan programot, mely segtsgvel rgzteni tudjuk a megfelel adatokat, s brmikor jelentst tudunk adni a paradicsom aktulis mennyisgrl, egysgrrl s rtkrl!Vgezzk el a kvetkez akcikat: Tegynk a raktrba 125 kg paradicsomot, aztn vegynk ki 25 kg-ot, majd szlltsuk le a paradicsom egysgrt 210 Ft-ra! Mindhrom akci utn rjuk ki, mennyi paradicsom van raktron s milyen rtkben!

  • OsztlydiagramRaktarProgram-aru-nev: String-egysegar: double-menny: doubleAru+Aru(aNev:String,aEgysegar:double)+getNev(): String+getEgysegar(): double+setEgysegar(aEgysegar:double)+getMenny(): double+getAr(): double+hozzatesz(aMenny:double)+elvesz(aMenny:double)+toString(): String

    +RaktarProgram()+akciok()+main(args)

  • OsztlydiagramRaktarProgram-aru-nev: String-egysegar: double-menny: doubleAru+Aru(aNev:String,aEgysegar:double)+getNev(): String+getEgysegar(): double+setEgysegar(aEgysegar:double)+getMenny(): double+getAr(): double+hozzatesz(aMenny:double)+elvesz(aMenny:double)+toString(): String

    +RaktarProgram()+akciok()+main(args)

  • class Aru { private String nev; private double egysegar; private double menny;

    public Aru(String aNev, double aEgysegar) { nev = aNev; egysegar = aEgysegar; menny = 0; }

    public String getNev() { return nev; }

    PldnyvltozkKonstruktorOsztlydiagram

  • public double getEgysegar() { return egysegar;}

    public void setEgysegar(double aEgysegar) { if (aEgysegar >= 0) egysegar = aEgysegar;}

    public double getMenny() { return menny;}

    public double getAr() { return menny*egysegar;}

    Osztlydiagram

  • public void hozzatesz(double aMenny) { if (aMenny>0) menny += aMenny; }

    public void elvesz(double aMenny) { if (aMenny>0 && aMenny

  • public class RaktarProgram { private Aru aru;

    public RaktarProgram() { aru = new Aru("Paradicsom",300); }

    public void akciok() { aru.hozzatesz(125); System.out.println(aru); aru.elvesz(25); System.out.println(aru); aru.setEgysegar(210); System.out.println(aru); }

    public static void main(String[] args) { RaktarProgram program = new RaktarProgram(); program.akciok(); }}OsztlydiagramKapcsolatObjektum ltrehozsa sajt osztlybl

  • Egyttmkdsi diagramRaktarProgramaru:Aruprogram:RaktarProgram2: RaktarProgram()4: akciok()3: Aru(aNev,aEgysegar)5: hozzatesz(aMenny)6: elvesz(aMenny)7: setEgysegar(aEgysegar)1: main(args)

  • OsztlydiagramBank-szamla1-szamla2-utolsoSzamlaSzam: int-szamlaSzam: int-tulajdonos: String-egyenleg: intSzamla+Szamla(tulajdonos:String,egyenleg:int)+Szamla(tulajdonos:String)+getTulajdonos(): String+setTulajdonos(Tulajdonos:String)+befizet(osszeg:int)+kivesz(osszeg:int): int+toString(): String

    +Bank()+ugyfelKiszolgalas (szamla:Szamla)+menu()+main(args)Plda BankprogamKsztsnk egy banki programot, mely az gyfelek szmlit kezeli.

  • import extra.*;class Szamla{ private static int utolsoSzamlaSzam=0; private int szamlaSzam; private String tulajdonos; private int egyenleg; public Szamla(String tulajdonos, int egyenleg){ szamlaSzam=++utolsoSzamlaSzam; this.tulajdonos=tulajdonos; this.egyenleg=egyenleg; } public Szamla(String tulajdonos){ this(tulajdonos,0); } public String getTulajdonos(){ return tulajdonos; }

  • public void setTulajdonos(String tulajdonos){ this.tulajdonos=tulajdonos; } public void befizet(int osszeg){ if(osszeg>=0) egyenleg+=osszeg; } public int kivesz(int osszeg){ if(osszeg>=0 && osszeg
  • public class Bank { private Szamla szamla1, szamla2; public Bank() { szamla1 = new Szamla("Kiss Istvan", 1000000); szamla2 = new Szamla("Nagy Peter"); } public void ugyfelKiszolgalas(Szamla szamla) { char valasz; do{ valasz=Character.toUpperCase(Console.readChar("B(efizet)/K(ivesz)")); }while(valasz!='B' && valasz!='K'); if (valasz == 'B') szamla.befizet(Console.readInt("Mennyit fizet be? ")); else{ int egyenleg = szamla.kivesz(Console.readInt("Mennyit vesz ki? ")); System.out.println("Maradek egyenleg "+egyenleg+" Ft"); } }

  • public void menu() { char valasz; do{ System.out.println("\n\n"+szamla1); System.out.println(szamla2); System.out.println("\n1: 1. ugyfel kiszolgalasa"); System.out.println("2: 2. ugyfel kiszolgalasa"); System.out.print ("V: Vege "); valasz = Character.toUpperCase(Console.readChar()); switch (valasz) { case '1': ugyfelKiszolgalas(szamla1); break; case '2': ugyfelKiszolgalas(szamla2); break; } }while (valasz!='V'); } public static void main(String[] args) { Bank otp = new Bank(); otp.menu(); }}//Bank osztly vge

  • Inicializlkclass Tanulo { static int alapTandij; double atlag; int tandij; static { alapTandij = 2000; } {atlag = Console.readDouble("Atlag: ");tandij = alapTandij + (int)Math.round(3000*(5-atlag)); }

    //

    }= 2000; = Console.readDouble("Atlag: ");

  • Az inicializls sorrendjeOsztlyadatok (osztly betltsekor)alaprtelmezs szerinti rtkekosztlyinicializl kifejezsekosztlyinicializl blokkokObjektum adatai (objektum szletsekor)alaprtelmezs szerinti rtkekpldnyinicializl kifejezsekpldnyinicializl blokkokkonstruktor(ok)

  • Az Object osztlyMinden osztly kzs seA Java minden objektumra jellemz metdusokat tartalmaz. Pldul:boolean equals(Object obj)String toString()Class getClass()

  • Objektumok egyenlsgvizsglataString s1 = new String("Hello"), s2 = new String( "Hello");System.out.println(s1==s2);System.out.println(s1.equals(s2));

  • KarakterlncA String osztly objektum olyan szveg trolsra szolgl, amelynek rtkt nem akarjuk megvltoztatni. A StringBuffer osztlyt akkor hasznljuk, ha a szvegen szeretnnk vltoztatni.A StringBuilder osztlyt a JDK 5.0-tl vezettk be, ami gyorsabb, mint a StringBuffer, de csak egy szlon hasznlhat biztonsgosan.

  • Objektum ltrehozsa a new opertorral Auto auto; //csak referenciaauto = new Auto("GHJ123);//a konstruktor hvsval ltrejn az objektum, //az auto referencia erre mutat

    vagy

    Auto auto = new Auto("GHJ123);

    Osztlyazonost objektum = new Osztlyazonost(paramterlista);

  • String objektum ltrehozsa String szoveg; //csak referenciaszoveg = new String(Ez a tartalma);

    csak String esetn ez egyszersthet:

    szoveg=Ez a tartalma;

  • A String osztly metdusai Az eredeti objektumot nem vltoztatjk, fggvnyek, sokszor j String objektumot hoznak ltre.

    Nhny metdus:

    char charAt(int index)tetszleges index karaktert adja vissza, az indexels 0-val kezddik

    int compareTo(String str)sszehasonltja, rtke 0, ha egyenl; , ha kisebb; +, ha nagyobb, mint a paramter

  • boolean equals(Object anObject)igaz, ha az objektum String tpus, s karakterei ugyanazok

    int indexOf(String str) //hasonlan lastIndexOfaz adott sztring els elfordulsnak pozcija lesz az rtke, ha nincs benne, akkor rtk 1

    int indexOf(String str, int fromIndex)az adott sztring els elfordulsnak pozcija lesz az rtke, a keresst a msodik paramterben megadott sorszm karak-tertl kezdi, ha nincs benne, akkor az rtk 1

    int length()hosszt adja vissza

  • String replace(char oldChar, char newChar)kicserli a megadott karaktereket, s visszaadja az j sztringet (maga a sztring objektum nem vltozik meg)

    String substring(int beginIndex)a paramterben megadott pozcitl a szveg vgig kimsol

    String substring(int beginIndex, int endIndex)a kezd pozcitl a vgpozciig kimsol, endIndex nem tartozik bele a rszlncba, gy a visszaadott sztring hossza endIndex- beginIndex

    String toLowerCase()kisbetsre alaktottan adja vissza

    String toUpperCase()nagybetsre alaktottan adja vissza

  • String trim()levgja a fehr szkzket (space, tab, sorvgejel) az elejrl s vgrl, s visszaadja

    Stb.

    Ezek pldnymetdusok, hvsuk: objektumnv.metdusnv([paramterlista])pl: int hossz = szoveg.length();

    Sztringet bekrni a billentyzetrl az extra csomagbeli Console osztly readLine() metdusval lehet.pl: String nev = Console.readLine("A neved: ");

  • 1. plda

    String s = Console.readLine();for(int i=s.length()-1; i>=0; i--) System.out.print(s.charAt(i));System.out.println();

    System.out.println(s.toUpperCase());System.out.println(s.toLowerCase());

    if(s.length()>=9) System.out.println(s.substring(0,9));

    if(s.length()>=3) System.out.println(s.substring(s.length()-3));

    System.out.println(s.replace(' ','-'));

  • 2. plda

    String s=Console.readLine();String elso=s;while(!s.equals("*")){ if(s.compareTo(elso)

  • StringBuffer osztlyKonstruktorokStringBuffer()StringBuffer(int length)StringBuffer(String str)Kapacits, hossz, indexcapacity():intlength():intensureCapacity(int minimumCapacity)setLength(int newLength)charAt(intindex): charManipullhat szveg

  • StringBuffer osztly (folyt.)Bvtsappend ( value): StringBufferappend ( value): StringBufferinsert (int offset, value): StringBufferinsert (int offset, value): StringBufferTrlsdeleteCharAt(int index): StringBufferdelete(int start, int end): StringBuffer

  • StringBuffer osztly (folyt.)EgybsetCharAt(intindex, charch)replace(int start, int end, String str): StringBufferreverse(): StringBuffersubstring(int start): Stringsubstring(int start, int end): StringtoString(): String

  • StringBuffer hegy1 = new StringBuffer("Machu");//1StringBuffer hegy2 = hegy1.append(" Picchu");//2hegy2.insert(0,"Ez is ");//3hegy1//1hegy1hegy2//2hegy1hegy2//3

  • Feladat CsereOlvassunk be egy szveget, majd cserljk ki az sszes & jelet az and szra!import extra.*;public class Csere {public static void main(String[] args) {// kvetkez din}}

  • StringBuffer szoveg = new StringBuffer(Console.readLine("Szoveg: "));//1int poz = szoveg.toString().indexOf('&');//2 while (poz!=-1) {szoveg.replace(poz,poz+1,"and");//3poz = szoveg.toString().indexOf('&');//4}System.out.println(szoveg);//5

  • Objektum tadsa paramterkntFeladat Objektum paramterrjunk egy olyan eljrst, amely a paramterknt megkapott szveget szthzza, vagyis minden karaktere utn beszr egy szkzt!import extra.*;public class ObjektumParameter {//kvetkez din}

  • static void szethuz(StringBuffer str) {for (int i=str.length()-1; i>0; i--)str.insert(i,' ');str = null;// csak demonstrcis cl utasts}

    public static void main(String[] args) {StringBuffer sb = new StringBuffer("Peace");szethuz(sb); System.out.println("*"+sb+"*");// "*P e a c e*"}rtkads szerinti kompatibilits!Csak a referencia msoldik t!

  • strsbstrsbnullA metdusba val belpskor:A metdusbl val kilps eltt:A metdus csak a mutatott objektumotvltoztathatja meg, a referencit nem!

  • TmbkA tmb referencia tpus vltoz, melyet deklarl-nunk kell. Az elemtpus lehet akr primitv, akr referencia (osztly tpus vagy tmb tpus). Deklarls:elemtpus [] tmbazonost; vagyelemtpus tmbazonost [];

    pl:int [] a; //inkbb ez ajnlott int b[];

  • Az gy deklarlt vltoz kpes egy, a megadott elemtpus tmbre mutatni. Mg csak a referencinak (memriacmnek) foglaltunk helyet, a tmbt kln ltre kell hoznunk.Ltrehozs (futs kzben): new elemtpus [mret]pl: a = new int[10]; b = new int[20];Termszetesen trtnhet rgtn a deklarlskor is a ltrehozs: String[] sTomb = new String[50];

  • Minden tmbnek van egy length konstansa. Indexels: 0 .. length-1

    int[] iArray=new int[10];

    for(int i=0; i=0; i--) System.out.print(iArray[i]+" ");for(int i=0; i

  • Tmb inicializlsaInicializl blokk: deklarlskor a tmb elemeinek kezdeti rtkek adhatk, pl:int[] iArray={2, 4, 6, 8, 10};char[] szamjegyek={'0','1','2','3','4','5','6','7','8','9'}

    Ekkor nem kell a tmbt a new opertorral ltrehozni, a {} blokk kpz opertor megteszi ezt helyettnk. A tmb mrete pontosan akkora lesz, amennyi a felsorolt rtkek szma.

  • rtkads tmbk kzttA t2 tmb rtkads szerint kompatibilis a t1 tmbbel (azaz t1=t2 megengedett), haprimitv elemtpus esetn t1 s t2 elemtpusa azonos;referencia elemtpus esetn t2 elemtpusa t1 elem-tpusval azonos, vagy annak leszrmazottja.rtkadskor a tmb referencija kap rtket, nem pedig az elemei (a tmb nem msoldik, hanem trdik a mutatja), gy klnbz hosz-szsg tmbk is rtkl adhatk egymsnak.

  • Ktdimenzis tmbDeklarls: elemtpus [][] tmbazonost; Teljes ktdimenzis tmb ltrehozsa: new elemtpus [mret0] [mret1]Pl: int[][] matrix Lpsenknti (soronknti) ltrehozs. A sorok klnbz mretek lehetnek, pl:double[][] atlagok = new double[4][];atlagok[0] = new double[20];atlagok[1] = new double[18];atlagok[2] = new double[25];atlagok[3] = new double[22];Analg a helyzet a tbbdimenzis tmbk esetn.= new int[3][4];

  • Tmb paramter Formlis paramterknt egy tmbreferencit kell deklarlnunk, amely fogadja az aktulis tmb referencijt.Az aktulis tmbnek rtkads szerint kompatbi-lisnek kell lennie a formlis tmbbel.

    Plda: rjunk osztlyt, amelynek adata egy int tmb. Az objektum ltrehozsakor a konstruktor paramterben adhassuk meg a tmb hosszt. Tartalmazzon egy bekr, kiir s egy osszeg nev metdust!

  • import extra.*;class Tomb{ private int[]t; public Tomb(int hossz){ t = new int[hossz]; } public void beker(){ for(int i=0; i
  • public class Tombok{ public static void main(String[] args){ Tomb t1=new Tomb(5); Tomb t2=new Tomb(7); System.out.println("Adja meg az 1. tomb elemeit (5):"); t1.beker(); System.out.println("Adja meg a 2. tomb elemeit (7):"); t2.beker(); System.out.println("Az elso tomb:"); t1.kiir(); System.out.println("Az elemek osszege: "+ t1.osszeg()); System.out.println("A masodik tomb:"); t2.kiir(); }}

  • rklds

  • rklds (inheritance) ms nven kiterjeszts (extension): Egy mr meglv osztly tovbbfejlesztse.jabb tulajdonsgokat s metdusokat adhatunk hozzMeglv metdusait trhatjukCl: Specializci: egy objektum lershoz egyedi jellemzket adunk hozz.ltalnosts: tbb objektum lersbl kiemeljk a kzs jellemzket.Java: class Auto extends Jarmu{ ... }

  • SzablyokEgy osztlybl tbb osztly is szrmaztathatEgy osztlyhierarchia mlysge elvileg tetszleges lehetAz rkls tranzitvJvban: Egy osztlynak csak egy kzvetlen se lehet (nincs tbbszrs rkls)Minden osztlynak se az object

  • MintafeladatKlnbz hengereket szeretnnk nyilvntartani:Csupn mrtani testek, sugaruk s magassguk vanTmr hengerek, slyuk is vanCsvek

  • Henger-sugar, magassag:double+Henger(sugar, magassag:double)+getSugar():double+getMagassag():double+terfogat():double+toString():StringTomorHenger-fajsuly:double+TomorHenger(sugar, magassag, fajsuly:double)+getFajsuly():double+suly():double+toString():StringCso-falVastagsag:double+Cso(sugar, magassag, fajsuly, falVastagsag:double)+getFalVastagsag():double+terfogat():double+toString():String

  • Megjegyzsek a pldaprogramhozAz Object osztly getClass() metdusa egy Class osztly objektumot ad vissza, melynek getName() metdust hasznltuk (Henger: 22. sor)this: az objektum referencija super: az objektum referencija, de kzvetlen sosztly tpusA hengerek tmb elemei Henger osztly referencik, melyek azonosthatnak leszrmaztatott osztly objektumokat is. Henger h; TomorHenger th; h=th; //j th=h; //tpushiba th=(TomorHenger)h //tpusknyszertsA lista s az tlagtrfogat mveleteknl az objektumok valdi tpusa hatrozza meg, hogy melyik toString(), ill terfogat() metdus fog vgrehajtdni: polimorfizmus (ld. 6. dia)

  • instanceof opertor: instanceof Eredmnye egy boolean tpus rtk, mely true, ha az objektum osztlya a megadott osztly vagy annak leszrmazottja.Statikus tpus: amit a referencia deklarlskor kap Dinamikus tpus: amilyen osztly objektumot valjban azonost hengerek[3]=new Cso(2,10,2,1); hengerek[3] statikus tpusa Henger, dinamikus tpusa Cso.Egy utdosztly akkor is rkli az sosztly adatait, ha nem ltja azokat (mert private elrhetsgek)

  • Metdusok fellrsaAkkor van sz fellrsrl, ha a metdusok szignatri megegyeznek (egybknt tlterhels)Csak pldnymetdust lehet fellrniNem lehet fellrni, ha finalDinamikus kts (futs alatti kts, ksi kts): Az osztlyhierarchia brmely pontjrl is hvunk meg egy pldnymetdust, minden esetben a megszltott objektum osztlyban (vagy ha ott nincs, akkor a legkzelebbi sben) deklarlt metdus fog vgrehajtdni. A pontos cmet a rendszer futskor hatrozza meg. (Pl. TomorHenger, ill. Cso osztly objektumok esetn a suly metdus meghvsakor ms-ms terfogat metdus hajtdik vgre.)

  • KonstruktorokNem rkldik, nem lehet fellrniOsztlyon bell az egyik konstruktorbl a msik gy hvhat: this(paramterek)Egy konstruktorbl a kzvetlen s konstruktor gy hvhat: super(paramterek)Minden konstruktornak tartalmaznia kell pontosan egy this() vagy super() hvst legels utastsknt. Ha egyik sem szerepel, akkor a fordt betesz egy alaprtelmezett paramter nlkli super() hvst. Ekkor viszont lennie kell a kzvetlen sosztlyban paramter nlkli konstruktor. Elv: minden konstruktor a sajt osztlya adatait inicializlja

  • Absztrakt metdus, absztrakt osztlyAz osztly egyes metdusait nem implementljuk, csak a fejlct adjuk meg.Az ilyen osztly absztrakt, a nyitva hagyott, absztrakt metdusokat tartalmazrktsi clokat szolgl, nem pldnyosthatAbsztrakt metdust tartalmaz osztly csak absztrakt lehet

  • Idom{abstract}-fajsuly:double=0.8+terfogat():double+suly():doubleGomb-sugar:double+Gomb(sugar:double)+terfogat():double+toString():StringHasab-a,b,magassag:double+Hasab(a,b,magassag:double)+terfogat():double+toString():String

  • InterfszAz interfsz olyan viselkedseket definil, amelyet az osztlyhierarchia tetszleges osztlyval megvalsthatunk.Az interfsz (interface) metdusfejeket definil abbl a clbl, hogy valamely osztly azt a ksbbiekben implementlja, megvalstsa.Definilhat konstansokat (public static final)Az objektum elrsnek, hasznlatnak egy lehetsges mdjt hatrozza meg.Egy interfszbl nem lehet pldnyt ltrehozniAz interfszek rkthetkEgy konkrt osztly megvalstja az interfszt, ha az sszes metdust megvalstja (UML szaggatott nyl, java kulcssz: implements)Konvenci: az implements zradk az extends zradkot kveti, ha mindkett van.

  • Egy osztly tbb interfszt is implementlhatAz rtkads kompatibilits hasonl, mint az rklds esetnMivel az interfsz a megvalsts nlkli, vagyis absztrakt metdusok listja, alig klnbzik az absztrakt osztlytl. A klnbsgek:Az interfsz egyetlen metdust sem implementlhat, az absztrakt osztly igen.Az osztly megvalsthat tbb interfszt, de csak egy sosztlya lehet. Az interfsz nem rsze az osztlyhierarchinak. Egymstl "fggetlen" osztlyok is megvalsthatjk ugyanazt az interfszt.Amikor egy osztly megvalst egy interfszt, akkor alapveten alr egy szerzdst. Az osztlynak implementlni kell az interfszben s szlinterfszeiben deklarlt sszes metdust, vagy az osztlyt absztraktknt kell deklarlni.

  • Az interfszek hasznosak a kvetkez esetekben:Hasonlsgok megfogalmazsa anlkl, hogy mesterklt osztlyhierarchit ptennk fel (For instance, a human and a parrot can both whistle, however it would not make sense to represent Humans and Parrots as subclasses of a Whistler class, rather they would most likely be subclasses of an Animal class (likely with intermediate classes), but would both implement the Whistler interface.)Olyan metdusok definilsa, amelyeket tbb osztlyban meg kell valstaniTbbszrs rklds modellezse

  • public interface Predator { public boolean chasePrey(Prey p); public void eatPrey(Prey p); }

    public class Cat implements Predator { public boolean chasePrey(Prey p) { // programming to chase prey p }

    public void eatPrey (Prey p) { // programming to eat prey p } }

  • Another use of interfaces is being able to use an object without knowing its type of class, but rather only that it implements a certain interface. (For example, a sorting algorithm may expect an object of type Comparable. Thus, it knows that the object's type can somehow be sorted, but it is irrelevant what the type of the object is.)

  • Comparable interfszObjectinterfszComparable+compareTo(Object obj): intString+compareTo(Object obj): int...A String hasonlthat

  • class Henger implements Comparable{ private double sugar, magassag; ... public int compareTo(Henger obj){ if(terfogat()obj.terfogat()) return 1; return 0; }}

  • import java.util.*;

    public class HengerProgram { public static void main(String[] args) { Henger[] hengerek=new Henger[4]; ... //Max trfogat int max=0; for(int i=0;i0) max=i; System.out.println("A legnagyobb trfogat: " +hengerek[max].terfogat()); //Rendezs Arrays.sort(hengerek); //Lista System.out.println("\nRendezve:"); for(int i=0;i

  • A kollekci keretrendszer Java Collections Framework (JCF)A kollekcik (kontnerek) olyan objektumok, melyek clja egy vagy tbb tpusba tartoz objektumok memriban trtn sszefoglal jelleg trolsa, manipullsa s lekrdezse.A kollekci keretrendszer egy egysges architektra, ami a kollekcik megvalstsra, kezelsre szolgl.Elemei:Interfszek: absztrakt adattpusok, amelyek a kollekcikat reprezentljk. Lehetv teszik a kollekcik implementci fggetlen kezelst.Implementcik: a kollekci interfszek konkrt implementcii. algoritmusok: azok a metdusok, amelyek hasznos mveleteket valstanak meg, mint pldul keress, rendezs klnbz kollekcikon.C++ Standard Template Library (STL)

  • A kollekci keretrendszer hasznlatnak elnyeiCskkenti a fejlesztsi idtNveli a program sebessgt s minsgtMegknnytik az API-k hasznlatt, tervezstElsegti a szoftver jrafelhasznlhatsgt

  • Interfszek

  • A kollekci interfszek (generic, ltalnos) tpus paramterekkel dolgoznak. Pldul:public interface Collection ...Az szintaxis azt jelenti, hogy az interfsz ltalnos (generikus) tpussal mkdik.Amikor deklarlunk egy Collection-t, meg tudjuk hatrozni (ajnlott), hogy milyen tpus objektumot tartalmaz a kollekci. A tpus paramter a fordtprogram szmra lehetv teszi, hogy csak az adott tpus objektumot engedje belerakni a kollekciba, gy cskkenti a futsidej hibk szmt.Ha megrtettk az interfszek hasznlatt, akkor a nagy rszt megtudtuk annak, amit a JCF-rl tudni rdemes.

  • Collection: akkor rdemes ezt vlasztani, ha a lehet legnagyobb rugalmassgra van szksg. Set: matematikai halmaz modellezseList: sorszmozott kollekci, hozzfrs az elemekhez index segtsgvelQueue: vrakozsi sor ltrehozsraMap: az egyedi kulcsokat rtkekk kpezi le.SortedSetSortedMap

  • ltalnos cl implementcik

  • A Collection interfszHasznlhat pldul klnbz kollekcik kztti konverzira (mint kzs nevez)All collection implementations have a constructor that takes a Collection argument. Suppose, for example, that you have a Collection c, which may be a List, a Set, or another kind of Collection. This idiom creates a new ArrayList (an implementation of the List interface), initially containing all the elements in c. List list = new ArrayList(c);

  • public interface Collection extends Iterable { // Basic operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator iterator();

    // Bulk operations boolean containsAll(Collection c); boolean addAll(Collection c); //optional boolean retainAll(Collection c); //optional void clear(); //optional

    // Array operations Object[] toArray(); T[] toArray(T[] a);}

  • import java.util.*;

    public class HengerProgram { public static void main(String[] args) { Collection hengerek= new ArrayList(); hengerek.add(new Henger(2,10)); hengerek.add(new Henger(3,6)); hengerek.add(new TomorHenger(2,10,2)); hengerek.add(new Cso(2,10,2,1)); System.out.println(hengerek.size()); hengerek.clear(); System.out.println(hengerek.size()); }}

  • import java.util.*;

    public class CollectionAddDemo { public static void main(String[] args) { Collection szamok=new HashSet(); int n=0; do{ if(szamok.add(Math.round((float)Math.random()*89)+1)) n++; }while(n

  • import java.util.*;class Diak{ private String nev; private int pont; public Diak(String nev, int pont){ this.nev=nev; this.pont=pont; } public int getPont(){ return pont; } public boolean equals(Object obj){ return nev.equals(((Diak)obj).nev); } public String toString(){ return nev+": "+pont; }}

    public class Diakok{ public static void main(String[]args){ Collection diakok=new ArrayList(); diakok.add(new Diak("Kovcs Istvn",10)); diakok.add(new Diak("Kiss Pter",2)); diakok.add(new Diak("Nagy Pl",10)); Diak diak=new Diak("Kiss Pter",0); System.out.println(diakok.contains(diak)); }}

  • A kollekcik bejrsa1. A for-each ciklussalfor (Object o : collection) System.out.println(o);

    for(Henger henger:hengerek) System.out.println(henger.terfogat());

    2. ItertorralAz itertor egy olyan objektum, ami megengedi, hogy bejrjuk a kollekcit, s eltvoltsuk az elemeket a kollekcibl, ha akarjuk.Egy kollekci bejrshoz az iterator metdusnak a meghvsval krhetnk egy Iterator objektumot.

  • Az Iterator interfsz:public interface Iterator { boolean hasNext(); E next(); void remove(); }

    A hasNext metdus visszatrsi rtke true, ha az itercinak van mg be nem jrt eleme.A remove metdus eltvoltja a kollekcibl az utols elemet, amit a next hvsra kaptunk. Az Iterator.remove az egyetlen biztonsgos t, hogy mdostsuk a kollekcit az iterci folyamn.Itertor hasznlata clszer a for-each ciklus helyett a kvetkez esetekben:Trlni szeretnnk a bejrs kzben.Prhuzamosan tbb kollekcit szeretnnk bejrni

  • for (Iterator it=hengerek.iterator(); it.hasNext(); ) System.out.println(it.next());

    for (Iterator it=hengerek.iterator(); it.hasNext(); ) if (it.next().terfogat()

  • Collection Interface Bulk Operations Az egsz kollekcival hajtanak vgre mveleteket.containsAll megmondja, hogy a kollekci tartalmazza-e a paramterben megadott kollekci sszes elemtaddAll hozzadja a kollekcihoz a paramterben megadott kollekci sszes elemtremoveAll eltvoltja a kollekcibl a paramterben megadott kollekci sszes elemtretainAll eltvoltja a kollekcibl azokat az elemeket, amelyek a paramterben megadott kollekciban nincsenek benneclear eltvoltja a kollekci sszes elemt

    Pl: c.removeAll(Collections.singleton(e)); c.removeAll(Collections.singleton(null));

    Collections.singleton(e): egy halmazzal tr vissza, mely csak a megadott elemet tartalmazza.

  • A Set interfszSet egy specilis Collection, amely nem tartalmaz ismtld elemeket. A Set csak a Collection-tl rklt metdusokat tartalmazza, azzal a megszortssal kiegsztve, hogy nem engedi meg az elemek ismtldst.public interface Set extends Collection { // Basic operations int size(); boolean isEmpty();

    ...

    }

  • A Java platform hrom ltalnos cl Set implementcit tartalmaz: a HashSet, TreeSet, s LinkedHashSet. HashSet esetn az elemeket egy hash tblban (hasttblban) trolja, ez a legjobb vlaszts, ha a bejrs sorrendje nem fontos. A TreeSet az elemeket egy fban trolja az rtkk szerint rendezetten. Lnyegesen lassabb, mint a HashSet.A LinkedHashSet tvzi a lncolt listt a hash tblval. Beszrs szerinti rendezettsg.

  • import java.util.*;

    public class SetDemo { public static void main(String[] args) { Collection szamok=new ArrayList(); for(int i=0;i

  • import java.util.*;public class FindDups { public static void main(String[] args) { String[] words={"i", "came", "i", "saw", "i", "left"}; Set h = new HashSet(); for (String s : words) if (!h.add(s)) System.out.println("Duplicate detected: " + s); System.out.println(h.size() + " distinct words: " + h); }}String w="i came i saw i left";String s;Set h = new HashSet();for(StringTokenizer st=new StringTokenizer(w);st.hasMoreTokens();) if (!h.add(s=st.nextToken())) System.out.println("Duplicate detected: " + s); System.out.println(h.size() + " distinct words: " + h);Note that the code always refers to the Collection by its interface type (Set) rather than by its implementation type (HashSet). This is a strongly recommended programming practice because it gives you the flexibility to change implementations merely by changing the constructor.

  • Set Interface Bulk Operations Egyszeren megvalsthatk az algebrbl ismert halmazmveletek.s1.containsAll(s2) Igaz logikai rtkkel tr vissza, ha s2 rszhalmaza s1-neks1.addAll(s2) Az s1-be s1 s s2 unija kerl.s1.removeAll(s2) Az s1-be s1 s s2 klnbsg kerl.s1.retainAll(s2) Az s1-be s1 s s2 metszete kerl.clear eltvoltja a kollekci sszes elemt

    Feladatok: 1. Mdostsuk a FindDups programot gy, hogy azt akarjuk tudni, hogy mely szavak fordulnak el egyszer a listban, s mely szavak fordulnak el tbbszr, de nem akarunk dupln kirt szavakat ltni. Ezt gy tudjuk elrni, hogy kt halmazt hozunk ltre: az egyik minden elemet tartalmaz, a msik csak a duplikltakat.2. Hozzunk ltre kt Integer objektumokat tartalmaz halmazt a FindDups programban ltott mdon tmbkkel inicializlva. lltsuk el a kt halmaz unijt, metszett, klnbsgt.

  • A List interfszSorszmozott kollekciA Collection osztlytl rklt mveletek mellett jabbakat is tartalmaz:Pozci szerinti elrs: Az elemek a listban betlttt helyk alapjn is elrhetk.Keress: A megadott elemet kikeresi a listbl, s visszaadja a pozcijt.Bejrs: Kibvti az Iterator lehetsgeitRszlista: Lehetv tesz rszlista mveleteket.A Java platform kt ltalnos cl List implementcit tartalmaz: a ArrayList (mely ltalban hatkonyabb), s a LinkedList (mely bizonyos esetekben hatkonyabb), valamint hozzigaztotta a rgebbi Vector osztlyt az j interfszhez.

  • public interface List extends Collection { // Positional access E get(int index); E set(int index, E element); //optional boolean add(E element); //optional void add(int index, E element); //optional E remove(int index); //optional boolean addAll(int index, Collection
  • A Collection-tl rklt metdusokat az elvrsainknak megfelelen hasznlhatjuk.remove metdus mindig az els elfordul elemet trli a listbl. Az add s addAll metdusnl az elem a lista vgre kerl. Pldul a list1 vgre msolja a list2 elemeit: list1.addAll(list2);A listaelemek sszehasonltsa azok equals metdusa alapjn trtnikA pozci szerinti elrs s keress metdusainak mkdse rtelemszer

  • Itertor funkcik kiterjesztsepublic interface ListIterator extends Iterator { boolean hasNext(); E next(); boolean hasPrevious(); E previous(); int nextIndex(); int previousIndex(); void remove(); //optional void set(E e); //optional void add(E e); //optional } Pl:for (ListIterator it = list.listIterator(list.size()); it.hasPrevious(); ) { Type t = it.previous(); ...}

  • Range-viewA subList(int fromIndex, int toIndex) rszlista metdus visszaadja a lista egy szelettA visszaadott lista kapcsolatban marad az eredeti listval. gy brmilyen mdosts trtnik a rszlistn, az hatssal lesz az eredetire is, st ez fordtva is igaz.Pl: A lista egy rszt trljk list.subList(fromIndex, toIndex).clear();

  • Lista algoritmusokA Collections osztly nagyon hatkonyan hasznlhat algoritmusokat nyjt listk kezelsre.A kvetkez lista csak felsorolja a fontosabbakat:sort: Rendezi a listt.shuffle: Vletlenszeren felcserl elemeket a listban. (Permutl.)reverse: Megfordtja az elemek sorrendjt a listban.rotate: Egy adott tvolsggal rotlja az elemeket.swap: Felcserl kt meghatrozott pozciban lev elemet.replaceAll: Az sszes elfordul elemet kicserli egy msikra.fill: Fellrja az sszes elemet egy meghatrozott rtkkel.copy: tmsolja a forrslistt egy cllistba.binarySearch: Egy elemet keres a binris keressi algoritmust hasznlva.indexOfSubList: Visszatr az els olyan indexszel, amelynl kezdd rszlista egyenl a msik listval.lastIndexOfSubList: Visszatr az utols olyan indexszel, amelynl kezdd rszlista egyenl a msik listval.

  • FeladatMdostsa a korbban ltott raktrprogramot gy, hogy az egy listban trolja az egyes rufajtk adatait. Vgezze el a kvetkez mveleteket:rufajta felvteleListzsEladsVtelrmdosts

  • A Map interfszKulcs-rtk prokat tartalmazAz egyedi kulcs alapjn megkereshetjk a kulcshoz tartoz rtket (sokkal knyelmesebb, mintha ssze kellene lltanunk egy keresobjektumot)A Java platform hrom ltalnos cl Map implementcit tartalmaz: HashMap, TreeMap s LinkedHashMap (melyek hasonl trolsi elvek s mkdsek, mint a Set implementcik), valamint hozzigaztotta a rgebbi Hashtable osztlyt az j interfszhez.

  • public interface Map { // Basic operations V put(K key, V value); V get(Object key); V remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty(); // Bulk operations void putAll(Map
  • import java.util.*;

    public class Freq { public static void main(String[] args) { String[] words={"i","came","i","saw","i","left"}; Map m=new HashMap();

    for (String w: words) { Integer freq=m.get(w); m.put(w, (freq==null)?1:freq+1); }

    System.out.println(m.size() + " distinct words:"); System.out.println(m); }}

  • A Collection view metdusokkal hromfle nzett kapjuk a Map-nekkeySet: kulcsok halmaza (Set)values: rtkek kollekcija (Collection)entrySet: kulcs-rtk prok halmaza (Set). A Map interfsz tartalmaz egy kis begyazott interfszt Map.Entry ezen halmaz elemei tpusnak meghatrozsra.Csak a kollekci nzetekkel lehet itercit vgezni a Map-en.Hasznlhatk remove, removeAll, retainAll, clear kollekci mveletekfor (KeyType key : m.keySet()) System.out.println(key);

    //With an iterator: //Filter a map based on some property of its keys.for (Iterator it = m.keySet().iterator(); it.hasNext(); ) if (it.next().isBogus()) it.remove();

    //Following is the idiom for iterating over key-value pairs. for (Map.Entry e : m.entrySet()) System.out.println(e.getKey() + ": " + e.getValue());

  • Tovbbi pldk a kollekci nzetek hasznlatra//1.if (m1.entrySet().containsAll(m2.entrySet())) {...}//2.if (m1.keySet().equals(m2.keySet())) {...}//3.SetcommonKeys = new HashSet(m1.keySet());commonKeys.retainAll(m2.keySet());//4.m1.entrySet().removeAll(m2.entrySet());//5.m1.keySet().removeAll(m2.keySet());

  • //6.Setindividuals=new HashSet(managers.keySet());individuals.removeAll(managers.values());

    //7. Suppose you want to fire all the employees who report directly to some manager, Simon.

    Employee simon = ... ;managers.values().removeAll(Collections.singleton(simon));

    //8. Once you've done this, you may have a bunch of employees whose managers no longer work for the company (if any of Simon's direct-reports were themselves managers). The following code will tell you which employees have managers who no longer works for the company.

    Map m=new HashMap(managers);m.values().removeAll(managers.keySet()); Set slackers = m.keySet();

  • RendezsCollections.sort(l); Alaprtelmezett rendezs, a lista elemeinek osztlya implementlja Comparable interfszt, azaz tartalmaz egy compareTo metdust.Korltok:Csak egyfle rendezettsgBe van getve az objektumba, nem lehet vltoztatni rajtaLehet, hogy nem is implementlta a Comparable interfsztRendezs egy Comparator objektummal public interface Comparator { int compare(T o1, T o2); }Nvtelen osztly ltrehozsval

  • import java.util.*;

    public class DiakokList3{ public static void main(String[]args){ final Comparator PONTSZERINT=new Comparator(){ public int compare(Diak d1, Diak d2){ return d1.getPont()-d2.getPont(); } };

    List diakok=new ArrayList(); diakok.add(new Diak("Kovcs Istvn",10)); ... //Termszetes rendezettsg szerinti lista Collections.sort(diakok); for(Diak a:diakok) System.out.println(a); //Lista comparator szerinti rendezettsggel Collections.sort(diakok, PONTSZERINT); for(Diak a:diakok) System.out.println(a); }}

  • A SortedSet interfszpublic interface SortedSet extends Set { // Range-view SortedSet subSet(E fromElement, E toElement); SortedSet headSet(E toElement); SortedSet tailSet(E fromElement);

    // Endpoints E first(); E last();

    // Comparator access Comparator

  • import java.util.*;public class SortedSetDemo{ public static void main(String[]args){ int[]a={21,25,23,28,22,26,12}; SortedSet s1=new TreeSet(); for(Integer i: a) s1.add(i); System.out.println(s1); System.out.println(s1.headSet(25)); Comparator reverse=new Comparator(){ public int compare(Integer i1, Integer i2){ return i2-i1; } }; SortedSet s2=new TreeSet(reverse); s2.addAll(s1); System.out.println(s2); }}

  • int count = dictionary.subSet("doorbell", "pickle").size();

    dictionary.subSet("f", "g").clear();

    for (char ch = 'a'; ch

  • A SortedMap interfszpublic interface SortedMap extends Map{ Comparator
  • Summary of InterfacesThe core collection interfaces are the foundation of the Java Collections Framework. The Java Collections Framework hierarchy consists of two distinct interface trees: The first tree starts with the Collection interface, which provides for the basic functionality used by all collections, such as add and remove methods. Its subinterfaces Set, List, and Queue provide for more specialized collections. The Set interface does not allow duplicate elements. This can be useful for storing collections such as a deck of cards or student records. The Set interface has a subinterface, SortedSet, that provides for ordering of elements in the set. The List interface provides for an ordered collection, for situations in which you need precise control over where each element is inserted. You can retrieve elements from a List by their exact position. The Queue interface enables additional insertion, extraction, and inspection operations. Elements in a Queue are typically ordered in on a FIFO basis. The second tree starts with the Map interface, which maps keys and values similar to a Hashtable. Map's subinterface, SortedMap, maintains its key-value pairs in ascending order or in an order specified by a Comparator. These interfaces allow collections to be manipulated independently of the details of their representation.

  • ltalnos cl implementcikAz ltalnos cl implementcik mind biztostjk az sszes opcionlis mveletet, amit az interfszek tartalmaznak.

  • ltalnos szably, hogy programrskor az interfszeken, s nem az implementcikon kell gondolkodni. Legtbb esetben az implementci megvlasztsa csak a teljestmnyt befolysolja.Az elnyben rszestett programozi stlus az, ha egy interfsz tpus vltozhoz vlasztunk egy implementcit. gy a program nem fgg majd egy adott implementci esetn az ahhoz hozzadott j metdusoktl, ezltal a programoz brmikor szabadon vltoztathatja az implementcit, mikor jobb teljestmnyt szeretne elrni, vagy a mkdsi rszleteket szeretn mdostani.

  • The Java Collections Framework provides several general-purpose implementations of the core interfaces: For the Set interface, HashSet is the most commonly used implementation. For the List interface, ArrayList is the most commonly used implementation. For the Map interface, HashMap is the most commonly used implementation. For the Queue interface, LinkedList is the most commonly used implementation.

    Objek