programozási nyelvek ii

106
Programozási nyelvek Programozási nyelvek II. II. Objektumorientált programozás Objektumorientált programozás a Java nyelv eszközeivel a Java nyelv eszközeivel 2007/08 2007/08

Upload: naif

Post on 14-Jan-2016

108 views

Category:

Documents


3 download

DESCRIPTION

Programozási nyelvek II. Objektumorientált programozás a Java nyelv eszközeivel 2007/08. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Programozási nyelvek II.Programozási nyelvek II.

Objektumorientált programozás Objektumorientált programozás a Java nyelv eszközeivela Java nyelv eszközeivel

2007/082007/08

Objektum, osztályObjektum, osztály

ObjektumObjektum: Információkat tárol, és kérésre : Információkat tárol, és kérésre feladatokat hajt végre. Logikailag összetartozó feladatokat hajt végre. Logikailag összetartozó adatok és rajtuk dolgozó algoritmusok adatok és rajtuk dolgozó algoritmusok összessége:összessége: adatokadatok metódusokmetódusok

Az objektumot üzenetek (kérelmek) által lehet Az objektumot üzenetek (kérelmek) által lehet megkérni a feladatok elvégzésére. (Ez egy megkérni a feladatok elvégzésére. (Ez egy metódus végrehajtását jelenti.)metódus végrehajtását jelenti.)

Osztály (Osztály (class): ): Objektumtípus, amely alapján Objektumtípus, amely alapján példá-nyokat, azaz objektumokat hozhatunk létre.példá-nyokat, azaz objektumokat hozhatunk létre.

OO nyelvekOO nyelvek

Simula-67Simula-67 Smalltalk (70’ eleje, XEROX)Smalltalk (70’ eleje, XEROX) Hibrid nyelvek: C++, Turbo PascalHibrid nyelvek: C++, Turbo Pascal Java: ’91-96, SUN MicroSystemJava: ’91-96, SUN MicroSystem

A Java főbb jellemzői A Java főbb jellemzői

C++-- kevesebb nyelvi eszköz, szigorúbb, C++-- kevesebb nyelvi eszköz, szigorúbb, kötöttebb, kevesebb hibalehetőségkötöttebb, kevesebb hibalehetőség

Hordozható kód: egy virtuális gépen (JVM, Hordozható kód: egy virtuális gépen (JVM, Java Virtual Machine) futó ún. bájtkód. Java Virtual Machine) futó ún. bájtkód. Nincsenek implementációfüggő elemek. Nincsenek implementációfüggő elemek.

Rohamos fejlődés kulcsa a JVM beépítése a Rohamos fejlődés kulcsa a JVM beépítése a Web böngészőkbe.Web böngészőkbe.

Fejleszthető: Fejleszthető: Alkalmazás (application)Alkalmazás (application) AppletApplet ServletServlet JSP (Java Server Pages)JSP (Java Server Pages)

JDK (Java Development Kit) JDK (Java Development Kit) Fejlesztői és futtató környezet Fejlesztői és futtató környezet

(java.sun.com) Részei:(java.sun.com) Részei: API (Application Programming Interface) – API (Application Programming Interface) –

osztály-könyvtár (a Java egyik ereje a rengeteg osztály-könyvtár (a Java egyik ereje a rengeteg kész osztály)kész osztály)

FordítóFordító ÉrtelmezőÉrtelmező AppletnézőAppletnéző Help, stbHelp, stb

Újabb neve: pl. J2SE (Java 2 Platform, Újabb neve: pl. J2SE (Java 2 Platform, Standard Edition)Standard Edition)

Csomag: logikailag összetartozó osztályok. Csomag: logikailag összetartozó osztályok. Csomag struktúra – könyvtár struktúra.Csomag struktúra – könyvtár struktúra.

A A Hello nevű osztály publikus, más nevű osztály publikus, más csomagokból is látni lehet.csomagokból is látni lehet.

A A main metódus a program belépési pontja. metódus a program belépési pontja. PublikusPublikus A A static kulcsszó azt jelenti, hogy ez kulcsszó azt jelenti, hogy ez

osztálymetódusosztálymetódus void: nincs visszatérési értéke, azaz eljárás: nincs visszatérési értéke, azaz eljárás String[] args: a parancssor paraméterek: a parancssor paraméterek

A A System egy osztály, amelyben található egy egy osztály, amelyben található egy outout objektum, melynek a objektum, melynek a println egy egy metódusa.metódusa.

public class Hello{ public static void main(String[] args){ System.out.println("Hello World!"); }}

Kiírás, beolvasásKiírás, beolvasásimport extra.*;//importálni kell azon osztályokat, csomagokat, //amelyekre hivatkozunk...int egysegar, mennyiseg, ar; //4 b. egész típusegysegar=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

Kiírás, beolvasásKiírás, beolvasás

A Console osztály metódusai (függvényei):A Console osztály metódusai (függvényei): int readInt() int readInt(String str) Hasonlóan: Hasonlóan: readLong, readDouble, readChar, readLine

A A print és és println metódusoknak egyetlen metódusoknak egyetlen paramé-terük lehet, de az többféle típusú. Ha paramé-terük lehet, de az többféle típusú. Ha egyszerre több dolgot is ki szeretnénk íratni, egyszerre több dolgot is ki szeretnénk íratni, akkor ezeket össze kell adnunk. A Java akkor ezeket össze kell adnunk. A Java automatikusan szöveggé konvertál. automatikusan szöveggé konvertál.

Pl. Pl. print("a+b=" + a + b) Pl. Pl. print("a+b=" + (a + b))

A program alkotóelemeiA program alkotóelemei AzonosítóbanAzonosítóban betűk, számjegyek, a _ jel és a betűk, számjegyek, a _ jel és a

valuta szimbólumok szerepelhetnek. Számjeggyel valuta szimbólumok szerepelhetnek. Számjeggyel nem kezdőd-het. Akár ékezetes betűt is nem kezdőd-het. Akár ékezetes betűt is tartalmazhat (unikód), de ezt inkább kerüljük.tartalmazhat (unikód), de ezt inkább kerüljük.

KulcsszóKulcsszó LiterálLiterál: állandó, amely beépül a program kódjába. : állandó, amely beépül a program kódjába.

Lehet:Lehet: egész, egész, valós (pl: valós (pl: 2.3 2. .3), ), logikai (logikai (true, false), ), karakter (pl. karakter (pl. '?', , '\u1ac5' ), ), szöveg (pl. szöveg (pl. "valami"), ), null..

Vezérlő szekvenciákVezérlő szekvenciák: : \n \t \" \' \\pl. pl. println("Egy idézet: \"Talpra magyar!\"")

Java típusokJava típusok

Primitív típusok: (numerikus vagy logikai)Primitív típusok: (numerikus vagy logikai) bytebyte 1 b.1 b. -128 .. 127-128 .. 127 shortshort 2 b.2 b. -32768 .. 32767-32768 .. 32767 intint 4 b.4 b. kb -2*10kb -2*1099 .. 2*10 .. 2*1099

longlong 8 b.8 b. kb. -10kb. -101919 .. 10 .. 101919

floatfloat 4 b.4 b. doubledouble 8 b.8 b. charchar 2 b.2 b. booleanboolean

Referencia típus: olyan mutató, mely egy Referencia típus: olyan mutató, mely egy objektum hivatkozását tartalmazza.objektum hivatkozását tartalmazza.

Numerikus típusok

Változó deklarálás Változó deklarálás

Deklaráló utasításDeklaráló utasítás Adható kezdőérték is (inicializálás). Adható kezdőérték is (inicializálás). Pl:Pl: int a, b;

double x, y = 2.4;

A char is numerikus típusA 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);

Forrásprogram szerkezeteForrásprogram szerkezete

A forrásállomány (fordítási egység) A forrásállomány (fordítási egység) egy vagy több osztályból állhat. egy vagy több osztályból állhat.

A forrásállomány neve a A forrásállomány neve a main metódust tartalmazó egyetlen metódust tartalmazó egyetlen publikus osztály neve lesz.publikus osztály neve lesz.

Fordításkor több class kiterjesztésű Fordításkor több class kiterjesztésű állo-mány keletkezhet.állo-mány keletkezhet.

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){ ... } ...}

OperátorokOperátorok

Unáris postfix és prefix operátorokUnáris postfix és prefix operátorok [ ] tömbképzőtömbképző . minősítőminősítő ( ) metódus képzőmetódus képző ~, ! ld. későbbld. később new példányosítópéldányosító (típus)kifejezés típuskényszerítőtípuskényszerítő +, - előjelelőjel ++, -- léptető, pl. i++ vagy ++i léptető, pl. i++ vagy ++i

mindkettő növeli i értékét, de az első értéke 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.eredeti, míg a második i megnövelt értéke lesz.

++, --++, --

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

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

Multiplikatív operátorokMultiplikatív operátorok

*, / % maradékos osztás maradékos osztás Ha az operandusok egészek, akkor Ha az operandusok egészek, akkor

az eredmény is egész, ha legalább az az eredmény is egész, ha legalább az egyik operandus valós, akkor az egyik operandus valós, akkor az eredmény is valós.eredmény is valós.

Pl. int ossz = 2 + 3;double atlag = ossz / 2;

Additív operátorokAdditív operátorok+, -

Relációs operátorokRelációs operátorok<, <=, >, >=,==, !=

Logikai operátorokLogikai operátorok ! nemnem &, && ésés |, || vagyvagy ^ kizáró vagykizáró vagy

Bitenkénti operátorokBitenkénti operátorok ~ komplementáláskomplementálás &, |, ^ ((<<,>>,>>> léptetések)léptetések)

Feltételes operátorokFeltételes operátorok(feltétel) ? kifejezés1: kifejezés2 pl. pl. kamat = (fiz>200000)?10:0;

Értékadó operátorokÉrtékadó operátorok=, +=, -=, *=, /=, %= …

Az összetett értékadás szintaktikája: Az összetett értékadás szintaktikája: változóváltozó operátor operátor = = kifejezés kifejezés a += b szemantikája: szemantikája: változóváltozó = ( = (típustípus) ) változóváltozó operátor kifejezésoperátor kifejezés a = a + bahol ahol típustípus a változó típusa, amelyet a változó típusa, amelyet rákényszerí-tünk a jobboldalra.rákényszerí-tünk a jobboldalra.

Értékadó operátorokÉrtékadó operátorok

Vigyázzunk az összetett ill. a „hagyományos Vigyázzunk az összetett ill. a „hagyományos értékadó utasítások nem minden esetben értékadó utasítások nem minden esetben teljesen egyformák!teljesen egyformák!int a=10;a+=5;megegyezik az megegyezik az a=a+5 ut.-al, mindkét oldal int ut.-al, mindkét oldal inta+=1.5;nem egyezik meg az nem egyezik meg az a=a+1.5 ut.-al, mely ut.-al, mely szintaktikai hibás, hiszen a jobb oldal doubleszintaktikai hibás, hiszen a jobb oldal double

Lehetséges a többszörös értékadás, pl: Lehetséges a többszörös értékadás, pl: a=b=5;

KiértékelésKiértékelés

Egy kifejezés kiértékelési sorrendjétEgy kifejezés kiértékelési sorrendjét meg-határozzák:meg-határozzák: zárójelzárójel prioritásprioritás asszociativitás (balról – jobbra vagy asszociativitás (balról – jobbra vagy

jobbról – balra szabály)jobbról – balra szabály)

Java utasításokJava utasítások

deklaráló; pl. deklaráló; pl. int a; értékadó; pl. értékadó; pl. a = b * 2; postfix és prefix növelő és csökkentő; pl. postfix és prefix növelő és csökkentő; pl. a++;

metódushívás, pl. metódushívás, pl. System.out.println("Hahó!");

példányosítás, pl. példányosítás, pl. auto = new Auto("ABC123");

Programvezérlő, pl. elágazások, ciklusokProgramvezérlő, pl. elágazások, ciklusok üres: üres: ;

Java utasításokJava utasítások

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

Értékadó utasítás, Értékadó utasítás, típuskonverziók típuskonverziók

változó = kifejezés; A kifejezés típusának értékadás szerint A kifejezés típusának értékadás szerint

kompatíbilisnek kell lenni a változó típusával:kompatíbilisnek kell lenni a változó típusával: azonos típusokazonos típusok a jobb oldal szűkebb, akkor implicit bővítő a jobb oldal szűkebb, akkor implicit bővítő

konverziókonverzió a bal oldal a bal oldal byte, short vagy vagy char, a jobb oldal , a jobb oldal int, és a fordító el tudja dönteni, hogy a jobboldal , és a fordító el tudja dönteni, hogy a jobboldal belefér a baloldalba, akkor implicit szűkítő belefér a baloldalba, akkor implicit szűkítő konverzió. konverzió. pl. pl. byte b = 100; (az egész literál automatikusan (az egész literál automatikusan int típusú). típusú).

minden más esetben fordítási hiba keletkezikminden más esetben fordítási hiba keletkezik

Értékadó utasítás, Értékadó utasítás, típuskonverzióktípuskonverziók

int i;double d;

d = i; //implicit bővítő konverzió

i = d; //szintaktikai hiba

i = (int)d; //explicit szűkítő konv.

MetódushívásMetódushívás Osztály.metódus(paraméterek)

pl. pl. y=Math.sin(x); Objektum.metódus(paraméterek)

pl. pl. hossz=szoveg.length(); Saját osztályból elég csak a metódus neve: 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ű. Egy metódus lehet eljárás- vagy függvényszerű. Túlterhelés (overloading): lehet több azonos nevű Túlterhelés (overloading): lehet több azonos nevű

metódus, melyek a paraméterezésben és/vagy a metódus, melyek a paraméterezésben és/vagy a visszatérési érték típusában térhetnek el visszatérési érték típusában térhetnek el egymástól.egymástól.

Pl. Pl. float max(float a, float b) illetve illetve int max(int a, int b)

A java.lang.Math osztályA java.lang.Math osztály

Java API (Application Programming Java API (Application Programming Interface): rengeteg csomag, osztályInterface): rengeteg csomag, osztály

Nem kell importálni.Nem kell importálni. Konstansok: Konstansok: E, PI Függvények: Függvények: abs, asin, sin, cos, atan, tan, exp, log, max, min, pow, sqrt, toDegrees, toRadians, random, round…

Java API dokumentum Java API dokumentum részletrészlet

static int static int min(int a, int b)           Returns the smaller of two int values.           Returns the smaller of two int values.

static longstatic long min(long a, long b)           Returns the smaller of two long           Returns the smaller of two long values. values.

static doublestatic double pow(double a, double b)           Returns of value of the first argument           Returns of value of the first argument raised to the power of the second argument. raised to the power of the second argument.

static doublestatic double random()           Returns a double value with a positive           Returns a double value with a positive sign, greater than or equal to 0.0 and less sign, greater than or equal to 0.0 and less than 1.0. than 1.0.

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

Szelekciók - Szelekciók - if utasítás utasítás if(feltétel) utasítás1;else utasítás2;

feltétel: logikai kifejezés: logikai kifejezés az az else ág elhagyható ág elhagyható a feltétel után nincs pontosvesszőa feltétel után nincs pontosvessző az utasítás esetén viszont van pontosvesszőaz utasítás esetén viszont van pontosvessző minden feltétel zárójelbenminden feltétel zárójelben egy ágban több utasítás: blokk {...}egy ágban több utasítás: blokk {...} egymásba ágyazásegymásba ágyazás

if(a>b) c=a;else c=b;

Szelekciók - Szelekciók - switch utasítás 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 akkor alkalmazható, ha egy kifejezés jól meghatározott, különálló értékeire szeretnénk meghatározott, különálló értékeire szeretnénk bizonyos utasításokat végrehajtanibizonyos utasításokat végrehajtani

kifejezés: byte, short, int vagy char: byte, short, int vagy char a a break hatására a hatására a switch blokk végére kerül a blokk végére kerül a

vezérlés, e nélkül a következő vezérlés, e nélkül a következő case ágra kerülne ágra kerülne a vezérlésa vezérlés

egy egy case kulcsszóhoz csak egy érték tartozhat kulcsszóhoz csak egy érték tartozhat

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");}

Szelekciók - Szelekciók - switch utasítás utasítás

Iterációk - Iterációk - while utasítás utasítás

while(feltétel) utasítás;

Amíg a feltétel igaz, újból végrehajtja az utasítást, 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.ha hamis, akkor a ciklust követő utasításra lép.

Több utasítás esetén: blokk { ... }Több utasítás esetén: blokk { ... }

Példa:Példa: Bankba tesszük a pénzünket kamatozni, és Bankba tesszük a pénzünket kamatozni, és

addig tartjuk bent, amíg milliomosok nem addig tartjuk bent, amíg milliomosok nem leszünk. A program számolja ki, hogy hány évet leszünk. A program számolja ki, hogy hány évet kell várnunk.kell várnunk.

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!"); }}

Iterációk - Iterációk - while utasítás utasítás

Iterációk - do...while Iterációk - do...while utasításutasítás

do utasítás; while(feltétel)

Amíg a feltétel igaz, újból végrehajtja az utasítást, Amíg a feltétel igaz, újból végrehajtja az utasítást, haha hamis, akkor a ciklust követő utasításra lép. hamis, akkor a ciklust követő utasításra lép. Több utasítás esetén: blokk { ... }Több utasítás esetén: blokk { ... }

Példa:Példa: Bankba tesszük a pénzünket kamatozni, és Bankba tesszük a pénzünket kamatozni, és addig tartjuk bent, amíg milliomosok nem leszünk. A addig tartjuk bent, amíg milliomosok nem leszünk. A program számolja ki, hogy hány évet kell várnunk.program számolja ki, hogy hány évet kell várnunk.

Iterációk - do...while Iterációk - do...while utasításutasí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!"); }}

Iterációk - for utasítás 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 : egy vagy több utasítás vesszővel elválasztva, mely(ek) egyszer hajtódik végre a elválasztva, mely(ek) egyszer hajtódik végre a ciklusmagba való első belépés előtt. Pl. ciklusmagba való első belépés előtt. Pl. ciklusváltozó deklarálása, inicializálása. A ciklusváltozó deklarálása, inicializálása. A ciklusváltozó típusa tetszőleges.ciklusváltozó típusa tetszőleges.

feltétel: amíg igaz, újból végrehajtja az utasítást, : amíg igaz, újból végrehajtja az utasítást, ha hamis, akkor a ciklust követő utasításra lép.ha hamis, akkor a ciklust követő utasításra lép.

léptetés: egy vagy több utasítás vesszővel : egy vagy több utasítás vesszővel elválasztva, mely(ek) a ciklusmag minden egyes elválasztva, mely(ek) a ciklusmag minden egyes lefutása után automatikusan végrehajtódik. lefutása után automatikusan végrehajtódik. Általában a ciklusváltozót szokás itt növelni vagy Általában a ciklusváltozót szokás itt növelni vagy csökkenteni.csökkenteni.

Iterációk - for utasításIterációk - for utasítás

A A while ciklus egy speciális esetének tekinthető: 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}

Iterációk - for utasításIterációk - for utasításpéldákpé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();}

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);

Kiugrás a ciklusbólKiugrás a ciklusból

Break utasítás: az aktuális utasítás: az aktuális utasításblokk-ból (pl. ciklusból) való utasításblokk-ból (pl. ciklusból) való azonnali kiugrást eredményezi.azonnali kiugrást eredményezi.

Continue utasítás: hatására a utasítás: hatására a vezérlés az utasításblokk (ciklus) vezérlés az utasításblokk (ciklus) végére kerül.végére kerül.

Metódusok írásaMetódusok írása A metódus fej szintaktikája:A metódus fej szintaktikája:

[módosítók] visszatérésitípus metódusneve( [paraméterlista] )

Néhány példa:Néhány példa: public static int min(int a, int b) public void vonalhuz() public void vonalhuz(int hossz) long fakt(byte n)//csomag szintű láthatóság

Módosítók lehetnek: Módosítók lehetnek: public, private, protected: láthatóság: láthatóság static: osztálymetódus: osztálymetódus stb.stb.

Függvény, eljárásFüggvény, eljárás

A metódusoknak két fajtáját A metódusoknak két fajtáját különböztetjük meg:különböztetjük meg: Eljárás–szerű metódus: visszatérési Eljárás–szerű metódus: visszatérési

értékének típusa értékének típusa void, azaz üres típus, , azaz üres típus, nem tér vissza értékkelnem tér vissza értékkel

Függvény–szerű metódus: visszatérési Függvény–szerű metódus: visszatérési értéké-nek típusa valamilyen értéké-nek típusa valamilyen voidtól tól különböző típus, azaz igazi értékkel tér különböző típus, azaz igazi értékkel tér visszavissza

A függvény eljárásként is hívható.A függvény eljárásként is hívható.

Metódusok jellemzőiMetódusok jellemzői

TúlterhelésTúlterhelés (overloading): lehet két egyforma (overloading): lehet két egyforma nevű, de különböző paraméterezésű metódus. nevű, de különböző paraméterezésű metódus. pl. pl. vonalhuz() ill. ill. vonalhuz(int hossz) vagy vagy min(int a, int b) ill. ill. min(double a, double b)

ParaméterátadásParaméterátadás: érték szerinti. Az aktuális : érték szerinti. Az aktuális paraméter típusának értékadás szerint paraméter típusának értékadás szerint kompatíbilisnek kell lennie a formális kompatíbilisnek kell lennie a formális paraméterrel.paraméterrel.

Visszatérés a metódusból: függvény esetén Visszatérés a metódusból: függvény esetén return után kötelezően meg kell adnunk egy után kötelezően meg kell adnunk egy értéket.értéket.

Metódusok jellemzőiMetódusok jellemzői

Az osztály metódusainak deklarálási sor-Az osztály metódusainak deklarálási sor-rendje tetszőleges. A rendje tetszőleges. A main-t elsőnek vagy -t elsőnek vagy utolsónak célszerű megadni. utolsónak célszerű megadni.

A metódusok nem ágyazhatóak egymásba.A metódusok nem ágyazhatóak egymásba. Lehet rekurzív metódusokat is definiálni.Lehet rekurzív metódusokat is definiálni. A metódusban –mint egyébként is bármely A metódusban –mint egyébként is bármely

blokkban– definiálhatunk lokális változót.blokkban– definiálhatunk lokális változót.

public class Metodusok{

public static void vonalhuz(int hossz){ for (int i=1; i<=hossz; i++) System.out.print("-"); System.out.println(); } public static void vonalhuz(){ vonalhuz(50); } public static int abs(int n){ if (n>=0) return n; else return -n; }

public 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(); } }

A A String osztály osztály

A A String osztályú objektum olyan osztályú objektum olyan szöveg tárolására szolgál, amelynek szöveg tárolására szolgál, amelynek értékét nem akarjuk megváltoztatni. értékét nem akarjuk megváltoztatni.

(Ha mégis szeretnénk, akkor ne a (Ha mégis szeretnénk, akkor ne a String, hanem a , hanem a Stringbuffer osztályt használ-juk, de ezzel nem osztályt használ-juk, de ezzel nem foglalkozunk.)foglalkozunk.)

Objektum létrehozása a Objektum létrehozása a new operátorral operátorral

Auto auto; //csak referenciaauto = new Auto("GHJ123”);//a konstruktor hívásával létrejön az objektum, //az auto referencia erre mutat

vagy vagy

Auto auto = new Auto("GHJ123”);

OsztályazonosítóOsztályazonosító objektum = new objektum = new OsztályazonosítóOsztályazonosító((paraméterlistaparaméterlista););

String objektum objektum létrehozása létrehozása

String szoveg; //csak referencia

szoveg = new String(”Ez a tartalma”);

csak StringString esetén ez egyszerűsíthető:

szoveg=”Ez a tartalma”;

A A String osztály metódusai osztály metódusai

Az eredeti objektumot Az eredeti objektumot nem változtatjáknem változtatják, , függvények, sokszor új String objektumot hoznak függvények, sokszor új String objektumot hoznak létre.létre.

Néhány metódus:Néhány metódus:

char charAt(int index)tetszőleges indexű karakterét adja vissza, az tetszőleges indexű karakterét adja vissza, az indexelés 0-val kezdődikindexelés 0-val kezdődik

int compareTo(String str)összehasonlítja, értéke 0, ha egyenlő; –, ha kisebb; összehasonlítja, értéke 0, ha egyenlő; –, ha kisebb; +, ha nagyobb, mint a paraméter+, ha nagyobb, mint a paraméter

boolean equals(Object anObject)igaz, ha az objektum String típusú, s karakterei ugyanazok

int indexOf(String str)az adott sztring első előfordulásának pozíciója lesz az értéke, ha nincs benne, akkor érték –1

int indexOf(String str, int fromIndex)az adott sztring első előfordulásának pozíciója lesz az értéke, a keresést a második paraméterben megadott sorszámú karak-tertől kezdi, ha nincs benne, akkor az érték –1

int length()hosszát adja vissza

String replace(char oldChar, char newChar)kicseréli a megadott karaktereket, s visszaadja az új sztringet (maga a sztring objektum nem változik meg)

String substring(int beginIndex)a paraméterben megadott pozíciótól a szöveg végéig kimásol

String substring(int beginIndex, int endIndex)a kezdő pozíciótól a végpozícióig kimásol, endIndex nem tartozik bele a részláncba, így a visszaadott sztring hossza endIndex- beginIndex

String toLowerCase()kisbetűsre alakítottan adja vissza

String toUpperCase()nagybetűsre alakítottan adja vissza

String trim()levágja a fehér szóközöket (space, tab, sorvégejel) az elejéről és végéről, s visszaadja

Stb.

Ezek példánymetódusok, hívásuk: objektumnév.metódusnév([paraméterlista])pl: int hossz = szoveg.length();

Sztringet bekérni a billentyűzetről az extra csomagbeli Console osztály readLine() metódusával lehet.pl: String nev = Console.readLine("A neved: ");

1. példa

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. példa

String s=Console.readLine();String elso=s;while(!s.equals("*")){ if(s.compareTo(elso)<0) elso=s; s=Console.readLine();}System.out.println(elso);

Osztály készítéseOsztály készítése

Objektum, osztályObjektum, osztály

ObjektumObjektum: Információkat tárol, és kérésre : Információkat tárol, és kérésre feladatokat hajt végre. Logikailag összetartozó feladatokat hajt végre. Logikailag összetartozó adatok és rajtuk dolgozó algoritmusok adatok és rajtuk dolgozó algoritmusok összessége:összessége: adatokadatok metódusokmetódusok

Az objektumot üzenetek (kérelmek) által lehet Az objektumot üzenetek (kérelmek) által lehet megkérni a feladatok elvégzésére. (Ez egy megkérni a feladatok elvégzésére. (Ez egy metódus végrehajtását jelenti.)metódus végrehajtását jelenti.)

Osztály (Osztály (class): ): Objektumtípus, amely alapján Objektumtípus, amely alapján példá-nyokat, azaz objektumokat hozhatunk létre.példá-nyokat, azaz objektumokat hozhatunk létre.

Előnyök, célokElőnyök, célok

A szoftverfejlesztés során az együtt A szoftverfejlesztés során az együtt változó részek elkülöníthetőkváltozó részek elkülöníthetők

Projektek közötti Projektek közötti újrahasznosíthatóság növeléseújrahasznosíthatóság növelése

Konstruktor, példánytag, Konstruktor, példánytag, osztálytagosztálytag

Az objektumot létre kell hozni, és inicializálni Az objektumot létre kell hozni, és inicializálni kell. Az inicializálást végző metódust kell. Az inicializálást végző metódust konstruktornakkonstruktornak nevezzük. nevezzük.

További fogalmak: További fogalmak: példányváltozópéldányváltozó, , példánymetóduspéldánymetódus, , osztályváltozóosztályváltozó (közös változó), (közös változó), osztálymetódusosztálymetódus (objektum létrehozása nélkül is (objektum létrehozása nélkül is

tud dolgozni, csak az osztályváltozókat tud dolgozni, csak az osztályváltozókat manipulálhatja)manipulálhatja)

OOP jellemzőkOOP jellemzők

BezárásBezárás, az információ elrejtése: az , az információ elrejtése: az adatokat csak interfészeken (metódusok) adatokat csak interfészeken (metódusok) keresztül lehet elérni.keresztül lehet elérni.

ÖröklődésÖröklődés: az utód osztály örökli az ős : az utód osztály örökli az ős adatait, metódusait, valamint tartalmazhat adatait, metódusait, valamint tartalmazhat újakat, és felülírhat régi metódusokat.újakat, és felülírhat régi metódusokat.

Polimorfizmus Polimorfizmus – többalakúság: ugyanarra – többalakúság: ugyanarra az üzenetre (kérelemre), azaz metódus az üzenetre (kérelemre), azaz metódus hívásra, különböző objektumok hívásra, különböző objektumok különbözőképpen reagál-hatnak.különbözőképpen reagál-hatnak.

LáthatóságLáthatóság

Az osztály deklarálásakor Az osztály deklarálásakor megadhatjuk, hogy mely adatokat megadhatjuk, hogy mely adatokat lehet az objektumon kívülről elérnilehet az objektumon kívülről elérni Nyilvános (Nyilvános (publicpublic): kívülről elérhető): kívülről elérhető Védett (Védett (protectedprotected): hozzáférés csak ): hozzáférés csak

saját és az örökös metódusok számárasaját és az örökös metódusok számára Privát (Privát (privateprivate): hozzáférés csak saját ): hozzáférés csak saját

metó-dusok számárametó-dusok számára

OO programOO program

fut vezérlő objektum

objektum1

üzenet3

üzenet1

objektum2

objektum3

üzenet2üzenet1

Egy objektumorientált program egymással kommunikáló objektumok összessége, melyben minden objektumnak megvan a feladatköre

Példa - Ember osztály és példányaiPélda - Ember osztály és példányai

pozíció(x,y)iránySzög

megy(táv)elmegy(x,y)fordul(szög)

Ember

katiandor

zsófi

Az OOP fontosabb Az OOP fontosabb definícióinak összefoglalásadefinícióinak összefoglalása Példánydeklaráció (példánytag): Példánydeklaráció (példánytag):

A példányonként (objektumonként) helyet foglaló A példányonként (objektumonként) helyet foglaló változók a változók a példányváltozókpéldányváltozók (példányadatok). (példányadatok).

Azon metódusokat, melyek példányadatokon Azon metódusokat, melyek példányadatokon dolgoznak, dolgoznak, példánymetódusoknakpéldánymetódusoknak nevezzük. nevezzük.

Osztálydeklaráció (osztálytag) (Osztálydeklaráció (osztálytag) (static) ) Az Az osztályváltozóosztályváltozó az osztály saját változója, az az osztály saját változója, az

egyes példányokban nem szerepel, valamilyen egyes példányokban nem szerepel, valamilyen közös adatot tárol. közös adatot tárol.

Az Az osztálymetódusosztálymetódus az osztály saját metódusa, az osztály saját metódusa, amely csak osztályváltozókon dolgozik.amely csak osztályváltozókon dolgozik.

LáthatóságLáthatóság

PrivátPrivát ( (private): csak az osztály saját metódusai ): csak az osztály saját metódusai férfér--hetnek hozzá.hetnek hozzá.

NyilvánosNyilvános ( (public): minden, az objektummal ): minden, az objektummal kapcsolatkapcsolat--ban álló kliens eléri, használhatja.ban álló kliens eléri, használhatja.

Egy osztály adatai általában privát adatok.Egy osztály adatai általában privát adatok.

Egy fordítási egység (java fájl) több osztályt is Egy fordítási egység (java fájl) több osztályt is tartalmaztartalmaz--hat, de közülük csak egy lehet nyilvános hat, de közülük csak egy lehet nyilvános ((public). Ha valamelyik osztályban szerepel a ). Ha valamelyik osztályban szerepel a main metódus, akkor az nyilvános kell hogy legyen. metódus, akkor az nyilvános kell hogy legyen.

Egy osztályban ugyanazon a néven Egy osztályban ugyanazon a néven dekla-rálható metódus és változó, sdekla-rálható metódus és változó, sőőt t a metódu-sok túlterhelheta metódu-sok túlterhelhetőőek. ek.

A deklarálás sorrendje általában:A deklarálás sorrendje általában: változókváltozók konstruktorokkonstruktorok metódusokmetódusok main metódus, ha van. metódus, ha van.

A lokális változók A lokális változók eltakarjákeltakarják az ugyanolyan az ugyanolyan nevnevűű osztály-, illetve példányváltozókat. osztály-, illetve példányváltozókat.

Ha az osztály deklarációjára szeretnénk Ha az osztály deklarációjára szeretnénk hivathivat--kozni, akkor osztályváltozó esetén az kozni, akkor osztályváltozó esetén az osztály nevével, példányváltozó esetén osztály nevével, példányváltozó esetén pedig a pedig a this this referenciával kell azt referenciával kell azt minminőősítenünk.sítenünk.

Változók alapértelmezés szerinti kezdeti Változók alapértelmezés szerinti kezdeti értékei: osztályváltozó vagy példányváltozó értékei: osztályváltozó vagy példányváltozó esetén 0, lokális változó esetén esetén 0, lokális változó esetén határozatlan.határozatlan.

KonstruktorokKonstruktorok Feladata az objektum Feladata az objektum new operátorral való létrehozásakor operátorral való létrehozásakor

annak inicializálása.annak inicializálása. Auto auto = new Auto("GHJ123”); A konstruktor speciális metódus, a következő szabályok A konstruktor speciális metódus, a következő szabályok

érvényesek rá:érvényesek rá: Neve kötelezően megegyezik az osztály nevével.Neve kötelezően megegyezik az osztály nevével. Csak a Csak a new operátorral hívható. operátorral hívható. Túlterhelhető.Túlterhelhető. Nincs visszatérési értéke, és nem is void.Nincs visszatérési értéke, és nem is void.

Ha az osztályban nem adunk meg explicit módon Ha az osztályban nem adunk meg explicit módon konstruktort, akkor az osztálynak lesz egy alapértelmezés konstruktort, akkor az osztálynak lesz egy alapértelmezés szerinti (default), paraméter nélküli konstruktora. szerinti (default), paraméter nélküli konstruktora.

Ha az osztályban létezik egy explicit konstruktor, akkor Ha az osztályban létezik egy explicit konstruktor, akkor nem lesz implicit, alapértelmezés szerinti konstruktora. nem lesz implicit, alapértelmezés szerinti konstruktora.

Példa - RaktárprogamPélda - Raktárprogam

Adott egy zöldségraktár, melyben pillanatnyilag egyetlen árut, paradicsomot raktározunk. A raktárba gyakran te-szünk be, illetve veszünk ki onnan paradicsomot. A para-dicsom pillanatnyi egységára 300 Ft, de ez változhat. Készítsünk olyan programot, mely segítségével rögzíteni tudjuk a megfelelő adatokat, és bármikor jelentést tudunk adni a paradicsom aktuális mennyiségéről, egységáráról és értékéről!

Végezzük el a következő akciókat: Tegyünk a raktárba 125 kg paradicsomot, aztán vegyünk ki 25 kg-ot, majd szállítsuk le a paradicsom egységárát 210 Ft-ra! Mindhárom akció után írjuk ki, mennyi paradicsom van raktáron és milyen értékben!

OsztálydiagramOsztálydiagram

RaktarProgram

-aru

-nev: String-egysegar: double-menny: double

Aru

+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)

OsztálydiagramOsztálydiagram

RaktarProgram

-aru

-nev: String-egysegar: double-menny: double

Aru

+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; }

Példányváltozók

Konstruktor

Osztálydiagram

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;}

Osztálydiagram

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

public void elvesz(double aMenny) { if (aMenny>0 && aMenny<=menny) menny -= aMenny; }

public String toString() { return nev+"\tEgysegar: "+egysegar+ "\tMenny: "+menny+"\tAr: "+getAr(); }}

Osztálydiagram

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(); }} Osztálydiagram

Kapcsolat

Objektum létrehozása

saját osztályából

Együttműködési diagramEgyüttműködési diagram

RaktarProgram aru:Aruprogram:

RaktarProgram

2: RaktarProgram()4: akciok()

3: Aru(aNev,aEgysegar)5: hozzatesz(aMenny)

6: elvesz(aMenny)7: setEgysegar(aEgysegar)

1: main(args)

OsztálydiagramOsztálydiagram

Bank

-szamla1-szamla2

-utolsoSzamlaSzam: int-szamlaSzam: int-tulajdonos: String-egyenleg: int

Szamla

+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)

Példa – BankprogamPélda – BankprogamKészítsünk egy banki programot, mely az ügyfelek számláit kezeli.Készítsünk egy banki programot, mely az ügyfelek számláit 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<=egyenleg) egyenleg-=osszeg; return egyenleg; } public String toString() { return "Szamlaszam: "+szamlaSzam+" Tulajd.: "+tulajdonos+ " Egyenleg: "+egyenleg; }}//Számla osztály vége

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 osztály vége

TömbökTömbök A tömb referencia típusú változó, melyet A tömb referencia típusú változó, melyet

deklarál-nunk kell. Az elemtípus lehet akár deklarál-nunk kell. Az elemtípus lehet akár primitív, akár referencia (osztály típusú primitív, akár referencia (osztály típusú vagy tömb típusú).vagy tömb típusú).

DeklarálásDeklarálás::

elemtípus [] tömbazonosító; vagyvagy elemtípus tömbazonosító [];

pl:pl: int [] a; int b[];

Az így deklarált változó képes egy, a Az így deklarált változó képes egy, a megadott elemtípusú tömbre mutatni. Még megadott elemtípusú tömbre mutatni. Még csak a referenciának (memóriacímnek) csak a referenciának (memóriacímnek) foglaltunk helyet, a tömböt külön létre kell foglaltunk helyet, a tömböt külön létre kell hoznunk.hoznunk.

Létrehozás Létrehozás (futás közben): (futás közben): new elemtípus [méret] pl: pl: a = new int[10];

b = new int[20]; Természetesen történhet rögtön a Természetesen történhet rögtön a

deklaráláskor is a létrehozás: deklaráláskor is a létrehozás: String[] sTomb = new String[50];

Minden tömbnek van egy length konstansa. Indexelés: 0 .. length-1

int[] iArray=new int[10];

for(int i=0; i<iArray.length; i++) iArray[i]=Console.readInt(i+1+". szam: ");

System.out.println("Az elemek visszafele:");for(int i=iArray.length-1; i>=0; i--) System.out.print(iArray[i]+" ");

for(int i=0; i<10; i++)

Tömb inicializálásaTömb inicializálása

Inicializáló blokkInicializáló blokk: deklaráláskor a tömb : deklaráláskor a tömb elemeinek kezdeti értékek adhatók, pl:elemeinek kezdeti értékek adhatók, pl: int[] iArray={2, 4, 6, 8, 10};int[] iArray={2, 4, 6, 8, 10}; char[] char[]

szamjegyek={'0','1','2','3','4','5','6','7','8','9'}szamjegyek={'0','1','2','3','4','5','6','7','8','9'}

Ekkor nem kell a tömböt a Ekkor nem kell a tömböt a new new operátorral létrehozni, a operátorral létrehozni, a {}{} blokk képző blokk képző operátor megteszi ezt helyettünk. operátor megteszi ezt helyettünk.

A tömb mérete pontosan akkora lesz, A tömb mérete pontosan akkora lesz, amennyi a felsorolt értékek száma.amennyi a felsorolt értékek száma.

Értékadás tömbök közöttÉrtékadás tömbök között

A A t2 tömb tömb értékadásértékadás szerint kompatibilis a szerint kompatibilis a t1 tömbbel (azaz tömbbel (azaz t1=t2 megengedett), ha megengedett), ha primitív elemtípus esetén primitív elemtípus esetén t1 és és t2 elemtípusa elemtípusa

azonos;azonos; referencia elemtípus esetén referencia elemtípus esetén t2 elemtípusa elemtípusa t1 elem- elem-

típusával azonos, vagy annak leszármazottja.típusával azonos, vagy annak leszármazottja. Értékadáskor a tömb referenciája kap értéket, Értékadáskor a tömb referenciája kap értéket,

nem pedig az elemei (a tömb nem másolódik, nem pedig az elemei (a tömb nem másolódik, hanem átíródik a mutatója), így különböző hosz-hanem átíródik a mutatója), így különböző hosz-szúságú tömbök is értékül adhatók egymásnak.szúságú tömbök is értékül adhatók egymásnak.

Kétdimenziós tömbKétdimenziós tömb

Deklarálás: Deklarálás: elemtípus [][] tömbazonosító; Teljes kétdimenziós tömb létrehozása:Teljes kétdimenziós tömb létrehozása:

new elemtípus [méret0] [méret1] Pl: Pl: int[][] matrix

Lépésenkénti (soronkénti) létrehozás. A sorok Lépésenkénti (soronkénti) létrehozás. A sorok különböző méretűek lehetnek, pl:különböző méretűek 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];

Analóg a helyzet a többdimenziós tömbök esetén.Analóg a helyzet a többdimenziós tömbök esetén.

= new int[3][4];

Tömb paraméter Tömb paraméter

Formális paraméterként egy tömbreferenciát Formális paraméterként egy tömbreferenciát kell deklarálnunk, amely fogadja az aktuális kell deklarálnunk, amely fogadja az aktuális tömb referenciáját.tömb referenciáját.

Az aktuális tömbnek értékadás szerint Az aktuális tömbnek értékadás szerint kompatíbi-lisnek kell lennie a formális kompatíbi-lisnek kell lennie a formális tömbbel.tömbbel.

PéldaPélda: Írjunk osztályt, amelynek adata egy : Írjunk osztályt, amelynek adata egy int tömb. Az objektum létrehozásakor a tömb. Az objektum létrehozásakor a konstruktor paraméterében adhassuk meg a konstruktor paraméterében adhassuk meg a tömb hosszát. Tartalmazzon egy tömb hosszát. Tartalmazzon egy bekér, , kiir és egy és egy osszeg nevű metódust! nevű metódust!

import extra.*;class Tomb{ private int[]t; public Tomb(int hossz){ t = new int[hossz]; } public void beker(){ for(int i=0; i<t.length; i++) t[i] = Console.readInt(i+1+". szam: "); } public void kiir(){ for(int i=0;i<t.length;i++) System.out.print(t[i]+" "); System.out.println(); } public int osszeg(){ int s=0; for(int i=0;i<t.length;i++) s+=t[i]; return s; }}//Tomb

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(); }}

KonténerekKonténerek

A konténer olyan objektum, amely A konténer olyan objektum, amely objektumokat tárol, és alkalmas különböző objektumokat tárol, és alkalmas különböző karbantartási, keresési és bejárási funkciók karbantartási, keresési és bejárási funkciók megvalósítására. megvalósítására.

A java.util csomagban helyet foglaló kollekció A java.util csomagban helyet foglaló kollekció keretrendszer egy általános konténereket keretrendszer egy általános konténereket tartalmazó osztálygyűjtemény. tartalmazó osztálygyűjtemény.

Általánosan jellemző rájuk: ha bármilyen Általánosan jellemző rájuk: ha bármilyen objektumot beteszünk egy konténerbe, az objektumot beteszünk egy konténerbe, az „elveszti az osztálytudatát”.„elveszti az osztálytudatát”.

Vector osztályVector osztály

„„Változtatható méretű tömb”, amely Változtatható méretű tömb”, amely ren-delkezik a fenti funkciókkal. ren-delkezik a fenti funkciókkal.

Mérete az elemek hozzáadásával Mérete az elemek hozzáadásával automa-tikusan bővül. automa-tikusan bővül.

Elemei indexelhetőek. Elemei indexelhetőek. Elemei rendezetlenek (a Elemei rendezetlenek (a CollectionsCollections

osztállyal lehet rendezni).osztállyal lehet rendezni).

void add(int index, Object element)           Inserts the specified element at the specified position in this Vector. boolean add(Object o)           Appends the specified element to the end of this Vector. void clear()           Removes all of the elements from this Vector. boolean contains(Object elem)           Tests if the specified object is a component in this vector.Object get(int index)           Returns the element at the specified position in this Vector.int indexOf(Object elem)           Searches for the first occurence of the given argument, testing for equality using the equals method. int indexOf(Object elem, int index)           Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method. boolean isEmpty()           Tests if this vector has no components.Object remove(int index)           Removes the element at the specified position in this Vector.

boolean remove(Object o)           Removes the first occurrence of the specified element in this Vector If the Vector does not contain the element, it is unchanged. Object set(int index, Object element)           Replaces the element at the specified position in this Vector with the specified element. int size()           Returns the number of components in this vector. String toString()           Returns a string representation of this Vector, containing the String representation of each element.

TörpeProgramTörpeProgram

-nev: String

-magassag: int

Ember

+Ember(String,int)

+Ember(String)

+getNev(): String

+getMagassag():int

+setMagassag(int)

+equals(Object): boolean

+toString(): String

TorpeProgram

TorpeProgram()

bevitel()

lista()

kereses()

+main()

*torpek

{Vector}

import extra.*;import java.util.*;

class Ember{ private String nev; private int magassag; public Ember(String nev, int magassag){ this.nev = nev; this.magassag = magassag; } public Ember(String nev){ this(nev,0); } public String getNev(){ return nev; } public int getMagassag(){ return magassag; }

public void setMagassag(int mag){ if (mag>0) magassag = mag; } public boolean equals(Object obj){ return nev.equals(((Ember)obj).getNev()); } public String toString(){ return Format.left(nev,10) + Format.right(magassag,3); }

}//Ember osztály vége

public class TorpeProgram { private Vector torpek = new Vector(); // A torpék bevitele: void bevitel(){ Ember torpe; String nev = Console.readLine("\nTorpe neve: "); while (!nev.equals("")){ torpe = new Ember(nev); torpe.setMagassag(Console.readInt("magassaga : ")); torpek.add(torpe); nev = Console.readLine("Torpe neve: "); } }

void bevitel(){ Ember torpe; String nev = Console.readLine("\nTorpe neve: "); while(!nev.equals("")){ if(torpek.contains(torpe = new Ember(nev))) System.out.println("Van mar ilyen torpe!"); else{ torpe.setMagassag(Console.readInt("magassaga : ")); torpek.add(torpe); } nev = Console.readLine("Torpe neve: "); }}

torpe = new Ember(nev)); if(torpek.contains(torpe)) System.out.println("Van mar ilyen torpe!"); else{ torpe.setMagassag(Console.readInt("magassaga : ")); torpek.add(torpe); } nev = Console.readLine("Torpe neve: "); }}

// Egyszerű lista, beépített módon: void lista1(){ System.out.println("\nBeepitett lista:"); System.out.println(torpek); } // torpek listázása index szerint, toString()-gel: void lista2(){ System.out.println("\nLista index szerint:"); for(int i=0; i<torpek.size(); i++){ System.out.println(torpek.get(i)); } } // Listázás toString() nélkül: void lista3(){ Ember e; System.out.println("\nEgyeni lista:"); for(int i=0; i<torpek.size(); i++){ e = (Ember)(torpek.get(i)); System.out.println("Nev: "+e.getNev()+ " Magassag: "+e.getMagassag()); } }

// Egy törpe megkeresése: void kereses() { System.out.println("\nKereses:"); Ember keresettEmber = new Ember( Console.readLine("Torpe neve: ")); int poz = torpek.indexOf(keresettEmber); if (poz >= 0) System.out.println("Van, magassaga:"+ ((Ember)(torpek.get(poz))).getMagassag()); else System.out.println("Nincs ilyen"); } public static void main(String[] args) { TorpeProgram tp = new TorpeProgram(); tp.bevitel(); tp.lista1(); tp.lista2(); tp.lista3(); tp.kereses(); }}

Készítsen egy KaveAutomata osztályt, melynek Készítsen egy KaveAutomata osztályt, melynek adatai: kávémárka, ár (Ft/dl), a tartályban lévő adatai: kávémárka, ár (Ft/dl), a tartályban lévő mennyiség, a tartály kapacitása. mennyiség, a tartály kapacitása.

A konstruktor paramétereken keresztül inicializálja A konstruktor paramétereken keresztül inicializálja a fajtát, az árat és a kapacitást, a tartály legyen a fajtát, az árat és a kapacitást, a tartály legyen tele. tele.

Készítse el az alábbi metódusokat:Készítse el az alábbi metódusokat: - beállító és lekérdező metódusok az árra.- beállító és lekérdező metódusok az árra. - vesz: paraméterként adhatjuk meg, hogy hány dl-t - vesz: paraméterként adhatjuk meg, hogy hány dl-t

veszünk, visszatérési érték a fizetendő összeg. Ha nincs a veszünk, visszatérési érték a fizetendő összeg. Ha nincs a venni kívánt mennyiség a tartályban, akkor -1 legyen a venni kívánt mennyiség a tartályban, akkor -1 legyen a visszatérési érték.visszatérési érték.

- feltölt: tele tölti a tartályt, visszatérési értéke a betöltött - feltölt: tele tölti a tartályt, visszatérési értéke a betöltött mennyiség.mennyiség.

- toString: az összes adat kiírására.- toString: az összes adat kiírására.

A vezérlő KaveProgram osztályban hozzon létre egy A vezérlő KaveProgram osztályban hozzon létre egy KaveAutomata osztályú objektumot, majd KaveAutomata osztályú objektumot, majd szimulálja a működését. szimulálja a működését.

import extra.*;

class KaveAutomata{ private String marka; private double ar; private double mennyiseg; private double kapacitas; public KaveAutomata(String marka, double ar, double kapacitas){ this.marka = marka; this.ar = ar; this.kapacitas = kapacitas; mennyiseg = kapacitas; } public double getAr(){ return ar; }

public void setAr(double ar){ this.ar = ar; }

public double vesz(double menny){ if (menny<=mennyiseg){ mennyiseg-=menny; return menny*ar; } else{ return -1; } } public double feltolt(){ double kell=kapacitas-mennyiseg; mennyiseg=kapacitas; return kell; } public String toString(){ return "Marka: "+marka+"Ar: "+ar+"Kapacitas: "+kapacitas+ " Mennyiseg: "+mennyiseg; }}

KaveAutomata automata = new KaveAutomata("Omnia",100,50);

double m=Console.readDouble("Hany decit: "); fiz = automata.vesz(m);if (fiz!=-1) System.out.println(fiz+" Ft-ot kell fizetnie");else System.out.println("Nincs annyi");

System.out.println(automata);

System.out.println("Feltoltes "+automata.feltolt()+" dl");