Java – start!
description
Transcript of Java – start!
![Page 1: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/1.jpg)
www.xsys21.huExpert software systems for the 21th century
Vég Csaba: Java-Start!
Java – start!Minden jog fenntartva. A szerző előzetes írásbeli engedélye nélkül
jelen anyagot vagy annak részleteit más nyelvre lefordítani, reprodukálni és közölni tilos!
Non-profit oktatási intézmények ingyenesen felhasználhatják; más-jellegű felhasználáshoz, így pl.
tanfolyam-tartáshoz az XSys Kft. hozzájárulása szükséges.
A Java a Sun Mictosystems, Inc. bejegyzett védjegye.
![Page 2: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/2.jpg)
www.xsys21.huExpert software systems for the 21th century
2Vég Csaba: Java-start!
1.„Hello”
![Page 3: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/3.jpg)
www.xsys21.huExpert software systems for the 21th century
3Vég Csaba: Java-start!
„Hello!”
Írjuk ki a Hello! szöveget!
// Hello.java// Hello.java
public class Hello {public class Hello {
public static void main(String[] args) {public static void main(String[] args) {
System.out.println("Hello!");System.out.println("Hello!");
}}
}}
![Page 4: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/4.jpg)
www.xsys21.huExpert software systems for the 21th century
4Vég Csaba: Java-start!
Megjegyzés
// 1.1 Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
Megjegyzés
A Java figyelmen kívül hagyja a sor // után A Java figyelmen kívül hagyja a sor // után következő részét.következő részét.
![Page 5: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/5.jpg)
www.xsys21.huExpert software systems for the 21th century
5Vég Csaba: Java-start!
Osztály (class)// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
Hello: publikus osztály
Objektumorientált nyelvekben a programunkat Objektumorientált nyelvekben a programunkat osztályoknak (class) nevezett zárt egységekből osztályoknak (class) nevezett zárt egységekből építjük felépítjük fel
publikus (mindenki által használható) osztálypublikus (mindenki által használható) osztály
![Page 6: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/6.jpg)
www.xsys21.huExpert software systems for the 21th century
6Vég Csaba: Java-start!
Jellegzetességek
// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
jellegzetességek
A nevet követően,kapcsos zárójelek között soroljuk A nevet követően,kapcsos zárójelek között soroljuk fel az osztályhoz tartozó elemeket, melyeket az fel az osztályhoz tartozó elemeket, melyeket az osztály jellegzetességeinek (feature) nevezünkosztály jellegzetességeinek (feature) nevezünk. .
![Page 7: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/7.jpg)
www.xsys21.huExpert software systems for the 21th century
7Vég Csaba: Java-start!
„Hello” osztály definíciója
public class Hello { ...}
…
publikus osztály
az osztály neve
ide kerülnek az osztályjellegzetességei
![Page 8: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/8.jpg)
www.xsys21.huExpert software systems for the 21th century
8Vég Csaba: Java-start!
public static void main(String[] args)
public class Hello { // Hello.java
public static void main(String[] args) {
System.out.println("Hello!");
}
}
main
Ha egy pontosan ilyenHa egy pontosan ilyen ( (main nevű, „publikus és main nevű, „publikus és statikus”, stb.statikus”, stb.)) jellegzetességet jellegzetességet megmegadunk, akkor a adunk, akkor a Java el tudja indítani, futtatni tudja az osztályt. Java el tudja indítani, futtatni tudja az osztályt.
Az osztály futtatásaAz osztály futtatása:: a a kapcsoszárójelek közötti kapcsoszárójelek közötti programrész végrehajtprogramrész végrehajtásaása..
![Page 9: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/9.jpg)
www.xsys21.huExpert software systems for the 21th century
9Vég Csaba: Java-start!
Kiírás
// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello!");
}
}Kiírás a konzolra
A zárójelek között számérték vagy egy egyszerű A zárójelek között számérték vagy egy egyszerű kifejezés is szerepelhetkifejezés is szerepelhet
![Page 10: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/10.jpg)
www.xsys21.huExpert software systems for the 21th century
10Vég Csaba: Java-start!
Kifejezés kiírása
Írjuk ki a kifejezés értékét!
public class Kiírás {public class Kiírás {
public static void main(String[] args) {public static void main(String[] args) {
System.out.println( 2.8/3*(1+3) );System.out.println( 2.8/3*(1+3) );
}}
}}
)31(3
8.2
![Page 11: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/11.jpg)
www.xsys21.huExpert software systems for the 21th century
11Vég Csaba: Java-start!
Szövegek összefűzése
Több szöveget a + művelettel fűzhetünk össze, így a megjelenő értéket magyarázó szöveggel is ki tudjuk egészíteni.
public class Kiírás {public class Kiírás {
public static void main(String[] args) {public static void main(String[] args) {
System.out.println("2.8/3*(1+3) értéke: "+ System.out.println("2.8/3*(1+3) értéke: "+ (2.8/3*(1+3))+".");(2.8/3*(1+3))+".");
}}
}}
összefűzés
összefűzés
![Page 12: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/12.jpg)
www.xsys21.huExpert software systems for the 21th century
12Vég Csaba: Java-start!
JDKJava nyelvű programok készítéséhez (fordításhoz) szükséges egy fejlesztői környezet.
JDK: Java Development Kit A Java nyelvet kifejlesztő SUN által ingyen rendelkezésre
bocsátott „Java fejlesztői csomag” www.javasoft.com címről letölthető
Java programozás: JDK: minimális készlet Integrált fejlesztői környezet (IDE: Integrated
Development Environment)
![Page 13: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/13.jpg)
www.xsys21.huExpert software systems for the 21th century
13Vég Csaba: Java-start!
JDK telepítéseA telepítés részben bizonyos állományok („fájlok”) elhelyezését jelenti.
Fordító, futtató és kiegészítő programok elérhetővé tétele. (PATH).
A Java programok környezetét jelentő állományok helye. CLASSPATH elnevezésű környezeti változó: osztályokat tartalmazó könyvtárakat, több osztályt/könyvtárat tömörítetten tároló jar v. zip
állományok.
A CLASSPATH értékét ki kell egészítenünk azzal a könyvtárral, amelybe elhelyezzük a programjainkat. (esetleg az aktuális könyvtárral)
![Page 14: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/14.jpg)
www.xsys21.huExpert software systems for the 21th century
14Vég Csaba: Java-start!
Fordítás és futtatásHello.java szöveges állomány. Állomány neve = a publikus osztály neve .java kiterjesztés!
Fordítás: Java compiler javac Hello.java eredmény: Hello.class
Futtatás: java Hello (Hello! szöveg)
Hello.java
Hello.classjavac
java
fordítás
futtatás
![Page 15: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/15.jpg)
www.xsys21.huExpert software systems for the 21th century
15Vég Csaba: Java-start!
Fordítás és futtatás
class állomány: bájtkód forma java paranccsal indítható Java virtuális gép (JVM: Java Virtual Machine).
Gépfüggetlen: más gépen is futtatható (hálózat)
Hello.java
Hello.classjavac
java
fordítás
futtatás
![Page 16: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/16.jpg)
www.xsys21.huExpert software systems for the 21th century
16Vég Csaba: Java-start!
MegjegyzésekA megjegyzéseket a fordítóprogram figyelmen kívül hagyja. Megjegyzés: ahova kiegészítő szóközöket is írhatunk.
A Java három fajta megjegyzést ismer. // után a sor végéig tartó rész, /* és */ között: több soros (nem ágyazhatók egymásba), /** és */ között (speciális változat): dokumentációs megjegyzés
valamely definiált elem (pl. osztály vagy jellegzetesség) előtt. javadoc program: html dokumentáció.
(szabványos környezet dokumentációja is így készült)
![Page 17: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/17.jpg)
www.xsys21.huExpert software systems for the 21th century
17Vég Csaba: Java-start!
AzonosítóAzonosító: programelem elnevezése betűvel kezdődik és betűvel vagy számjeggyel folytatódik
A $ és az _ jelek is betűnek számítanak ($ jel a Java céljaira) Unicode szabvány alapján a nemzeti karakterek
(pl. á, é, stb.) kis- és a nagybetűk különbözők
A Java nyelv készítőinek ajánlása: osztályok elnevezését nagybetűvel kezdjük, jellegzetességek nevét kisbetűvel kezdjük Több szavas elnevezés:
pl. a születési dátum => születésiDátum
![Page 18: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/18.jpg)
www.xsys21.huExpert software systems for the 21th century
18Vég Csaba: Java-start!
KulcsszavakKulcsszavak: csak a nyelv által meghatározott jelentésben használhatók (kis- és a nagybetűk!)
abstract, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, extends, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, super, switch, synchronize, this, throw, throws, transient, try, void, volatile, while
![Page 19: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/19.jpg)
www.xsys21.huExpert software systems for the 21th century
19Vég Csaba: Java-start!
Applet
Java különlegessége: www dokumentumokba Java nyelvű programokat illeszthetünk be
applet (kisalkalmazás): html-oldalakba ágyazható intelligensebb megjelenítés és működés
A web-lapon az applet kap egy adott méretű grafikus területet, ahova rajzolni lehet.
![Page 20: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/20.jpg)
www.xsys21.huExpert software systems for the 21th century
20Vég Csaba: Java-start!
Applet beágyazásaHelloApplet.html
<HTML><HEAD><TITLE>HelloApplet</TITLE></HEAD>
<BODY>
Kiírás: <applet code="HelloApplet.class" width=80 height=15> </applet>
</BODY>
</HTML>
HelloApplet.class: elhelyezni a megfelelő könyvtárba.
A web-lap megtekintésekor a program automatikusan elindul.
applet-tag futtatandó állomány
grafikus terület
Helyettesítő szöveg
![Page 21: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/21.jpg)
www.xsys21.huExpert software systems for the 21th century
21Vég Csaba: Java-start!
Szöveg kirajzolása appletből
public class HelloApplet extends java.applet.Applet { public void paint(java.awt.Graphics g) { g.drawString("Hello!", 5, 12); }}
Más szerkezetűekRajzolás: paintSzöveg kirajzolása: drawString
![Page 22: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/22.jpg)
www.xsys21.huExpert software systems for the 21th century
22Vég Csaba: Java-start!
appletviewerapplet indítása: rá hivatkozó html oldal
Böngészőappletviewer (JDK) figyelmen kívül hagyja a html-lapon szereplő többi szöveget több applet esetén mindegyiket külön ablakban jeleníti meg
Java alkalmazásból is lehetséges a grafikus megjelenítésAppletből is kiírhatunk szöveget a konzolra a szöveg megtekintéséhez a böngészőben be kell
kapcsolnunk a Java konzol megjelenítését általában diagnosztikai üzenetek
![Page 23: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/23.jpg)
www.xsys21.huExpert software systems for the 21th century
23Vég Csaba: Java-start!
Rajzolás appletből// width=200 height=100
public class RajzApplet extends java.applet.Applet {
public void paint(java.awt.Graphics g) {
g.setColor(java.awt.Color.blue); g.fillRect(10,20,180,60);
g.setColor(java.awt.Color.red); g.fillOval(20,10,100,50);
}
}
![Page 24: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/24.jpg)
www.xsys21.huExpert software systems for the 21th century
24Vég Csaba: Java-start!
2.Egyszerű számítás
![Page 25: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/25.jpg)
www.xsys21.huExpert software systems for the 21th century
25Vég Csaba: Java-start!
Egyszerű számításA téglalap adataiból számítsuk ki a kerületét és a területét!
Téglalap kerülete
Téglalap területe
részfeladatok
Téglalap
kerület
terület
osztály részfeladatai (funkciók)
Téglalap kerület(): double terület(): double
metódusok
Téglalap-a: double-b: double+kerület(): double {2*(a+b)}+terület(): double {a*b}
tulajdonságokTéglalap
-a: double-b: double+ (a': double, b': double)+kerület(): double {2*(a+b)}+terület(): double {a*b}
konstruktor
- saját+publikus
valós érték
![Page 26: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/26.jpg)
www.xsys21.huExpert software systems for the 21th century
26Vég Csaba: Java-start!
Osztály és objektum
Osztály: típus, olyan keret, melyet
konkrét adatokkal tölthetünk fel. pl.: egy Téglalapnak van egy a és egy b tulajdonsága,
illetve egy kerület és egy terület metódusa. Konkrét Téglalap: a két oldalhosszúságnak konkrét
értéke van, így a téglalap a kerület és a terület értékeit is meg tudja adni.
Objektum (vagy példány): a konkrét elem Az osztály az objektumainak a típusa, azaz a
lehetséges objektumok közös jellegzetességeit határozza meg.
Téglalap-a: double-b: double+ (a': double, b': double)+kerület(): double {2*(a+b)}+terület(): double {a*b}
![Page 27: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/27.jpg)
www.xsys21.huExpert software systems for the 21th century
27Vég Csaba: Java-start!
TéglalapKonstrukció (létrehozás): adott osztályú
objektum készítése (példánkban egy konkrét Téglalap felvétele)
Megadása: egy különleges metódus, a konstruktor (constructor) segítségével: az objektumot milyen értékek (esetleg objektumok) alapján és milyen módon készíthetjük el.(a jel arra utal, hogy az objektumot a zárójelek között felsorolt paraméterekből hozzuk létre.)
Konstruktor esetén a + jel azt jelenti, hogy a „külvilág számára” engedélyezzük az objektum létrehozását.
Téglalap-a: double-b: double+ (a': double, b': double)+kerület(): double {2*(a+b)}+terület(): double {a*b}
![Page 28: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/28.jpg)
www.xsys21.huExpert software systems for the 21th century
28Vég Csaba: Java-start!
Téglalap -a: double …
... private double a; ...
…
Téglalap
+ (a': double, b': double) …
... public Téglalap(double a_, double b_) { a=a_; b=b_; } ...
Téglalap … +kerület(): double {2*(a+b)} … ...
public double kerület() { return 2*(a+b); } ...
tulajdonságok
konstrukció
Téglalap-a: double-b: double+ (a': double, b': double)+kerület(): double {2*(a+b)}+terület(): double {a*b}
metódusokértékadás
visszatérési érték
![Page 29: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/29.jpg)
www.xsys21.huExpert software systems for the 21th century
29Vég Csaba: Java-start!
Téglalap
public class Téglalap {
private double a;
private double b;
public Téglalap(double a_, double b_) {a=a_;b=b_;}
public double kerület() { return 2*(a+b); }
public double terület() { return a*b; }
}
Téglalap-a: double-b: double+ (a': double, b': double)+kerület(): double {2*(a+b)}+terület(): double {a*b}
![Page 30: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/30.jpg)
www.xsys21.huExpert software systems for the 21th century
30Vég Csaba: Java-start!
Használatpublic class Téglalap { private double a; private double b; public Téglalap(double a_, double b_) { a=a_; b=b_; } public double kerület() { return 2*(a+b); } public double terület() { return a*b; } public static void main(String[ ] args) { Téglalap t=new Téglalap(10,20); System.out.println("A téglalap kerülete: "+t.kerület()+ ", területe: "+t.terület()+"."); }}
![Page 31: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/31.jpg)
www.xsys21.huExpert software systems for the 21th century
31Vég Csaba: Java-start!
Téglalap t=new Téglalap(10,20);
t.kerület() objektum jellegzetessége: . operátor
... new Téglalap(10,20) ...
a konstruktor paraméterei milyen osztályú
lesz az új objektum
"új"
Téglalap t = ...
változó
kezdőértéke változó neve változó típusa
![Page 32: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/32.jpg)
www.xsys21.huExpert software systems for the 21th century
32Vég Csaba: Java-start!
Változó definíciója
típus név;
típus név = kezdőérték;
Több, azonos típusú változódouble a,b; double x=1,y,z=3*2.54;
![Page 33: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/33.jpg)
www.xsys21.huExpert software systems for the 21th century
33Vég Csaba: Java-start!
VáltozóLokális változó v. paraméter lokális változó: definiálatlan kezdőértékűFordítási hiba: double x; return x;
Jellegzetességként : attribútum, mező, vagy tagváltozó. Alapérték:
számok esetén 0, logikai változó esetén false, karakteres változó esetén a null-karakter ('\0'
„semmilyen” karakter), referencia esetén null (később)
![Page 34: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/34.jpg)
www.xsys21.huExpert software systems for the 21th century
34Vég Csaba: Java-start!
Jellegzetességek elérése
Osztály definícióján belül közvetlenül elérhetők, az objektum határain kívül a . operátort kell használnunk.
Osztály definícióján belül az aktuális objektumra a this kulcsszóval hivatkozhatunk akkor is elérhetjük az objektum jellegzetességeit (pl. this.a), ha
egy paraméter vagy egy lokális változó neve megegyezik az osztály egy jellegzetességének a nevével.
![Page 35: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/35.jpg)
www.xsys21.huExpert software systems for the 21th century
35Vég Csaba: Java-start!
3.Tulajdonságok
![Page 36: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/36.jpg)
www.xsys21.huExpert software systems for the 21th century
36Vég Csaba: Java-start!
Komponensek
Adott módú („szabványos”) programozásJava filozófiája
Nagyobb flexibilitást biztosít
Attribútumok helyett tulajdonságok (property)
Téglalap-a: double-b: double+ (a': double, b': double)+kerület(): double {2*(a+b)}+terület(): double {a*b}
![Page 37: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/37.jpg)
www.xsys21.huExpert software systems for the 21th century
37Vég Csaba: Java-start!
Komponensek (adott módú programozás)
Tulajdonságok
Származtatott v. Alap tulajdonság
x: double // csak lekérdezhető, de nem beállítható
y: double< // lekérdezhető és beállítható
z: double<< // csak beállítható, de nem lekérdezhető
Téglalap +a: double +b: double + (a': double, b': double) +kerület(): double {2*(a+b)} +terület(): double {a*b}
Téglalap +a: double +b: double + (a': double, b': double) +/kerület: double {2*(a+b)} +/terület: double {a*b}
![Page 38: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/38.jpg)
www.xsys21.huExpert software systems for the 21th century
38Vég Csaba: Java-start!
Lekérdező/beállító metódusok
private double xx; // ha nem származtatott
public double getXx() { return xx; } // ha lekérdezhető
public void setXx(double xx_) { xx=xx_; } //ha beállítható
public class Téglalap {public class Téglalap { private double a;private double a; private double b;private double b; public Téglalap(double a_, double b_) { a=a_; b=b_; }public Téglalap(double a_, double b_) { a=a_; b=b_; } public double public double getKerületgetKerület() { return 2*(a+b); }() { return 2*(a+b); } public double public double getTerületgetTerület() { return a*b; }() { return a*b; }}}
![Page 39: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/39.jpg)
www.xsys21.huExpert software systems for the 21th century
39Vég Csaba: Java-start!
public class Téglalap { private double a; public double getA() { return a; } public void setA(double a_) { a=a_; } private double b; public double getB() { return b; } public void setB(double b_) { b=b_; } public Téglalap(double a_, double b_){ a=a_;b=b_;} public double getKerület() { return 2*(a+b); } public double getTerület() { return a*b; }}
![Page 40: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/40.jpg)
www.xsys21.huExpert software systems for the 21th century
40Vég Csaba: Java-start!
Kipróbálás
Téglalap t=new Téglalap(10,20);
System.out.println(t.getA()+"x"+t.getB()+" téglalap");
System.out.println(" kerülete: "+t.getKerület());
System.out.println(" területe: "+t.getTerület());
![Page 41: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/41.jpg)
www.xsys21.huExpert software systems for the 21th century
41Vég Csaba: Java-start!
Számított tulajdonság
( értéke: Math.PI )
Kör+sugár: double+ (sugár': double)+/kerület: double {2*sugár*}+/terület: double {sugár2*}
![Page 42: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/42.jpg)
www.xsys21.huExpert software systems for the 21th century
42Vég Csaba: Java-start!
public class Kör public class Kör { private double sugár; public double getSugár () { return sugár; } public void setSugár(double sugár_) { sugár=sugár_; } public Kör(double sugár_) { sugár=sugár_; } public double getKerület() { return 2*sugár*Math.PI; } public double getTerület() { return sugár*sugár*Math.PI; } public static void main(String[] args) { Kör k=new Kör(1); System.out.println(k.getSugár()+" egység sugarú kör"); System.out.println(" kerülete: "+k.getKerület()); System.out.println(" területe: "+k.getTerület()); }}
![Page 43: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/43.jpg)
www.xsys21.huExpert software systems for the 21th century
43Vég Csaba: Java-start!
MathPI: double E: double sin(x: double): double asin(x: double): doublecos(x: double): doubleacos(x: double): doubletan(x: double): doubleatan(x: double): double
![Page 44: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/44.jpg)
www.xsys21.huExpert software systems for the 21th century
44Vég Csaba: Java-start!
Mathabs(a: int): intabs(x: double): doublemin(a: int, b: int): intmax(a: int, b: int): intmin(x: double, y: double): double max(x: double, y: double): doublerint(x: double): double sqrt(x: double): double pow(x: double, a:double): double exp(a: double): doublelog(x: double): doublerandom(): double
![Page 45: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/45.jpg)
www.xsys21.huExpert software systems for the 21th century
45Vég Csaba: Java-start!
Egy másodpercekben megadott időtartam alapján írjuk ki, hogy az hány óra, hány perc és hány másodperc!
Időtartam +óra: int +perc: int +másodperc: int + (összes: int)
Időtartam:
getÓra():int
getPerc():int
getMásodperc():int
![Page 46: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/46.jpg)
www.xsys21.huExpert software systems for the 21th century
46Vég Csaba: Java-start!
public class Időtartam private int óra; public int getÓra() { return óra; } private int perc; public int getPerc() { return perc; } private int másodperc; public int getMásodperc() { return másodperc; } public Időtartam(int összes) { óra=összes/(60*60); perc=összes/60%60; másodperc=összes%60; }
Egészosztás és maradékszámítás
![Page 47: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/47.jpg)
www.xsys21.huExpert software systems for the 21th century
47Vég Csaba: Java-start!
Időtartam
...
public static void main(String[] args) {
Időtartam t=new Időtartam(3823);
System.out.println(t.getÓra()+" óra "+
t.getPerc()+" perc "+
t.getMásodperc()+" másodperc");
}
![Page 48: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/48.jpg)
www.xsys21.huExpert software systems for the 21th century
48Vég Csaba: Java-start!
Java elemi típusai
valós típusok
logikai
Java típusai
elemi típusok referencia típusok ...
szám-jellegű (numerikus) típusok
float double
egész-jellegű (integrális) típusok
byte char short int long
boolean
![Page 49: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/49.jpg)
www.xsys21.huExpert software systems for the 21th century
49Vég Csaba: Java-start!
Elemi típusoklogikai típus
boolean false vagy true 1
egész-jellegű típusok
byte -128..127 1
char 65536 féle 2
short -32768..32767 2
int -2147483648..2147483647 4
long -9223372036854775808..9223372036854775807 8
valós típusok
float kb. (1.410-45 .. 3.410+38) 4
double kb. (4.910-324 .. 3.810+308) 8
![Page 50: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/50.jpg)
www.xsys21.huExpert software systems for the 21th century
50Vég Csaba: Java-start!
Elemi típusok és a void
Gyakran használt típusok: egész érték: int, esetleg long
kis ábrázolási tartomány: short, esetleg byte byte: operációs rendszerrel kapcsolatos adatok
feldolgozása. Valós értékek: double, esetleg float
Gépfüggetlen típusok
void: nem típus; a segítségével jelezzük, hogy egy metódus nem ad vissza értéket.
![Page 51: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/51.jpg)
www.xsys21.huExpert software systems for the 21th century
51Vég Csaba: Java-start!
4.Grafikus felület
![Page 52: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/52.jpg)
www.xsys21.huExpert software systems for the 21th century
52Vég Csaba: Java-start!
Adatok grafikus felületen
Az appletek a html-lapon egy grafikus területet kapnak, így a programok a felhasználóval egy grafikus felhasználói felületen (GUI: Graphical User Interface) keresztül kommunikálhatnak.
Készítsünk appletet, amely az oldalhosszúságok alapján megadja a téglalap kerületét és területét!
![Page 53: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/53.jpg)
www.xsys21.huExpert software systems for the 21th century
53Vég Csaba: Java-start!
GUI
a= 12 b= 21 kerület: 66, terület: 252
téglalap.a
téglalap.kerület
téglalap.terület
téglalap.b
TéglalapApplet
-téglalapA: TextField -téglalapB: TextField -téglalapKerület: Label -téglalapTerület: Label +init()
Téglalap +a: double +b: double + (a': double, b': double) +/kerület: double {2*(a+b)} +/terület: double {a*b}
+téglalap
![Page 54: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/54.jpg)
www.xsys21.huExpert software systems for the 21th century
54Vég Csaba: Java-start!
GUI komponens
Az adatcsere általában nem a paint metódussal történik.
A Java elérhetővé tesz olyan előre elkészített felhasználói felület komponenseket, amelyek segítségével felépíthetjük a megtervezett felhasználói felületünket.Pl.: Label (címke): szöveg megjelenítésére TextField (szöveges mező): rövid szöveg bevitelére TextArea (szöveges terület): több soros szöveg bevitelére Button (gomb): parancs elindítása
![Page 55: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/55.jpg)
www.xsys21.huExpert software systems for the 21th century
55Vég Csaba: Java-start!
Kapcsolat
Hasonló a felület egy tulajdonságához, azonban a téglalap részben független a felülettől, míg egy tulajdonság önmagában nem létezhet. Nyílhegy: láthatóság
a TéglalapApplet tud a téglalap-ról, a Téglalap azonban nincs tudomással a felületről.
A TéglalapApplet felület téglalap néven éri el a megfelelő objektumot.
A kapcsolat írható (setTéglalap)
TéglalapApplet
Téglalap
+a: double +b: double + (a': double, b': double) +/kerület: double {2*(a+b)} +/terület: double {a*b}
+téglalap
![Page 56: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/56.jpg)
www.xsys21.huExpert software systems for the 21th century
56Vég Csaba: Java-start!
TéglalapApplet// width=400 height=30
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class TéglalapApplet
extends Applet implements ActionListener {
private Téglalap téglalap;
private TextField téglalapA = new TextField();
private TextField téglalapB = new TextField();
private Label téglalapKerület = new Label();
private Label téglalapTerület = new Label();
![Page 57: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/57.jpg)
www.xsys21.huExpert software systems for the 21th century
57Vég Csaba: Java-start!
TéglalapApplet
public void init() {
add(new Label("a="));
add(téglalapA); téglalapA.addActionListener(this);
add(new Label("b="));
add(téglalapB); téglalapB.addActionListener(this);
add(téglalapKerület);
add(téglalapTerület);
setTéglalap(new Téglalap(12,21));
}
![Page 58: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/58.jpg)
www.xsys21.huExpert software systems for the 21th century
58Vég Csaba: Java-start!
TéglalapAppletpublic void setTéglalap(Téglalap téglalap_) { téglalap=téglalap_; téglalapA.setText(""+téglalap.getA()); téglalapB.setText(""+téglalap.getB()); téglalapKerület.setText(" kerület: "+téglalap.getKerület()+","); téglalapTerület.setText(" terület: "+téglalap.getTerület()); validate(); } public void actionPerformed(ActionEvent e) { téglalap.setA( Double.parseDouble( téglalapA.getText() ) ); téglalap.setB( Double.parseDouble( téglalapB.getText() ) ); setTéglalap(téglalap); }
![Page 59: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/59.jpg)
www.xsys21.huExpert software systems for the 21th century
59Vég Csaba: Java-start!
Komponensek tulajdonságai
A komponensek alapértelmezett megjelenési formáját módosíthatjuk a tulajdonságaik megváltoztatásával. foreground: Color background: Color font: Font
![Page 60: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/60.jpg)
www.xsys21.huExpert software systems for the 21th century
60Vég Csaba: Java-start!
Komponensek tulajdonságai
Egyetlen komponens tulajdonságának módosítása: init metódusban:
téglalapKerület.setColor(Color.cyan);téglalapTerület.setColor(Color.cyan);
Az applet is egy komponens init metódusban:
setFont(new Font("serif",Font.ITALIC,14));
![Page 61: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/61.jpg)
www.xsys21.huExpert software systems for the 21th century
61Vég Csaba: Java-start!
public void init() { Font vastagDőlt =
new Font("serif",Font.BOLD+Font.ITALIC,16); Font dőlt = new Font("serif", Font.ITALIC,14); Label l1=new Label("a="); add(l1); l1.setFont(vastagDőlt); add(téglalapA); téglalapA.addActionListener(this); Label l2=new Label("b="); add(l2); l2.setFont(vastagDőlt); add(téglalapB); téglalapB.addActionListener(this); add(téglalapKerület); téglalapKerület.setFont(dőlt); add(téglalapTerület); téglalapTerület.setFont(dőlt); setTéglalap(new Téglalap(12,21)); }
![Page 62: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/62.jpg)
www.xsys21.huExpert software systems for the 21th century
62Vég Csaba: Java-start!
CsomagokKönyvtár-jellegű hierarchia
A csomagokon belüli alcsomagok, illetve elemek megadása: a . jelölés A java.awt.Label jelölés a java csomagon belüli awt alcsomag
Label osztályára hivatkozik. A könyvtárrendszerben ez egy java nevű könyvtár awt
alkönyvtárában elhelyezkedő Label.class állományt jelent.
Csomaghierarchia teteje: CLASSPATH
A Java készítőinek konvenciója szerint a csomagok elnevezését kisbetűvel kezdjük.
![Page 63: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/63.jpg)
www.xsys21.huExpert software systems for the 21th century
63Vég Csaba: Java-start!
Fontosabb csomagokjava.applet applet készítésejava.awt felhasználói felület készítése, rajzolásjava.awt.event grafikus felülettel kapcsolatos események java.awt.geom síkban történő rajzolás java.io állományok kezelésejava.lang Java nyelvhez szükséges alapvető osztályokjava.lang.reflect programszerkezet feltérképezésejava.math tetszőleges pontosságú aritmetikajava.net hálózati kommunikáció java.sql adatbázisok kezelése java.util segédosztályokjava.util.jar jar (JAR: Java Archive) állományok kezelésejava.util.zip zip és gzip formátumú tömörített állományok javax. alapvető kiterjesztések
![Page 64: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/64.jpg)
www.xsys21.huExpert software systems for the 21th century
64Vég Csaba: Java-start!
HivatkozásA pontjelöléssel bármely osztály forrásszövegében hivatkozhatunk a CLASSPATH-ból elérhető bármely csomag bármely, korábban már elkészített osztályára
import utasítás: egyetlen osztály elérése:
import java.applet.Applet;
Csomag összes osztálya: import java.awt.*;
Rövidítési lehetőség (egyértelműség)
java.lang: közvetlenül elérhető
![Page 65: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/65.jpg)
www.xsys21.huExpert software systems for the 21th century
65Vég Csaba: Java-start!
package utasítás
Nagyobb programokat célszerű csomagokba szervezni.
A forrásprogram első utasításaként a package utasítással megadhatjuk az osztály csomagját: pl.: package javaStart.példa;
Egy osztálynak soha nem kell importálnia a saját csomagját, így az abban elhelyezkedő többi osztályt közvetlenül is eléri.
A csomagnevek egyediségének biztosítása: Internet címekhez hasonló (fordított sorrendű) hierarchikus csomagnevek, pl. com.sun.java.swing, org.omg.CORBA, stb.
![Page 66: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/66.jpg)
www.xsys21.huExpert software systems for the 21th century
66Vég Csaba: Java-start!
Java forrásállomány alapszerkezete
Legelső utasításként egyetlen, az osztály csomagját meghatározó package utasítás lehet.
Ezután import utasításokat adhatunk meg.
A forrásállomány ezután egy vagy több osztály (vagy interfész, lásd később) definícióját tartalmazza, azonban csak egyetlen osztály lehet publikus, és a nevének meg kell egyeznie a forrásállomány nevével.
![Page 67: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/67.jpg)
www.xsys21.huExpert software systems for the 21th century
67Vég Csaba: Java-start!
5.Feltételes elágazások
![Page 68: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/68.jpg)
www.xsys21.huExpert software systems for the 21th century
68Vég Csaba: Java-start!
Logikai típusú kifejezés
Objektumra vonatkozó eldöntendő kérdés
Logikai típus:boolean lehetséges értékei: true (igaz) és false (hamis).
![Page 69: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/69.jpg)
www.xsys21.huExpert software systems for the 21th century
69Vég Csaba: Java-start!
Szerkeszthető?Három szakasz hossza alapján döntsük el, hogy szerkeszthető-e ilyen oldalakkal háromszög!
Háromszög
+szerkeszthető?
Háromszög-a: double-b: double-c: double+ (a': double, b': double, c': double)+/szerkeszthető? { a+b>c b+c>a c+a>b}
![Page 70: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/70.jpg)
www.xsys21.huExpert software systems for the 21th century
70Vég Csaba: Java-start!
public class Háromszög private double a; private double b; private double c; public Háromszög(double a_, double b_, double c_) { a=a_; b=b_; c=c_; } public boolean isSzerkeszthető() { return a+b>c && b+c>a && c+a>b; } public static void main(String[] args) { Háromszög háromszög=new Háromszög(1,2,3); System.out.println("Szerkeszthető: "+ háromszög.isSzerkeszthető()+"."); }
logikai „és”
![Page 71: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/71.jpg)
www.xsys21.huExpert software systems for the 21th century
71Vég Csaba: Java-start!
Relációs műveletekÖsszehasonlítás (szám-jellegű értékek között):
kifejezés > kifejezéskifejezés >= kifejezéskifejezés < kifejezéskifejezés <= kifejezés
Egyenlőségvizsgálat (logikai értékek között is):kifejezés == kifejezéskifejezés != kifejezés ( )
A relációs műveletek balról jobbra értékelődnek ki. Ekvivalencia és kizáró vagy (pl.: a<0 == b<0)
![Page 72: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/72.jpg)
www.xsys21.huExpert software systems for the 21th century
72Vég Csaba: Java-start!
Logikai műveletektagadás:
! kifejezés
logikai és:kifejezés && kifejezés
logikai vagykifejezés || kifejezés
A logikai műveletek balról jobbra értékelődnek ki. Az && és a || gyengébb az aritmetikai és a relációs műveleteknél
(pl.: 0<=a && a<=5) A jobboldalon álló kifejezés csak szükség esetén értékelődik ki.
![Page 73: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/73.jpg)
www.xsys21.huExpert software systems for the 21th century
73Vég Csaba: Java-start!
Feltételes kifejezés Egy feltételtől függően egy kifejezésben más érték jelenjen meg.
A feltételes kifejezés:feltétel ? kifejezés_true : kifejezés_false
public static void main(String[] args) { Háromszög háromszög=new Háromszög(1,2,3); System.out.println("A háromszög "+ (háromszög.isSzerkeszthető() ? "" : "nem")+ " szerkeszthető." ); }
![Page 74: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/74.jpg)
www.xsys21.huExpert software systems for the 21th century
74Vég Csaba: Java-start!
Szökőév? Egy évről döntsük el, hogy a Gergely-naptár szerint az szökőév-e!
Év
+szökőév?
Év+év: int+ (év': int)+/szökőév? {év%4= 0 (év%100=0) év%400=0}
![Page 75: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/75.jpg)
www.xsys21.huExpert software systems for the 21th century
75Vég Csaba: Java-start!
Feltételes utasítás
Egy kétismeretlenes, két egyenletből álló lineáris egyenletrendszerről döntsük el, hogy az ellentmondásos, határozatlan, vagy határozott, és ez utóbbi esetben adjuk meg a megoldást.
Az egyenletrendszert jelöljük a következő módon:
ax+by=c
dx+ey=f
Lineáris egyenletrendszer
+határozatlan? +ellentmondásos?
+határozott?
+x: double +y: double
![Page 76: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/76.jpg)
www.xsys21.huExpert software systems for the 21th century
76Vég Csaba: Java-start!
Lineáris egyenletrendszer-a,b,c: double-d,e,f: double+ (a': double, b': double, c': double, d': double, e': double, f ': double)-/det: double {a*e-b*d}-/detX: double {c*e-b*f}-/detY: double {a*f-c*d}+/határozott? { det0 }+/határozatlan? { határozott detX=0 }+/ellentmondásos? { határozott detX0 }+/x: double { detX/det }+/y: double { detY/det }
![Page 77: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/77.jpg)
www.xsys21.huExpert software systems for the 21th century
77Vég Csaba: Java-start!
LineárisEgyenletrendszer
public static void main(String[] args) {
LineárisEgyenletrendszer e=
new LineárisEgyenletrendszer(1,2,2, 2,1,-4);
if( e.isHatározott() )
System.out.println("x="+e.getX()+", y="+e.getY()+".");
else
System.out.println("Az egyenletrendszer "+
(e.isHatározatlan() ? "határozatlan" : "ellentmondásos")
+".");
}
![Page 78: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/78.jpg)
www.xsys21.huExpert software systems for the 21th century
78Vég Csaba: Java-start!
Utasítás és utasításblokk Utasításblokk: több utasítás csoportosítása kapcsoszárójelek között tetszőleges számú utasítás vagy
lokális változó deklarációs utasítása üres blokk
Lokális változó deklarációs utasítása: egy pontosvesszővel lezárt deklaráció (pl. int x,y;).
Végrehajtható utasítás, pl.: üres utasítás: ; kifejezés pontosvesszővel lezárva (pl. a=b+1;). összetett utasítások
![Page 79: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/79.jpg)
www.xsys21.huExpert software systems for the 21th century
79Vég Csaba: Java-start!
if és if-else utasítás
if utasítás (opcionális végrehajtás):if( feltétel ) utasítás
if-else utasítás (alternatíva):if( feltétel ) utasítás_true
else utasítás_false
![Page 80: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/80.jpg)
www.xsys21.huExpert software systems for the 21th century
80Vég Csaba: Java-start!
6.Többszörös elágazás
![Page 81: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/81.jpg)
www.xsys21.huExpert software systems for the 21th century
81Vég Csaba: Java-start!
Többszörös leágazásAz Év osztályt egészítsük ki úgy, hogy meg tudja mondani, hogy abban az évben mikor lesz húsvét! közelítő számítás: (1800 és 2099 között)
: ?(e=6 d=28 év%19>10)
49
?(e=6 d=29)
Húsvét: int
50 22+d+e
d (19*(év%19)+24)%30 e (2*(év%4)+4*(év%7)+6*d+5)%7
![Page 82: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/82.jpg)
www.xsys21.huExpert software systems for the 21th century
82Vég Csaba: Java-start!
Többszörös leágazás
if(a) A
else
if(b) B
else C
A
?(a) :
B C
?(b)
?(a) :
: ?(b)
A
B C
if(a) Aif(a) A
else if(b) Belse if(b) B
else Celse C
![Page 83: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/83.jpg)
www.xsys21.huExpert software systems for the 21th century
83Vég Csaba: Java-start!
Húsvét public int getHúsvét() { int d = (19*(év%19)+24)%30; int e = (2*(év%4)+4*(év%7)+6*d+5)%7; if( e==6 && d==28 && év%19>10 ) return 49; else if( e==6 && d==29) return 50 else return 22+d+e; }
![Page 84: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/84.jpg)
www.xsys21.huExpert software systems for the 21th century
84Vég Csaba: Java-start!
Egy másodfokú egyenletről állapítsuk meg, hogy létezik-e valós megoldása, ill. egybeesik-e a két valós megoldás, és ha létezik, akkor írjuk ki a megoldást! Másodfokú
-a,b,c: double+(a': double, b': double, c': double)
-/D: double {b2-4ac}+/valós megoldások száma: int+/nincs valós megoldás? {D<0}
+/x1: ^?nincs valós megoldás, double {a
Db
2
}
+/x2: ^?nincs valós megoldás, double {a
Db
2
}valós megoldások számavalós megoldások száma::
0, ha nincs v0, ha nincs v.. megoldás, megoldás,
1, ha a két v1, ha a két v.. megoldás egybeesik, megoldás egybeesik,
2, egyébként, ha a két valós megoldás különböző.2, egyébként, ha a két valós megoldás különböző.
![Page 85: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/85.jpg)
www.xsys21.huExpert software systems for the 21th century
85Vég Csaba: Java-start!
public class Másodfokú private double a,b,c; public Másodfokú(double a_, double b_, double c_) { a=a_; b=b_; c=c_; } private double getD() { return b*b-4*a*c; } public int getValósMegoldásokSzáma() { double d=getD(); return (d<0) ? 0 : ( d==0 ? 1 : 2 ); } public double getX1() { return (-b+Math.sqrt(getD()))/(2*a); } public double getX2() { return (-b-Math.sqrt(getD()))/(2*a); }
![Page 86: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/86.jpg)
www.xsys21.huExpert software systems for the 21th century
86Vég Csaba: Java-start!
public class Másodfokú...
public static void main(String[] args) {
Másodfokú m=new Másodfokú(-1,2,3);
if(m.getValósMegoldásokSzáma()==0)
System.out.println("nincs valós megoldás");
else if(m.getValósMegoldásokSzáma()==1)
System.out.println("x1,x2="+m.getX1());
else
System.out.println("x1="+m.getX1()+", x2="+m.getX2());
}
![Page 87: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/87.jpg)
www.xsys21.huExpert software systems for the 21th century
87Vég Csaba: Java-start!
Esetszétválasztásswitch( kifejezés ) { case konstansKifejezés1: utasítások1 break; case konstansKifejezés2: case konstansKifejezés3: utasítások23 break; default: utasítások_else
} gépközeli logika!
int típusúvá konvertálható
„érték-címkék”
blokk-végére lép
default-címke
![Page 88: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/88.jpg)
www.xsys21.huExpert software systems for the 21th century
88Vég Csaba: Java-start!
Másodfokú...
public static void main(String[] args) {
Másodfokú m=new Másodfokú(-2,4,-2);
switch( m.getValósMegoldásokSzáma() ) {
case 0: System.out.println("nincs valós megoldás"); break;
case 1: System.out.println("x1,x2="+m.getX1()); break;
default:
System.out.println("x1="+m.getX1()+", x2="+m.getX2());
}
}
kódok
![Page 89: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/89.jpg)
www.xsys21.huExpert software systems for the 21th century
89Vég Csaba: Java-start!
final változókfinal változó: legfeljebb egyszer adható neki érték (leggyakrabban a változó deklarációjában történik) osztály attribútuma lokális változó paraméter: a metódus blokkjában a paraméter értékét nem
változtatjuk meg.
A kódokat final attribútumokként elnevezhetjük. static kulcsszó: az értéket nem kell minden objektumban megismételni, mivel az osztályra (az osztály minden objektumára) érvényes értéket jelöl.Összefoglalva: nevesített konstans: static final kulcsszavakkal megadott változó
![Page 90: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/90.jpg)
www.xsys21.huExpert software systems for the 21th century
90Vég Csaba: Java-start!
Konstansok... public static final int NINCS_VALÓS_MEGOLDÁS = 0, EGYBEESŐ_VALÓS_MEGOLDÁSOK = 1, KÜLÖNBÖZŐ_VALÓS_MEGOLDÁSOK = 2; public int getValósMegoldásokSzáma() { double d=getD(); return (d<0) ?
NINCS_VALÓS_MEGOLDÁS : (d==0 ?
EGYBEESŐ_VALÓS_MEGOLDÁSOK :KÜLÖNBÖZŐ_VALÓS_MEGOLDÁSOK);
}
![Page 91: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/91.jpg)
www.xsys21.huExpert software systems for the 21th century
91Vég Csaba: Java-start!
...public static void main(String[] args) { Másodfokú m=new Másodfokú(1,2,3); switch( m.getValósMegoldásokSzáma() ) { case Másodfokú.NINCS_VALÓS_MEGOLDÁS: System.out.println("nincs valós megoldás"); break; case Másodfokú. EGYBEESŐ_VALÓS_MEGOLDÁSOK: System.out.println("x1,x2="+m.getX1()); break; default: System.out.println("x1="+m.getX1()+", x2="+m.getX2()); } }
![Page 92: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/92.jpg)
www.xsys21.huExpert software systems for the 21th century
92Vég Csaba: Java-start!
LiterálokLogikai (boolean): true és false.Egész literál alapértelmezésben int típusú long: számjegyek után írt l vagy L karakterrel jelölünk.
A literál értékét három számrendszerben is megadhatjuk: decimális: a 0 vagy egy nem nulla számjeggyel kezdődő
természetes szám, pl. 1234567890. oktális: 0 után a számjegyek, pl. 01234567. hexadecimális: 0x után, pl.: 0xa7f.
Valós: egészrész, tizedespont, törtrész, exponens és típusjelölő alapértelmezésként double (d vagy D típusjelölő), pl. 2D. float: f vagy F típusjelző.
![Page 93: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/93.jpg)
www.xsys21.huExpert software systems for the 21th century
93Vég Csaba: Java-start!
LiterálokKarakteres (char típusú): aposztrófok között egyetlen Unicode karakter
vagy escape-szekvencia, pl. 'a'. Szöveges (String típusú) literál: karakterek vagy escape-szekvenciák
idézőjelek közötti sorozata, pl. "abcd". \\ fordított per \b visszafelé törlés (backspace). \t (vízszintes) tabulátorjel \n új sor jele. \r sorvége jele. \f lapdobás (form feed) \" idézőjel \' aposztróf \számjegyek oktálisan (!), a karakter kódja, pl. \0
Unicode kódok a szövegben: \uddddnull: referencia-típusok esetén használható
![Page 94: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/94.jpg)
www.xsys21.huExpert software systems for the 21th century
94Vég Csaba: Java-start!
7.Ciklusok
![Page 95: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/95.jpg)
www.xsys21.huExpert software systems for the 21th century
95Vég Csaba: Java-start!
Elöltesztelő ciklusEgy pozitív egész számlálójú és nevezőjű törtet egyszerűsítsünk! Tört
-a, b: int+ (a': int, b': int)-egyszerűsítés ()-/lnko:int
: ?
(x,y)(y,x%y) b
/lnko: int
y
(x,y)(a,b)
x%y0
![Page 96: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/96.jpg)
www.xsys21.huExpert software systems for the 21th century
96Vég Csaba: Java-start!
public class Tört private int a,b; public int getA() { return a; } public int getB() { return b; } public Tört(int a_, int b_) { a=a_; b=b_; egyszerűsítés(); } private void egyszerűsítés() { int lnko=getLnko();
a=a/lnko; b=b/lnko; } private int getLnko() { int x=a,y=b; while( x%y!=0 ) { int x_=x; x=y; y=x_%y; } return y; } public static void main(String[] args) { Tört q=new Tört(12,18); System.out.println(q.getA()+"/"+q.getB()); }
: ?
(x,y)(y,x%y) b
/lnko: int
y
(x,y)(a,b)
x%y0
![Page 97: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/97.jpg)
www.xsys21.huExpert software systems for the 21th century
97Vég Csaba: Java-start!
Hátultesztelő ciklus
public int getLnko() { int x=a,y=b;
do { int m=x%y; x=y; y=m;
} while( y!=0 );
return x;
}
: y0
?
(x,y)(y,x%y) b
x
(x,y)(a,b)
/lnko: int
![Page 98: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/98.jpg)
www.xsys21.huExpert software systems for the 21th century
98Vég Csaba: Java-start!
Prímtényezők
Egy 1-nél nagyobb egész számnak írjuk ki a prímtényezős felbontását, pl. a 12 szám esetén jelenjen meg a 2 2 3 szöveg! Az egymás után megtalált
prímtényezőket szóközökkel elválasztva egyetlen szöveggé fűzzük össze.
Prímtényezők-n: int+ (n': int)+/prímtényezők: String
![Page 99: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/99.jpg)
www.xsys21.huExpert software systems for the 21th century
99Vég Csaba: Java-start!
Prímtényezőkn' prímtényezői szövegként:
s legyen üres szöveg; i = 2
amíg az n' nagyobb, mint 1
ha i osztja n'-t,
s-hez fűzzük a " "+i szöveget,
n'-t osszuk el i-vel
egyébként vegyük a következő i-t
az eredmény s
? : n'%i=0
s n'n'/i ii+1
ss+" "+i
? n'>1
s""; i2
:
/prímtényezők: String
![Page 100: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/100.jpg)
www.xsys21.huExpert software systems for the 21th century
100Vég Csaba: Java-start!
Értékadó operátorok public String getPrímtényezők() { int n_=n; String prímtényezők=""; int i=2; while( n_>1 ) if( n_%i==0 ) {
prímtényezők=prímtényezők+" "+i; n_=n_/i;
} else i=i+1; return prímtényezők; }
a=a#(b) kifejezés az a#=b módon rövidíthető, ha létezik a #= operátor
pprímtényezőkrímtényezők+=" "+i+=" "+i
n_/=in_/=i
i+=1i+=1
![Page 101: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/101.jpg)
www.xsys21.huExpert software systems for the 21th century
101Vég Csaba: Java-start!
Növelő/csökkentő operátorok
public String getPrímtényezők() {
int n_=n; String prímtényezők=""; int i=2;
while( n_>1 )
if( n_%i==0 ) {
prímtényezők+=" "+i;
n_/=i;
} else i=i+1;
return prímtényezők;
}
++i++i
![Page 102: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/102.jpg)
www.xsys21.huExpert software systems for the 21th century
102Vég Csaba: Java-start!
A ++i és az i++ megnöveli az i értékét 1-gyel, a --i és az i-- pedig csökkenti 1-gyel.
Prefix: a műveletben a továbbiakban a módosított értéket használja fel.
Postfix: művelet is módosítja a változó értékét, azonban a kifejezésben az eredeti értéket használja fel.
Ha az i értéke 2, j=++i esetén j értéke 3 lesz, j=i++ esetén azonban 2, mindkét esetben az i értéke a kifejezés után 3.
![Page 103: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/103.jpg)
www.xsys21.huExpert software systems for the 21th century
103Vég Csaba: Java-start!
8.For, break és continue
![Page 104: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/104.jpg)
www.xsys21.huExpert software systems for the 21th century
104Vég Csaba: Java-start!
Prímtényezős felbontás
Egy 1-nél nagyobb egész számnak a prímtényezős felbontását írjuk ki hatványalakban, pl. a 24 szám esetén jelenjen meg a 2^3 3 szöveg! megszámoljuk, hogy a belső ciklus hányszor hajtódik végre.
![Page 105: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/105.jpg)
www.xsys21.huExpert software systems for the 21th century
105Vég Csaba: Java-start!
? :
s
n'/=i
?
n'=n; s""; i2
:
/prímtényezők: String
++i
j0
n'>1
n'%i=0
?(j=1)
?(j=0) ?(j>1)
s+=" "+i s+=" "+i+"^"+j
++j
kezdő beállítás
ismétlés feltétele
léptetés
![Page 106: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/106.jpg)
www.xsys21.huExpert software systems for the 21th century
106Vég Csaba: Java-start!
for utasításfor( kifLista_kezdőBeállítás; feltétel; kifLista_léptetés ) utasítás
kifLista_kezdőBeállítás; while( feltétel ) { utasítás kifLista_léptetés; }
for( lokálisVáltozó_dekl; feltétel; kifLista_léptetés ) utasítás
végtelenciklus:for( ; ; )
![Page 107: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/107.jpg)
www.xsys21.huExpert software systems for the 21th century
107Vég Csaba: Java-start!
for - inicializálással public String getPrímtényezők() { int n_=n; String prímtényezők=""; int i,j; for( i=2; n_>1; ++i ) { for( j=0; n_%i==0; ++j ) n_/=i; switch(j) { case 0: break; case 1: prímtényezők+=" "+i; break; default: prímtényezők+=" "+i+"^"+j; } } return prímtényezők; }
![Page 108: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/108.jpg)
www.xsys21.huExpert software systems for the 21th century
108Vég Csaba: Java-start!
for - deklarációval public String getPrímtényezők() { int n_=n; String prímtényezők=""; for(int i=2; n_>1; ++i ) { int j; for(j=0; n_%i==0; ++j ) n_/=i; switch(j) { case 0: break; case 1: prímtényezők+=" "+i; break; default: prímtényezők+=" "+i+"^"+j; } } return prímtényezők; }
![Page 109: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/109.jpg)
www.xsys21.huExpert software systems for the 21th century
109Vég Csaba: Java-start!
Megadott lépésszámú ciklus
1-től 10-ig terjedő egész számoknak írjuk ki a négyzetét és a köbét!
public class NégyzetÉsKöbTáblázat {public class NégyzetÉsKöbTáblázat {
public static void main(String[] args) {public static void main(String[] args) {
System.out.println( "x: \tx^2, \tx^3");System.out.println( "x: \tx^2, \tx^3");
for(int i=1; i<=10; ++i) for(int i=1; i<=10; ++i)
System.out.println( i+": \t"+(i*i)+", \t"+(i*i*i) );System.out.println( i+": \t"+(i*i)+", \t"+(i*i*i) );
} }
}}
![Page 110: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/110.jpg)
www.xsys21.huExpert software systems for the 21th century
110Vég Csaba: Java-start!
Valós értékek
Készítsünk táblázatot a -2 és 2 radián közötti szögértékek szinuszával és koszinuszával fél radiánonként.
public class SinCosTáblázat {public class SinCosTáblázat {
public static void main(String[] args) {public static void main(String[] args) {
for(double rad=-2*Math.PI; rad<=2*Math.PI;for(double rad=-2*Math.PI; rad<=2*Math.PI; rad+=0.5) rad+=0.5)
System.out.println(rad+": \t"+Math.sin(rad)+System.out.println(rad+": \t"+Math.sin(rad)+", \t"+Math.cos(rad));", \t"+Math.cos(rad));
} }
}}
![Page 111: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/111.jpg)
www.xsys21.huExpert software systems for the 21th century
111Vég Csaba: Java-start!
Prímtényezők public String getPrímtényezők() { int n_=n; String prímtényezők=""; for(int i=2; n_>1; ++i ) { int j; for(j=0; n_%i==0; ++j ) n_/=i; switch(j) { case 0: break; case 1: prímtényezők+=" "+i; break; default: prímtényezők+=" "+i+"^"+j; } } return prímtényezők; }
i+= 1, majd 2i+= 1, majd 2
![Page 112: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/112.jpg)
www.xsys21.huExpert software systems for the 21th century
112Vég Csaba: Java-start!
Jelző public String getPrímtényezők() { int n_=n; String prímtényezők=""; int f=1; for(int i=2; n_>1; i+=f, f=2 ) { int j; for(j=0; n_%i==0; ++j ) n_/=i; switch(j) { case 0: break; case 1: prímtényezők+=" "+i; break; default: prímtényezők+=" "+i+"^"+j; } } return prímtényezők; }
![Page 113: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/113.jpg)
www.xsys21.huExpert software systems for the 21th century
113Vég Csaba: Java-start!
UtasításcímkeUtasításcímke:
címke: utasítás
címke: azonosító, mely nem kulcsszó és csak akkor egyezhet meg egy másik utasítás címkéjével, ha egyik utasítás sem tartalmazza a másikat.
goto: nincs goto utasítás a goto kulcsszó
(nem deklarálhatunk ilyen nevű változót vagy metódust)
![Page 114: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/114.jpg)
www.xsys21.huExpert software systems for the 21th century
114Vég Csaba: Java-start!
break és continue utasításbreak: break;
legbelső switch, while, do vagy for utasításból lép ki; a végrehajtás az adott utasítás után folytatódik.
break címke; a program végrehajtása az adott címkéjű tetszőleges összetett
utasítás után folytatódik. (Pl.: egy ciklusból egy switch utasításon belül kiléphetünk)
continue: kizárólag egy while, do vagy for utasításon belül continue;
a ciklusmag végére lép (for: léptetés!) continue címke;
az adott címkéjű ciklusutasítás következő iterációja
![Page 115: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/115.jpg)
www.xsys21.huExpert software systems for the 21th century
115Vég Csaba: Java-start!
Konverzió adott típusú érték más típusú értékké való átalakítása.
Bővítő (widening) konverzió: a kiindulási értéket egy bővebb tartományú típusba alakítjuk, pl.: egész értéket valós típusúvá. Ekkor az érték nem sérülhet meg.
Szűkítő (narrowing) konverzió: az eredménytípus kisebb tartományú, így a tartományon kívüli értékek megsérülnek.
Identikus konverzió is, ha egy értéket a vele azonos típusúvá alakítunk (elvi jelentőségű).
Konkatenáció műveletben tetszőleges típusú érték szöveges, azaz String típusúvá alakítódik
![Page 116: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/116.jpg)
www.xsys21.huExpert software systems for the 21th century
116Vég Csaba: Java-start!
Elemi típusok alapkonverziói
Alapkonverzióval elemi típusok esetén csak a szám-jellegű értékek konvertálhatók;Sorrend:
byte char/short int long float double
A short típusból char típusba és vissza történő konverzió egyaránt szűkítő!
A char típusú érték a konverzió során számként a Unicode kódrendszer szerinti kódjával jelenik meg.
![Page 117: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/117.jpg)
www.xsys21.huExpert software systems for the 21th century
117Vég Csaba: Java-start!
Automatikus identikus és bővítő konverzió
A Java a következő három esetben megengedi és automatikusan végre is hajtja az identikus és a bővítő konverziót: Értékadás esetén, a változó típusává történő konverziókor, Metódushívás paramétereként az értéknek a paraméter
típusává történő konverziókor, Aritmetikai műveletekben
pl. 3+4.5 a művelet így azonos típusú értékek között hajtódik végre.
![Page 118: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/118.jpg)
www.xsys21.huExpert software systems for the 21th century
118Vég Csaba: Java-start!
Konverziós operátor
Típuskonverziós (type cast) operátor:érték típusának módosításanem csak bővítő és identikus, hanem szűkítő
konverziót is előírhatunk.
(típus) érték
Pl.: (byte)'x' magas precedenciájú: pl. ((float)(2+3)).
![Page 119: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/119.jpg)
www.xsys21.huExpert software systems for the 21th century
119Vég Csaba: Java-start!
KonkatenációAutomatikus szöveges konverzió konkatenáció (+ művelet) esetén. A nem szöveges érték elhelyezkedhet az operátor bal- vagy a jobboldalán is (pl. ""+a).
Szöveggé történő automatikus konverzió értéke: logikai érték esetén a true vagy false szöveg, egész vagy valós számtípus esetén a számérték szövegként, karakteres típus esetén a karakter. Objektum esetén:
+toString(): String metódus eredménye
Mi a különbség: ""+a (String)a
![Page 120: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/120.jpg)
www.xsys21.huExpert software systems for the 21th century
120Vég Csaba: Java-start!
9.Metódusok
![Page 121: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/121.jpg)
www.xsys21.huExpert software systems for the 21th century
121Vég Csaba: Java-start!
AlprogramokAlprogram: függvény eljárás (void)
érték szerinti paraméterátadás
Hívásból történő visszatérés: Eljárás esetén: automatikusan a metódus blokkjának
utolsó utasítását követően. return utasítás: visszatérés kiváltása Eljárás esetén
return; Függvény esetén
return kifejezés;
![Page 122: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/122.jpg)
www.xsys21.huExpert software systems for the 21th century
122Vég Csaba: Java-start!
Statikus (osztály-) attribútumEgy osztály két objektumának az attribútumai különböző értékűek lehetnek. Ezek az attribútumok így az objektumhoz (a példányhoz) kötődnek.static kulcsszó: statikus, az osztályra vonatkozó jellegzetességek megadásaOsztályattribútum: osztályra vonatkozó érték, az osztály minden objektuma számára
közös és elérhető. lehet publikus minősített névvel (pont-jelölés) az osztály vagy egy objektuma
alapján is elérhető. Általában: összetett konstansok
pl. Math.PI vagy Color.black. java.lang.System osztály osztályattribútuma az out
![Page 123: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/123.jpg)
www.xsys21.huExpert software systems for the 21th century
123Vég Csaba: Java-start!
Statikus metódus
Osztálymetódus: osztályra vonatkozó alprogram az osztály minden objektuma számára elérhető, osztálymetódus közvetlenül nem ér el példányváltozókat és
példányműveleteket (csak közvetve, pl. ha készít egy új objektumot vagy azt paraméterként veszi át)
Legtöbbször a példányoktól független számítási és megoldási módszereket, „trükköket” adunk meg. Pl. a Math osztály sin, cos, stb. metódusai.
main osztálymetódus: a programot indító metódus
![Page 124: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/124.jpg)
www.xsys21.huExpert software systems for the 21th century
124Vég Csaba: Java-start!
Egyszerűsítés
Egy a/b alakú racionális számot lehetőség szerint egyszerűsítsünk, és írjuk ki vegyestört formában (pl. 14/4 esetén: 3 1/2, ill. 14/7 esetén: 2)!
Tört-a: int-b: int+$lnko(a:int, b:int): int-egyszerűsítés ()+ (a':int, b':int)+vegyestört(): String
statikusstatikus
![Page 125: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/125.jpg)
www.xsys21.huExpert software systems for the 21th century
125Vég Csaba: Java-start!
public class Tört private int a,b; public Tört(int a_, int b_) { a=a_; b=b_; egyszerűsítés(); } public static int lnko(int a, int b) { do { int m=a%b; a=b; b=m; } while( b!=0 ); return a; } private void egyszerűsítés() { if(b<0) { a=-a; b=-b; } if(a==0) b=1; else { int o=lnko(Math.abs(a),b); a/=o; b/=o; } } public String vegyestört(){ return (b==1) ? ""+a : (a/b)+" "+(a%b)+"/"+b; } public static void main(String[] args) { System.out.println("Tört: "+ new Tört(18,12).vegyestört()); }
![Page 126: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/126.jpg)
www.xsys21.huExpert software systems for the 21th century
126Vég Csaba: Java-start!
A Tört osztályt egészítsük ki a négy alapművelettel (add: összeadás, sub: kivonás, mul: szorzás, div: osztás).
Tört -a: int -b: int +$lnko(a:int, b:int): int -egyszerűsítés() + (a':int, b':int) +vegyestört(): String +add(t:Tört):Tört +sub(t:Tört):Tört +mul(t:Tört): Tört +div(t:Tört): Tört
public Tört add(Tört t) { public Tört add(Tört t) {
return new Tört(a*t.b+t.a*b,b*t.b); } return new Tört(a*t.b+t.a*b,b*t.b); }
public Tört sub(Tört t) { public Tört sub(Tört t) {
return new Tört(a*t.b-t.a*b,b*t.b); } return new Tört(a*t.b-t.a*b,b*t.b); }
public Tört mul(Tört t) { public Tört mul(Tört t) {
return new Tört(a*t.a,b*t.b); } return new Tört(a*t.a,b*t.b); }
public Tört div(Tört t) { public Tört div(Tört t) {
return new Tört(b*t.b,a*t.a); } return new Tört(b*t.b,a*t.a); }
![Page 127: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/127.jpg)
www.xsys21.huExpert software systems for the 21th century
127Vég Csaba: Java-start!
Túlterhelés (overloading)
A Tört osztály alapműveleteit egészekre is készítsük el (pl. mul(i:int): Tört).Metódusnevek túlterhelése: a metódusokat nem csak a nevük azonosítja,
hanem az átvett paraméterek száma és típusa isEzek együttesen:
a metódus specifikációja vagy szignatúrája.Több, azonos nevű metódus is létezhet, amelyek
különböző számú vagy típusú paramétereket kapnak.
![Page 128: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/128.jpg)
www.xsys21.huExpert software systems for the 21th century
128Vég Csaba: Java-start!
Túlterhelés
public Tört add(Tört t) { return new Tört(a*t.b+t.a*b,b*t.b); }
public Tört add(int i) { return new Tört(a+i*b,b); }
Tört -a: int -b: int +$lnko(a:int, b:int): int -egyszerűsítés() + (a':int, b':int) +vegyestört(): String +add(i: int):Tört +add(t:Tört):Tört +sub(i: int):Tört +sub(t:Tört):Tört +mul(i:int): Tört +mul(t:Tört): Tört +div(i:int): Tört +div(t:Tört): Tört
![Page 129: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/129.jpg)
www.xsys21.huExpert software systems for the 21th century
129Vég Csaba: Java-start!
Túlterhelés
public Tört add(Tört t) { return new Tört(a*t.b+t.a*b,b*t.b); }
public Tört add(int i) { return new Tört(a+i*b,b); } public Tört sub(Tört t) {
return new Tört(a*t.b-t.a*b,b*t.b); } public Tört sub(int i) { return new Tört(a-i*b,b); } public Tört mul(Tört t) { return new Tört(a*t.a,b*t.b); } public Tört mul(int i) { return new Tört(a*i,b); } public Tört div(Tört t) { return new Tört(b*t.b,a*t.a); } public Tört div(int i) { return new Tört(a,b*i); }
![Page 130: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/130.jpg)
www.xsys21.huExpert software systems for the 21th century
130Vég Csaba: Java-start!
Konstruktor túlterhelése
public class Tört {
private int a,b;
public Tört(int a_, int b_) {
a=a_; b=b_; egyszerűsítés(); }
public Tört(int a_) { a=a_; b=1; }
public Tört() { a=0; b=1; }
public Tört(Tört t) { a=t.a; b=t.b; }
...
}
Tört -a: int -b: int + (a':int, b':int) + (a':int) + () + (t: Tört) …
![Page 131: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/131.jpg)
www.xsys21.huExpert software systems for the 21th century
131Vég Csaba: Java-start!
this(...)
public class Tört { private int a,b; public Tört(int a_, int b_) { a=a_; b=b_; egyszerűsítés(); } public Tört(int a_) { this(a_,1); } public Tört() { this(0,1); } public Tört(Tört q) { this(q.a,q.b); } ...}
Tört -a: int -b: int + (a':int, b':int) + (a':int) + () + (t: Tört) …
![Page 132: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/132.jpg)
www.xsys21.huExpert software systems for the 21th century
132Vég Csaba: Java-start!
Alapértelmezett és másoló konstruktor
Két speciális:Alapértelmezett konstruktor:
nincsenek paraméterei, így az objektumot egy alapértelmezett módon állítja be.
Ha egyáltalán nem adunk meg konstruktort, akkor a Java automatikusan felvesz egy alapértelmezett konstruktort, melynek a láthatósága megegyezik az osztály láthatóságával.
Másoló konstruktor: a létrehozandó osztállyal azonos típusú objektum alapján készít egy új objektumot.
![Page 133: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/133.jpg)
www.xsys21.huExpert software systems for the 21th century
133Vég Csaba: Java-start!
Alapértelmezett paraméterértékek
Tört -a: int -b: int + (a': int =0, b': int =1) + (t: Tört) …
Tört -a: int -b: int + (a':int, b':int) + (a':int) + () + (t: Tört) …
![Page 134: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/134.jpg)
www.xsys21.huExpert software systems for the 21th century
134Vég Csaba: Java-start!
Lekérdezés és módosítóMódosítás: az objektum kívülről látható, megfigyelhető állapotának változása. Nem tekintjük módosításnak, ha csak a művelet
megvalósításának technikája miatt változtatunk az objektumon, de logikailag az ugyanolyan marad.
Lekérdezés: nem változtat a megfigyelhető állapoton. több lekérdezés tetszőleges sorrendben végrehajtható.
Módosító: megváltozhat a megfigyelhető állapot. több, egymás után végrehajtott módosító metódus
felcserélése más eredményre vezethet.
![Page 135: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/135.jpg)
www.xsys21.huExpert software systems for the 21th century
135Vég Csaba: Java-start!
public class Tört public Tört add(Tört t) { return new Tört(a*t.b+t.a*b,b*t.b); } public Tört Add(Tört t) { a=a*t.b+t.a*b; b*=t.b;
egyszerűsítés(); return this; } public Tört add(int i) { return new Tört(a+i*b,b); } public Tört Add(int i) { a+=i*b; egyszerűsítés(); return this; }
Tört -a: int -b: int +$lnko(a:int, b:int): int -egyszerűsítés() + (a': int =0, b': int =1) + (t: Tört) +/vegyestört(): String +/add(i: int):Tört +/add(t:Tört):Tört +Add(i: int):Tört +Add(t:Tört):Tört …
p=q.add(r.Add(new Tört(1,2)));p=q.add(r.Add(new Tört(1,2)));
![Page 136: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/136.jpg)
www.xsys21.huExpert software systems for the 21th century
136Vég Csaba: Java-start!
Vizsgáljuk meg, hogy egy y=ax+b formában megadott egyenesre illeszkedik-e egy (x,y) pont!
Egyenes-a: double-b: double+ (a': double, b': double)+/illeszkedik(p: Pont)?
Pont+x: double+y: double+ (x': double, y': double)
![Page 137: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/137.jpg)
www.xsys21.huExpert software systems for the 21th century
137Vég Csaba: Java-start!
public class Pont
public class Pont {
private double x;
public double getX() { return x; }
private double y;
public double getY() { return y; }
public Pont(double x_, double y_) { x=x_; y=y_; }
public String toString() { return "("+x+","+y+") pont"; }
}
Egyenes-a: double-b: double+ (a': double, b': double)+/illeszkedik(p: Pont)?
Pont+x: double+y: double+ (x': double, y': double)
![Page 138: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/138.jpg)
www.xsys21.huExpert software systems for the 21th century
138Vég Csaba: Java-start!
public class Egyenespublic class Egyenes { private double a, b; public Egyenes(double a_, double b_) { a=a_; b=b_; } public String toString() { return "y=" + a + "x" + (b>=0 ? "+" : "") + b + " egyenes"; } public boolean illeszkedik(Pont p) {
return p.getY() == a*p.getX()+b; } public static void main(String[] args) { Pont p = new Pont(2,3); Egyenes e = new Egyenes(1,1); System.out.println("A "+p+" az "+e+"re "+ ( e.illeszkedik(p) ? "" : "nem " )+"illeszkedik."); }}
![Page 139: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/139.jpg)
www.xsys21.huExpert software systems for the 21th century
139Vég Csaba: Java-start!
10.Öröklés
![Page 140: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/140.jpg)
www.xsys21.huExpert software systems for the 21th century
140Vég Csaba: Java-start!
Határozzuk meg egy R->R y=f(x) függvény határozott integráljának közelítését a trapéz-formula segítségével (n osztópont esetén)!Függvény:
x értékhez megadja a megfelelő y=f(x) értéket.
-f
HatározottIntegrál -a: double -b: double -n: int + (f': Függvény, a':double, b':double, n': int) +/integrál: double
Függvény +/y(x: double): double
![Page 141: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/141.jpg)
www.xsys21.huExpert software systems for the 21th century
141Vég Csaba: Java-start!
Először: konkrét fv.
public class LineárisFüggvény { private double a, b; public LineárisFüggvény(double a_, double b_) { a=a_;
b=b_; } public double y(double x) { return a*x+b; } public String toString() { return
"LineárisFüggvény("+a+"x+"+b+")"; }}
LineárisFüggvény +/y(x: double): double
Integrál -a: double -b: double -n: int + (f: LineárisFüggvény, a':double, b':double, n': int) +/integrál: double
![Page 142: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/142.jpg)
www.xsys21.huExpert software systems for the 21th century
142Vég Csaba: Java-start!
public class HatározottIntegrál
private LineárisFüggvény f;
private double a,b; private int n; private double integrál; public double getIntegrál() { return integrál; } public HatározottIntegrál(LineárisFüggvény f_, double a_, double b_, int n_) { f=f_; a=a_; b=b_; n=n_; double h=(b-a)/n, s=(f.y(a)+f.y(b))/2, x=a; for(int i=1; i<=n-1; i++) { x+=h; s+=f.y(x); } integrál = s*h; } public String toString() { return
"HatározottIntegrál( ["+a+";"+b+"] "+n+" osztópont, "+ "függvény: "+f+")"; }
![Page 143: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/143.jpg)
www.xsys21.huExpert software systems for the 21th century
143Vég Csaba: Java-start!
Általánosítás/pontosítás
OO nyelvek: új típusok (osztályok) készítésekor az adatokhoz hozzákapcsolhatjuk az azokat kezelő alprogramokat (a metódusokat).
Osztályt általánosan definiálunk, majd további speciális (pontosított) változatokat készítünk.
Az osztály pontosítása, specializálása: felvehetünk újabb attribútumokat, illetve tulajdonságokat, felvehetünk újabb műveleteket, a már definiált műveleteket átdefiniálhatjuk.
![Page 144: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/144.jpg)
www.xsys21.huExpert software systems for the 21th century
144Vég Csaba: Java-start!
Öröklés
A pontosított alosztály átveszi, örökli az alaposztály, az ős jellegzetességeit (azokat nem kell újra leírnunk). A műveletek átdefiniálásával az alaposztály viselkedési
módját, működését a specializált osztályokban módosíthatjuk.
Öröklés technikája lehetővé teszi a helyettesíthetőséget: egy alosztály objektuma bárhol felhasználható, ahol az ősosztály objektumára hivatkozunk. Egy változatra bizonyos helyeken általános módon is
hivatkozhatnunk.
![Page 145: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/145.jpg)
www.xsys21.huExpert software systems for the 21th century
145Vég Csaba: Java-start!
Pontosítás
public class LineárisFüggvény extends Függvény { … }
Függvény +/y(x: double): double
Integrál -a: double -b: double -n: int + (f: Függvény, a':double, b':double, n': int) +/integrál: double
LineárisFüggvény :Függvény -a,b: double + (a': double, b':double) +/y(x: double): double
![Page 146: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/146.jpg)
www.xsys21.huExpert software systems for the 21th century
146Vég Csaba: Java-start!
public class Függvény { public double y(double x) { return 0; } public String toString() { return "KonstansFüggvény( 0 )"; }}
public class LineárisFüggvény extends Függvény {
private double a, b; public LineárisFüggvény(double a_, double b_) {
a=a_; b=b_; } public double y(double x) { return a*x+b; } public String toString() { return
"LineárisFüggvény("+a+"x+"+b+")"; }}
Függvény +/y(x: double): double
LineárisFüggvény :Függvény -a,b: double + (a': double, b':double) +/y(x: double): double
![Page 147: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/147.jpg)
www.xsys21.huExpert software systems for the 21th century
147Vég Csaba: Java-start!
Őstípus felhasználása... public HatározottIntegrál(Függvény f_, double a_,
double b_, int n_) { a=a_; b=b_; n=n_; f=f_; double h=(b-a)/n, s=(f.y(a)+f.y(b))/2,
x=a; for(int i=1; i<=n-1; i++) { x+=h; s+=f.y(x); } integrál = s*h; } ...public class SinusFüggvény extends Függvény { public double y(double x) { return Math.sin(x); } public String toString() { return "SinusFüggvény()"; }}
![Page 148: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/148.jpg)
www.xsys21.huExpert software systems for the 21th century
148Vég Csaba: Java-start!
Konverzió
Egy objektumnak az ősosztály típusává való átalakítása bővítő konverziónak számít (!), bizonyos helyeken automatikusan végrehajtódik. Pl. a HatározottIntegrál osztály konstruktorában Függvény
típusként bármely alosztály objektumát is átvehetjük.
A konverzió ellenére az alosztálynak megfelelő metódusok hajtódnak végre, azaz minden objektum „tudja”, hogy a metódust milyen utasítássorozattal kell végrehajtania.
![Page 149: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/149.jpg)
www.xsys21.huExpert software systems for the 21th century
149Vég Csaba: Java-start!
Polimorfizmus
Adott osztályúként tekintett objektum azonos szignatúrájú metódusához más utasítássorozat is tartozhat.
Polimorfizmus (többalakúság): egy általánosként tekintett objektum (például egy Személy) több változatban, alakban is megjelenhet. A változatok az általánosként tekintett objektum eltérő működésével figyelhetők meg.
![Page 150: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/150.jpg)
www.xsys21.huExpert software systems for the 21th century
150Vég Csaba: Java-start!
Absztrakt osztály/metódusLogikai hiba: általános függvény nem létezikabsztrakt osztály: általános keretet határoz meg, de konkrét esetben
objektumként csak valamely speciális alváltozat jelenhet meg. absztrakt osztályú objektumot közvetlenül nem készíthetünk,
csak közvetve, valamely (már nem absztrakt) alosztályán keresztül.
ellentéte a konkrét osztály amely példányosítható.
absztrakt metódus: a metódusnak csak az alosztályokban való létezését jelentjük
ki, de ahhoz nem rendelünk alapértelmezett műveletsorozatot
![Page 151: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/151.jpg)
www.xsys21.huExpert software systems for the 21th century
151Vég Csaba: Java-start!
Absztrakt osztály/metódus
public abstract class Függvény {
public abstract double y(double x);
}
Integrál -a: double -b: double -n: int + (f: Függvény, a':double, b':double, n': int) +/integrál: double
Függvény +/y(x: double): double
KonstansFüggvény -a: double + (a': double) +/y(x: double): double
LineárisFüggvény -a,b: double + (a': double, b':double) +/y(x: double): double
![Page 152: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/152.jpg)
www.xsys21.huExpert software systems for the 21th century
152Vég Csaba: Java-start!
OO – kompozíciós lehetőségpublic class FüggvényÖsszeg extends Függvény {
private Függvény f,g;
public FüggvényÖsszeg(Függvény f_,Függvény g_) { f=f_; g=g_; }
public double y(double x) { return f.y(x)+g.y(x); }
public String toString() { return "ÖsszegFüggvény("+f+" + "+g+")"; }
}
public class ÖsszetettFüggvény extends Függvény {
private Függvény f,g;
public ÖsszetettFüggvény(Függvény f_,Függvény g_) { f=f_;g=g_; }
public double y(double x) { return f.y(g.y(x)); }
public String toString() { return "ÖsszetettFüggvény("+f+" o "+g+")"; }
}
![Page 153: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/153.jpg)
www.xsys21.huExpert software systems for the 21th century
153Vég Csaba: Java-start!
Kompozíciós lehetőség... HatározottIntegrál i= new HatározottIntegrál( new FüggvényÖsszeg( new ÖsszetettFüggvény( new LineárisFüggvény(2,3), new SinusFüggvény() ), new KonstansFüggvény(3) ), -1, 1, 100); System.out.println(i+"="+i.getIntegrál());...
![Page 154: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/154.jpg)
www.xsys21.huExpert software systems for the 21th century
154Vég Csaba: Java-start!
Láthatóságpublic (publikus, nyilvános): bárhonnan elérhetők, ha az objektum vagy az osztály (osztály-
jellegzetesség esetén) is elérhető.protected (védett): csak a definiáló osztály határain belül érhetők el. A pontosított
változatok még a határon belül vannak, így az alosztályok is elérik a védett jellegzetességeket.
A nem pontosított osztályból azonban rejtve maradnak.jelöletlen: csomag-láthatóságú (package visibility) azonos csomagból a jellegzetességek elérhetők, a csomagon kívül
azonban rejtettek.private (saját, privát): nem érhetőek el más osztályokból, még a pontosított alosztályokból
sem.
![Page 155: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/155.jpg)
www.xsys21.huExpert software systems for the 21th century
155Vég Csaba: Java-start!
Láthatóság
Kívülről is elérhető/használható jellegzetesség: publikus
A megvalósítással kapcsolatos részletek: általában saját (private), esetleg, ha a csomag
több osztálya is érintett, akkor csomag-láthatóságú
Osztály logikájához kapcsolódó (absztrakt modell szintű), de nem publikus: védett (protected)
![Page 156: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/156.jpg)
www.xsys21.huExpert software systems for the 21th century
156Vég Csaba: Java-start!
Láthatóság
Lineáris egyenletrendszer -a,b,c: double -d,e,f: double + (a': double, b': double, c': double, d': double, e': double, f ': double) #/det: double {a*e-b*d} #/detX: double {b*f-c*e} #/detY: double {c*d-a*f} +/határozott? { det0 } +/határozatlan? { határozott detX=0 } +/ellentmondásos? { határozott detX0 } +/x: double { detX/det } +/y: double { detY/det }
![Page 157: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/157.jpg)
www.xsys21.huExpert software systems for the 21th century
157Vég Csaba: Java-start!
Átdefiniálás / finalPontosítás során a saját metódusok nem definiálhatók át.
Átdefiniáláskor legfeljebb bővíthetjük, de nem szűkíthetjük a láthatóságot. csomag-láthatóságról védettre vagy publikusra, védettről pedig publikusra változtathatjuk.
final metódus: megtiltjuk a metódus átdefiniálását. (pl. biztonsági ok miatt) adott osztály metódusa még az alosztályokban is mindig az elvárt
módon működjön.
final osztály: megtilthatjuk, hogy az osztályt pontosítsák a jelölés részben azt is eredményezi, mintha az összes metódust
final-ként jelölnénk.
![Page 158: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/158.jpg)
www.xsys21.huExpert software systems for the 21th century
158Vég Csaba: Java-start!
11.Interfész
![Page 159: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/159.jpg)
www.xsys21.huExpert software systems for the 21th century
159Vég Csaba: Java-start!
Interfész
Integrálás: ha ismerjük a primitívfüggvényét, akkor egyszerűen kiszámítható ( F(b)-F(a) )
Primitívfüggvény: olyan lehetőség, amely segítségével hatékonyabban hajthatjuk végre a határozott integrál kiszámításának műveletét.
OO szemlélet: a lehetőségeket interfészekként (interface), más néven kapcsolódási felületként adhatjuk meg.
![Page 160: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/160.jpg)
www.xsys21.huExpert software systems for the 21th century
160Vég Csaba: Java-start!
Interfésza publikus metódusoknak a csoportját definiálja, mely így az objektum elérésének egy lehetséges módját határozza meg.
hasonlít az absztrakt osztályhoz, azonban minden metódusa absztrakt és publikus, illetve attribútumként csak statikus és final adatokat (azaz konstansokat) definiálhatunk.
logikailag eltér az osztálytól, egy interfész valamely más osztályra vonatkozó lehetőségeket,
annak egy használati módját jelenti, így önmagában nem is értelmezhető.
![Page 161: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/161.jpg)
www.xsys21.huExpert software systems for the 21th century
161Vég Csaba: Java-start!
Függvény +/y(x: double): double
PrimitívFüggvényű +/primitívFüggvény: Függvény
KonstansFüggvény -a: double + (a': double) +/y(x: double): double +/integrálFüggvény :Függvény
Interfész
public interface PrimitívFüggvényű {
public Függvény getPrimitívFüggvény();
}
![Page 162: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/162.jpg)
www.xsys21.huExpert software systems for the 21th century
162Vég Csaba: Java-start!
public class KonstansFüggvény extends Függvény implements PrimitívFüggvényű { private double a; public KonstansFüggvény(double a_) { a=a_; } public double y(double x) { return a; } public Függvény getPrimitívFüggvény() { return new LineárisFüggvény(a,0); } public String toString() {
return "KonstansFüggvény( "+a+" )"; }}
![Page 163: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/163.jpg)
www.xsys21.huExpert software systems for the 21th century
163Vég Csaba: Java-start!
public HatározottIntegrál(Függvény f_, double a_, double b_, int n_) {
a=a_; b=b_; n=n_; f=f_;
double h=(b-a)/n, s=(f.y(a)+f.y(b))/2, x=a;
for(int i=1; i<=n-1; i++) { x+=h; s+=f.y(x); }
integrál = s*h;
}
ha PrimitívFüggvényűha PrimitívFüggvényű
![Page 164: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/164.jpg)
www.xsys21.huExpert software systems for the 21th century
164Vég Csaba: Java-start!
instanceofpublic HatározottIntegrál(Függvény f_, double a_, double b_, int n_) { f=f_; a=a_; b=b_; n=n_; if(f instanceof PrimitívFüggvényű) { pontos=true; Függvény
F=((PrimitívFüggvényű)f).getPrimitívFüggvény(); integrál=F.y(b)-F.y(a); } else { double h=(b-a)/n, s=(f.y(a)+f.y(b))/2, x=a; for(int i=1; i<=n-1; i++) { x+=h; s+=f.y(x); } integrál=s*h; } }
![Page 165: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/165.jpg)
www.xsys21.huExpert software systems for the 21th century
165Vég Csaba: Java-start!
PontosításEgy osztály legfeljebb egyetlen ősosztályt pontosíthat, egy interfésznek azonban több „ősinterfésze” is lehet. Az alaptípust az extends kulcsszó után adjuk meg.
Interfész esetén több ősinterfészt vesszővel választunk el egymástól.
Egy osztály több interfészt is implementálhat (!), azaz több interfésszel leírt lehetőséget is megvalósíthat. A megvalósított interfészeket az implements kulcsszó
után, vesszővel elválasztva soroljuk fel.
![Page 166: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/166.jpg)
www.xsys21.huExpert software systems for the 21th century
166Vég Csaba: Java-start!
Pontosítás
Interfész megvalósításakor definiálni kell az abban megadott metódusokat, különben az osztályt az abstract jelzővel kell ellátni.
Ha egy osztály implementál egy interfészt, azaz rendelkezik az elérésnek ezzel a lehetőségével, akkor természetesen annak a leszármazott osztályai is mind rendelkeznek ezzel a lehetőséggel.
![Page 167: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/167.jpg)
www.xsys21.huExpert software systems for the 21th century
167Vég Csaba: Java-start!
Konverzió
Egy objektum mindig „ismeri” a saját osztályát, azt, amely alapján a new operátorral létrehoztuk.
Objektum tekinthető az osztálya vagy bármely ősosztálya objektumaként, az osztály vagy valamely ősosztály által megvalósított
bármely interfészű objektumként.
![Page 168: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/168.jpg)
www.xsys21.huExpert software systems for the 21th century
168Vég Csaba: Java-start!
Konverzió
Bővítő-konverzió: adott osztályúként tekintett objektumot az osztály ősosztályába vagy valamely implementált interfészébe konvertálunk (pontosabb változatból általánosabb típusúvá alakítunk.
Szűkítő-konverzió típuskonverziós operátorral: a többi (tényleges) osztályába vagy másik implementált interfészébe is alakítható A Java a szűkítő-konverzió során ellenőrzi, hogy a megadott
osztály valóban az objektum osztálya vagy ősosztálya-e, illetve, hogy interfész esetén az objektum ténylegesen implementálja-e az interfészt.
![Page 169: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/169.jpg)
www.xsys21.huExpert software systems for the 21th century
169Vég Csaba: Java-start!
Belső osztály
A primitívfüggvény képzésének a lehetősége logikailag szorosan kapcsolódik a Függvény osztályhoz.
Egy osztályt vagy egy interfészt egy másik osztályon, illetve bizonyos esetekben egy másik interfészen belül, annak egy jellegzetességeként is definiálhatunk
A belső osztály (inner class) egy osztályon vagy interfészen belül definiált másik osztály vagy interfész.
![Page 170: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/170.jpg)
www.xsys21.huExpert software systems for the 21th century
170Vég Csaba: Java-start!
Belső osztályA belső osztály (inner class) egy osztályon vagy interfészen belül definiált másik osztály vagy interfész. van láthatósága, pl. a publikus belső osztály kívülről is
elérhető, ill. publikus konstruktor esetén példányosítható. a befogadó osztály definícióján kívül minősített névvel
érhetjük el. Például a Függvény osztályon belüli PrimitívFüggvényű interfészre a Függvény.PrimitívFüggvényű módon hivatkozhatunk.
a belső osztály a befogadó osztály „határain” belül helyezkedik el, ezért a befogadó osztály objektumainak a privát jellegzetességeit is eléri (!).
A belső osztály statikus is lehet, ami azt jelenti, hogy a definíciója független a befogadó osztály objektumától.
![Page 171: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/171.jpg)
www.xsys21.huExpert software systems for the 21th century
171Vég Csaba: Java-start!
Belső osztály
public abstract class Függvény { public static interface PrimitívFüggvényű { public Függvény getPrimitívFüggvény(); } public abstract double y(double x); }
Függvény+/y(x: double): double
+$PrimitívFüggvényű+/integrálFüggvény: Függvény
![Page 172: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/172.jpg)
www.xsys21.huExpert software systems for the 21th century
172Vég Csaba: Java-start!
public class KonstansFüggvény extends Függvény implements Függvény.PrimitívFüggvényű { private double a; protected class PrimitívFüggvény extends Függvény { public double y(double x) { return a*x; } public String toString() { return "PrimitívFüggvény( "+KonstansFüggvény.this+" )"; } } public KonstansFüggvény(double a_) { a=a_; } public double y(double x) { return a; } public Függvény getPrimitívFüggvény() { return new PrimitívFüggvény(); } public String toString() { return "KonstansFüggvény( "+a+" )"; }}
![Page 173: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/173.jpg)
www.xsys21.huExpert software systems for the 21th century
173Vég Csaba: Java-start!
osztálynév.this
osztálynév.this közvetlenül hivatkozhatunk az adott osztályú külső
objektumra, illetve a jellegzetességeire, pl. KonstansFüggvény.this.a.
a belső osztályban a külső jellegzetességgel azonos nevű jellegzetesség elérése
Belső osztály objektumának létrehozása f.new PrimitívFüggvény()
![Page 174: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/174.jpg)
www.xsys21.huExpert software systems for the 21th century
174Vég Csaba: Java-start!
Lokális osztály
utasításblokkon belül definiált
csak az utasításblokkon belül látható
nem lehet statikus.
a befogadó objektum jellegzetességei mellett a lokális osztály objektuma eléri az utasításblokk final módon deklarált paramétereit és lokális változóit is(!).
![Page 175: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/175.jpg)
www.xsys21.huExpert software systems for the 21th century
175Vég Csaba: Java-start!
public class KonstansFüggvény extends Függvény implements Függvény.PrimitívFüggvényű { private double a; public KonstansFüggvény(double a_) { a=a_; } public double y(double x) { return a; } public Függvény getPrimitívFüggvény() { class PrimitívFüggvény extends Függvény { public double y(double x) { return a*x; } public String toString() { return "PrimitívFüggvény( "+KonstansFüggvény.this+" )"; } } return new PrimitívFüggvény(); } public String toString() { return "KonstansFüggvény( "+a+" )"; }}
![Page 176: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/176.jpg)
www.xsys21.huExpert software systems for the 21th century
176Vég Csaba: Java-start!
Névtelen osztályok
A programozás során gyakran előfordul, hogy bizonyos osztályokat csak egyetlen egy helyen példányosítunk. Egyetlen helyen példányosított osztályokat definiálhatunk
elnevezés nélkül, a példányosítás helyén.
A névtelen osztály (anonymous class) hasonló a lokális osztályhoz konstruktort nem adhatunk meg (csak inicializáló blokkot,
lásd később)
![Page 177: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/177.jpg)
www.xsys21.huExpert software systems for the 21th century
177Vég Csaba: Java-start!
public class KonstansFüggvény extends Függvény implements Függvény.PrimitívFüggvényű { private double a; public KonstansFüggvény(double a_) { a=a_; } public double y(double x) { return a; } public Függvény getPrimitívFüggvény() { return new Függvény() { public double y(double x) { return a*x; } public String toString() { return "PrimitívFüggvény( "+KonstansFüggvény.this+" )"; } }; } public String toString() { return "KonstansFüggvény( "+a+" )"; }}
![Page 178: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/178.jpg)
www.xsys21.huExpert software systems for the 21th century
178Vég Csaba: Java-start!
Névtelen osztály
...
HatározottIntegrál i= new HatározottIntegrál(
new Függvény() {
public double y(double x) {
return Math.sin(x)+2*Math.cos(x);
}
}
, -1, 1, 100);
System.out.println(i+"="+i.getIntegrál());
...
![Page 179: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/179.jpg)
www.xsys21.huExpert software systems for the 21th century
179Vég Csaba: Java-start!
Object
Java nyelven csak egyetlen osztályt adhatunk meg ősosztályként.Ha nem adunk meg ősosztályt, akkor a Java
automatikusan a java.lang.Object osztályát veszi ősosztályként.
Object definiálja a +toString():String metódust, ezért bármely objektum szöveggé alakítható, mivel mindegyik rendelkezik ezzel a metódussal.
![Page 180: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/180.jpg)
www.xsys21.huExpert software systems for the 21th century
180Vég Csaba: Java-start!
super
osztály definícióján belül az ősosztály jellegzetességét a super kulcsszóval érhetjük el.
az ősosztály attribútumára akkor is hivatkozhatunk, ha az osztályban felveszünk egy azonos nevű attribútumot.
az ősosztály metódusát akkor is meghívhatjuk, ha a metódust az osztályban átdefiniáljuk.
![Page 181: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/181.jpg)
www.xsys21.huExpert software systems for the 21th century
181Vég Csaba: Java-start!
super(...)
osztály konstruktorából az ősosztály konstruktorát a blokk legelső utasításaként szereplő super(paraméterek); utasítással hívhatjuk meg.Ha nincs this(paraméterek); vagy super(paraméterek); akkor a Java oda automatikusan a super(); utasítást szúrja be
Ha nem adunk konstruktort: automatikusan felvesz egy alapértelmezett konstruktort. hibalehetőség...
![Page 182: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/182.jpg)
www.xsys21.huExpert software systems for the 21th century
182Vég Csaba: Java-start!
12.Kivételkezelés
![Page 183: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/183.jpg)
www.xsys21.huExpert software systems for the 21th century
183Vég Csaba: Java-start!
Kivételes helyzetek
Hibalehetőségek: negatív oldalhosszúságú téglalap, 0 nevezőjű tört, prímtényezős felbontásban 2-nél kisebb szám, stb.
Hibakód visszaadása: a kódot minden egyes hívás után tesztelnünk kellene körülményes, nehezebben áttekinthető
Pl.:téglalap.setA( Double.parseDouble( téglalapA.getText() ) );
Hibakódos megoldás esetén a parseDouble metódus egy hibakódot is visszaadna, amit mindig vizsgálnunk kellene.
![Page 184: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/184.jpg)
www.xsys21.huExpert software systems for the 21th century
184Vég Csaba: Java-start!
KivételekKivételek: a kivételes eseményeket kivételes módon figyeljük és kezeljük
le. a programot a normális (értsd: „nem kivételes”) működésnek
megfelelően írjuk le a hiba helyén a program „szól” a hiba felléptéről a fellépő hibákat egy-egy gyűjtőhelyen kezelhetjük
A kivételes helyzet bekövetkezéséről egy kivétellel (exception) üzenhetünk. Java nyelven a kivételek is objektumok a kivételek típusát osztályként kell megadnunk kivételként a Throwable osztály alosztálya használható
![Page 185: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/185.jpg)
www.xsys21.huExpert software systems for the 21th century
185Vég Csaba: Java-start!
Kivétel-osztályokThrowable: Error: a rendszer olyan alapvető hibáit jelölik
gyakorlatilag le sem kezelhetők (pl. nincs több szabad memória)
Exception: kezelhetők. RuntimeException (Exception alosztálya)
futási idejű kivételes esemény (pl. nullával való osztás vagy helytelen konverzió)
átgondolt és helyes programokban gyakorlatilag soha nem jelentkezik.
Kivétel-osztály általában az Exception alosztálya, egyes ritka esetekben a RuntimeException alosztálya
![Page 186: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/186.jpg)
www.xsys21.huExpert software systems for the 21th century
186Vég Csaba: Java-start!
Kivételes helyzetekLineáris egyenletrendszer
-a,b,c: double-d,e,f: double+ (a': double, b': double, c': double, d': double, e': double, f ': double)-/det: double {a*e-b*d}-/detX: double {c*e-b*f}-/detY: double {a*f-c*d}+/határozott? { det0 }+/határozatlan? { határozott detX=0 }+/ellentmondásos? { határozott detX0 }+/x: double { detX/det }+/y: double { detY/det } hibalehetőséghibalehetőség
![Page 187: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/187.jpg)
www.xsys21.huExpert software systems for the 21th century
187Vég Csaba: Java-start!
Kivételekpublic class HatározatlanEgyenletrendszer extends Exception { public String toString() {return "Határozatlan egyenletrendszer"; }} public class EllentmondásosEgyenletrendszer extends Exception { public String toString() { return "Ellentmondásos egyenletrendszer"; }}
public double getX() throws HatározatlanEgyenletrendszer, EllentmondásosEgyenletrendszer { if(!isHatározott()) { if(isHatározatlan()) throw new HatározatlanEgyenletrendszer(); else throw new EllentmondásosEgyenletrendszer(); } else return getDetX()/getDet(); }
![Page 188: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/188.jpg)
www.xsys21.huExpert software systems for the 21th century
188Vég Csaba: Java-start!
...public double getX() throws
HatározatlanEgyenletrendszer,EllentmondásosEgyenletrendszer{ if(!isHatározott()) {
if(isHatározatlan()) throw new HatározatlanEgyenletrendszer();
else throw new EllentmondásosEgyenletrendszer(); } return getDetX()/getDet(); }
![Page 189: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/189.jpg)
www.xsys21.huExpert software systems for the 21th century
189Vég Csaba: Java-start!
^: „okozhat”
Lineáris egyenletrendszer -a,b,c: double -d,e,f: double + (a': double, b': double, c': double, d': double, e': double, f ': double) #/det: double {a*e-b*d} #/detX: double {c*e-b*f} #/detY: double {a*f-c*d} +/határozott? { det0 } +/határozatlan? { határozottEgyenletrendszer detX=0 } +/ellentmondásos? { határozottEgyenletrendszer detX0 } +/x: ^Határozatlan, ^Ellentmondásos, double {detX/det} +/y: ^Határozatlan, ^Ellentmondásos, double {detY/det}
![Page 190: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/190.jpg)
www.xsys21.huExpert software systems for the 21th century
190Vég Csaba: Java-start!
catch
public static void main(String[] args) { LineárisEgyenletrendszer e= new LineárisEgyenletrendszer(1,2,2, 2,1,-4); try { System.out.println("x="+e.getX()+", y="+e.getY()+"."); } catch(HatározatlanEgyenletrendszer x) { System.out.println("Határozatlan egyenletrendszer"); } catch(EllentmondásosEgyenletrendszer x) { System.out.println("Ellentmondásos egyenletrendszer"); } }
![Page 191: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/191.jpg)
www.xsys21.huExpert software systems for the 21th century
191Vég Csaba: Java-start!
Kivétel-ősosztályprivate abstract class NemHatározottEgyenletrendszer extends
Exception{ } public class HatározatlanEgyenletrendszer extends NemHatározottEgyenletrendszer { public String toString() { return "Határozatlan
egyenletrendszer"; }} public class EllentmondásosEgyenletrendszer extends NemHatározottEgyenletrendszer { public String toString() { return "Ellentmondásos
egyenletrendszer"; }}
![Page 192: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/192.jpg)
www.xsys21.huExpert software systems for the 21th century
192Vég Csaba: Java-start!
Kivétel-ősosztály...
public double getX() throws NemHatározottEgyenletrendszer {
if(!isHatározott()) {
if(isHatározatlan())
throw new HatározatlanEgyenletrendszer();
else
throw new EllentmondásosEgyenletrendszer();
}
return getDetX()/getDet();
}
![Page 193: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/193.jpg)
www.xsys21.huExpert software systems for the 21th century
193Vég Csaba: Java-start!
Kivétel-ősosztály
public static void main(String[] args) { LineárisEgyenletrendszer e= new LineárisEgyenletrendszer(1,2,2, 2,1,-4); try { System.out.println("x="+e.getX()+","+ "y="+e.getY()
+"."); } catch(NemHatározottEgyenletrendszer x) { System.out.println(x); } }
![Page 194: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/194.jpg)
www.xsys21.huExpert software systems for the 21th century
194Vég Csaba: Java-start!
Exception
Összes kivétel elkapása:
try { ...
} catch(Exception e) {
System.out.println(e.getMessage()); e.printStackTrace();
}
![Page 195: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/195.jpg)
www.xsys21.huExpert software systems for the 21th century
195Vég Csaba: Java-start!
message
public abstract class NemHatározottEgyenletrendszer extends Exception {
private NemHatározottEgyenletrendszer(String msg_) { super(msg_); }
private LineárisEgyenletrendszer source; public LineárisEgyenletrendszer getSource() {
return source; } public String toString() { return getMessage()+": "+ getSource()
+"."; }}
Célszerű felvenni egy source tulajdonságot is
![Page 196: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/196.jpg)
www.xsys21.huExpert software systems for the 21th century
196Vég Csaba: Java-start!
Kivétel belső osztálykéntHa a kivétel alapvetően csak egyetlen osztályra vonatkozik: belső osztályként definiálva automatikusan rendelkezésre áll a létrehozás alapobjektuma.
public class LineárisEgyenletrendszer { public abstract class NemHatározott extends Exception { private NemHatározott(String message_) { super(message_); } public LineárisEgyenletrendszer getSource() { return LineárisEgyenletrendszer.this; } public String toString() { return getMessage()+": "+ getSource()+"."; } }...
![Page 197: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/197.jpg)
www.xsys21.huExpert software systems for the 21th century
197Vég Csaba: Java-start!
^?: („kivéve, ha”)
Lineáris egyenletrendszer -a,b,c: double -d,e,f: double + (a': double, b': double, c': double, d': double, e': double, f ': double) #/det: double {a*e-b*d} #/detX: double {c*e-b*f} #/detY: double {a*f-c*d} +/határozott? { det0 } +/határozatlan? { határozott detX=0 } +/ellentmondásos? { határozott detX0 } +/x: ^?határozatlan, ^?ellentmondásos, double { detX/det } +/y: ^?határozatlan, ^?ellentmondásos, double { detY/det }
![Page 198: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/198.jpg)
www.xsys21.huExpert software systems for the 21th century
198Vég Csaba: Java-start!
^?: („kivéve, ha”)
public double getX() throws Határozatlan,Ellentmondásos {
if(isHatározatlan()) throw new Határozatlan(); if(isEllentmondásos()) throw new
Ellentmondásos(); return getDetX()/getDet(); }
a vázlat mindig csak az elvet jeleníti meg, így azt hatékonyabb módon (alosztályok, stb.) is megvalósíthatjuk.
![Page 199: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/199.jpg)
www.xsys21.huExpert software systems for the 21th century
199Vég Csaba: Java-start!
A kivétel kezelésének áthárítása
...
public static void main(String[] args)
throws Határozatlan,Ellentmondásos {
LineárisEgyenletrendszer e=
new LineárisEgyenletrendszer(1,2,2, 2,1,-4);
System.out.println("x="+e.getX()+", y="+e.getY()+".");
}
![Page 200: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/200.jpg)
www.xsys21.huExpert software systems for the 21th century
200Vég Csaba: Java-start!
finally
blokk utasítássorozatának félbeszakadása: kivételes esemény hatására. break, ill. continue.
Zárótevékenység: valamely megkezdett tevékenységet mindenképpen be akarunk fejezni pl. használt erőforrásokat lezárása
Kivételkezeléshez hasonló megadás. try-blokkot követő catch-szerkezet(ek) után a finally („végül”)
kulcsszó után a zárás-jellegű tevékenységek.
![Page 201: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/201.jpg)
www.xsys21.huExpert software systems for the 21th century
201Vég Csaba: Java-start!
try {...} catch(E1 e1) { …} catch(E2 e2) { …} finally { …}
Mindenképpen végrehajtódik normál végrehajtás esetén is kivétel esetén is, függetlenül, hogy egy catch kezeli-e
Olyan try-blokkot is megadhatunk, amelyben csak egy finally-ág szerepel.
![Page 202: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/202.jpg)
www.xsys21.huExpert software systems for the 21th century
202Vég Csaba: Java-start!
Objektumok megszüntetése
Nincs közvetlen lehetőség a már nem használt objektumok megszüntetéséreJVM szemétgyűjtés (garbage collection) eljárása sorra veszi a már nem használt objektumokat és
felszabadítja az azok által elfoglalt területeket.
A gc automatikusan elindul, ha elfogyott a rendelkezésre álló memória. System.gc(); hívással elindítható
#finalize(): a terület felszabadítása előtt meghívódik, így az objektum lebontása (destrukciója) előtt még végrehajthatunk műveleteket.
![Page 203: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/203.jpg)
www.xsys21.huExpert software systems for the 21th century
203Vég Csaba: Java-start!
13.Tömb
![Page 204: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/204.jpg)
www.xsys21.huExpert software systems for the 21th century
204Vég Csaba: Java-start!
Összetett adatok Elemi típus: az érték közvetlenül a befogadó-területen helyezkedik el.
Referencia-típus: az érték külön területet foglal el, a befogadó-területre pedig csak egy hivatkozás (referencia)A referencia segítségével ugyanazt az adatot az
érték másolása nélkül, több helyről is elérhetjük int | | double
…
int | int | int |
![Page 205: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/205.jpg)
www.xsys21.huExpert software systems for the 21th century
205Vég Csaba: Java-start!
Összetett adatokOsztály: előre megadott számú adatot (attribútumot) tartalmaz az adatok különböző típusúak lehetnek. adatelemeket a pont-jelölés segítségével érjük el.
Tömb: létrehozáskor egy számérték adja meg az adatelemek
számát. az adatok azonos típusúak lehetnek. adatelemeket az indexnek nevezett sorszámukkal érjük el
a sorszámozás nullától kezdődik a[i]
![Page 206: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/206.jpg)
www.xsys21.huExpert software systems for the 21th century
206Vég Csaba: Java-start!
Készítsünk egy Dátum osztályt, amely meg tudja mondani, hogy az adott hónapban hány nap van!
Dátum-év: int-hó: int-nap: int+ (év':int, hó':int, nap':int)+/szökőév?+/hónapNapjai: int
![Page 207: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/207.jpg)
www.xsys21.huExpert software systems for the 21th century
207Vég Csaba: Java-start!
public class Dátum private int év, hó, nap;
public Dátum(int év_,int hó_,int nap_) { év=év_; hó=hó_; nap=nap_; } public boolean isSzökőév() { return év%4==0&&!(év%100==0)||év
%400==0;} public int getHónapNapjai() { switch(hó) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11:
return 30; case 2: return isSzökőév() ? 29 : 28; } return 0; }
![Page 208: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/208.jpg)
www.xsys21.huExpert software systems for the 21th century
208Vég Csaba: Java-start!
public class Dátum private int év, hó, nap;
public static final int HónapNapjai[ ] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
};
public Dátum(int év_,int hó_,int nap_) { év=év_; hó=hó_; nap=nap_; }
public boolean isSzökőév() { return év%4==0&&!(év%100==0)||év%400==0; }
public int getHónapNapjai() {
return (hó==2 && isSzökőév()) ? 29 : HónapNapjai[hó];
}
public String toString() { return év+"-"+hó+"-"+nap; }
public static void main(String[] args) {
Dátum d =new Dátum(1999,8,11);
System.out.println(d+" hónapjában a napok száma: "+
d.getHónapNapjai()+".");
}
![Page 209: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/209.jpg)
www.xsys21.huExpert software systems for the 21th century
209Vég Csaba: Java-start!
Tömb-változó
double a[] adott alaptípusú tömböt és adott típusú változó
pl.: double a[],x
double[] a az összes változót tömbként definiálja,
pl. double[] a, x
![Page 210: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/210.jpg)
www.xsys21.huExpert software systems for the 21th century
210Vég Csaba: Java-start!
Tömb létrehozása
Létrehozás:new double[10]
Elemek száma:tömbKifejezés.length
Kezdőérték:a = new double[ ] { 4,5,6 }
![Page 211: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/211.jpg)
www.xsys21.huExpert software systems for the 21th century
211Vég Csaba: Java-start!
Többdimenziós tömb
kétdimenziós tömbváltozó:double a[][]
létrehozásaa = new double[2][3]
kezdőértéka = new double[][] { { 1,2,3 }, {4,5,6} }
hivatkozása[i][j]
![Page 212: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/212.jpg)
www.xsys21.huExpert software systems for the 21th century
212Vég Csaba: Java-start!
Többdimenziós tömb
Létrehozás:a = new double[2][]
Különböző méretű altömbök:a[0] = new double[3];
a[1] = new double[5];
![Page 213: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/213.jpg)
www.xsys21.huExpert software systems for the 21th century
213Vég Csaba: Java-start!
public class Dátum
private int év, hó, nap; public static final int HónapNapjai[] [] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; public Dátum(int év_,int hó_,int nap_) {év=év_;hó=hó_;nap=nap_;} public boolean isSzökőév() { return év%4==0&&!(év%100==0)||év
%400==0; } public int getHónapNapjai() { return HónapNapjai[isSzökőév() ? 1 : 0][hó]; }...
![Page 214: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/214.jpg)
www.xsys21.huExpert software systems for the 21th century
214Vég Csaba: Java-start!
Egyszerű leképezés A Dátum osztályt egészítsük ki a hétNapja tulajdonsággal, amely megadja, hogy a dátum a hét melyik napjára esik (hétfő, kedd, stb.)!
public static final String HétNapjai[] = {
"vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"
};
public String getHétNapja() {
int e=év, h=hó; // másolat az értékekről
if(h<=2) { --e; h+=10; } else h-=2; // római naptár
int c=e/100, x=e%100; // Százévek és az azon belüli évek
return HétNapjai[(c/4-2*c+x+x/4+(int)(2.6*h-0.199)+nap)%7];
}
![Page 215: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/215.jpg)
www.xsys21.huExpert software systems for the 21th century
215Vég Csaba: Java-start!
Konverzió (referencia-típus)bővítő (widening) konverziók: adott osztályúként tekintett objektum az osztály ősosztályának
objektumaként, ill. interfészre is adott osztályúként tekintett objektumot az osztály által
implementált bármely interfészű objektumként, bármely referencia-érték tekinthető Object-ként, null konvertálható bármely referencia-típusúvá. referencia-értékek tömbje esetén az alaptípus konverzióját veszi
figyelembe
általános típusként tekintett referencia-érték az eredeti típusúvá visszaalakítható, mely szűkítő-konverziónak számít. a Java ellenőrzi, hogy a konverzió megfelelő-e ClassCastException (ami egy RuntimeException)
![Page 216: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/216.jpg)
www.xsys21.huExpert software systems for the 21th century
216Vég Csaba: Java-start!
14.Számlálás, összegzés
![Page 217: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/217.jpg)
www.xsys21.huExpert software systems for the 21th century
217Vég Csaba: Java-start!
Számlálás
Egy cég havi bontásban megadott bevételei közül számláljuk meg azokat a hónapokat, melyekben nem volt bevétel!
Statisztika-adatok[]: double+ (adatok'[]: double)+/hónapokSzáma :int+/bevételnélküliHónapokSzáma: int
![Page 218: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/218.jpg)
www.xsys21.huExpert software systems for the 21th century
218Vég Csaba: Java-start!
public class Statisztika private double adatok[]; public Statisztika(double adatok_[]) { adatok=adatok_; } public int getHónapokSzáma() { return adatok.length; } public int getBevételnélküliHónapokSzáma() { int n=0; for(int i=0; i<adatok.length; ++i) if(adatok[i]==0) ++n; return n; } public static void main(String[] args) { Statisztika s =new Statisztika( new double[] { 2, 0, 4, 0, 1 } ); System.out.println(s.getHónapokSzáma()+" hónapból " +s.getBevételnélküliHónapokSzáma()+" hónapban " +"nem volt bevétel."); }
![Page 219: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/219.jpg)
www.xsys21.huExpert software systems for the 21th century
219Vég Csaba: Java-start!
Összeg és átlag A statisztikát egészítsük ki úgy, hogy az összesített bevételt és a havi átlagot is megadja!
...... public double getÖsszesBevétel() { double s=0;public double getÖsszesBevétel() { double s=0; for(int i=0; i<adatok.length; ++i)for(int i=0; i<adatok.length; ++i) s+=adatok[i];s+=adatok[i]; return s;return s; }} public static void main(String[] args) {public static void main(String[] args) { Statisztika s =new Statisztika( new double[] { 2, 0, 4, 0, 1 } );Statisztika s =new Statisztika( new double[] { 2, 0, 4, 0, 1 } ); double összes=s.getÖsszesBevétel();double összes=s.getÖsszesBevétel(); System.out.println("Összes bevétel: "+összes+", ");System.out.println("Összes bevétel: "+összes+", "); System.out.println(" havi átlag: "+összes/s.getHónapokSzáma()+".");System.out.println(" havi átlag: "+összes/s.getHónapokSzáma()+"."); } }
![Page 220: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/220.jpg)
www.xsys21.huExpert software systems for the 21th century
220Vég Csaba: Java-start!
Iterátor
Adatsorozat elemeit veszik sorra. pl. egy X típusú elemeket felsoroló iterátor:
+/empty()? kiürült-e az adatsorozat+/current(): X megadja az aktuális elemet+next() következő elemre lép
Egy i iterátorral felsorolt adatelemek feldolgozása: for( ; !i.empty(); i.next())
A ciklusmagban az aktuális elemre az i.current() módon hivatkozunk.
![Page 221: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/221.jpg)
www.xsys21.huExpert software systems for the 21th century
221Vég Csaba: Java-start!
Iterátorpublic interface DoubleIterator { public boolean empty(); public double current(); public void next();}
public class DoubleArrayIterator implements DoubleIterator { private double array[]; private int i=0; public DoubleArrayIterator(double array_[]) { array=array_; } public double current() { return array[i]; } public void next() { ++i; } public boolean empty() { return i>=array.length; }}
![Page 222: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/222.jpg)
www.xsys21.huExpert software systems for the 21th century
222Vég Csaba: Java-start!
Adatelemek feldolgozása
Iterátor segítségével tetszőleges, double típusú elemekből álló adatsorozatot feldolgozhatunk
Összegzés:
double s=0;
for(DoubleIterator i=new DoubleArrayIterator(adatok);
!i.empty(); i.next()) {
s+=i.current();
}
![Page 223: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/223.jpg)
www.xsys21.huExpert software systems for the 21th century
223Vég Csaba: Java-start!
Összetett iterátor
Iterátor alapján újabb iterátort is készíthetünk. Pl. a következő névtelen-osztály egy i sorozat minden elemét megszoroz a sorszámával:
new DoubleIterator() { int j=1; public double current() { return i.current()*j; } public boolean empty() { return i.empty(); } public void next() { ++j; i.next(); } }
![Page 224: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/224.jpg)
www.xsys21.huExpert software systems for the 21th century
224Vég Csaba: Java-start!
Összetett iterátorTömbben megadott iterátorok adatait egyetlen, összefüggő adatsorozattá kapcsolja:
public class DoubleJoinIterator implements DoubleIterator { private DoubleIterator a[]; private int i=-1; public DoubleJoinIterator(DoubleIterator a_[]) {a_=a;validate();} protected void validate() { while(a[++i].empty()) if(i>=a.length) {i=-1; break;} } public double current() { return a[i].current(); } public void next() { a[i].next(); validate(); } public boolean empty() { return i==-1; }}
![Page 225: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/225.jpg)
www.xsys21.huExpert software systems for the 21th century
225Vég Csaba: Java-start!
Feldolgozó
public abstract class DoubleOperation { protected double result =0; public abstract void process(double v); public double result() { return result; } public double process(DoubleIterator i) { for( ; !i.empty(); i.next()) process(i.current()); return result(); }}
![Page 226: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/226.jpg)
www.xsys21.huExpert software systems for the 21th century
226Vég Csaba: Java-start!
Összegzés/maximumpublic class DoubleSum extends DoubleOperation { public void process(double v) { result+=v; }}
public class DoubleMaximum extends DoubleOperation { boolean f =true; public DoubleMaximum() { } public DoubleMaximum(double v_) { result=v_; } public void process(double v) { if(f || result<v) {f=false; result=v;} }}
![Page 227: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/227.jpg)
www.xsys21.huExpert software systems for the 21th century
227Vég Csaba: Java-start!
Feldolgozó
...
public static DoubleOperation[] process(
DoubleIterator i, DoubleOperation F[]) {
for( ; !i.empty(); i.next())
for(int j=0; j<F.length; ++j)
F[j].process(i.current());
return F;
}
...
![Page 228: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/228.jpg)
www.xsys21.huExpert software systems for the 21th century
228Vég Csaba: Java-start!
Valós számokat tartalmazó tömb elemeinek határozzuk meg az összegét, a minimumát, a maximumát, a negatív, nulla és a pozitív értékek számát!
![Page 229: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/229.jpg)
www.xsys21.huExpert software systems for the 21th century
229Vég Csaba: Java-start!
Feldolgozók alkalmazásaDoubleOperation F[]= DoubleOperation.process( new DoubleArrayIterator(new double[] {-1,0,1,-2,3,7,-2} ), new DoubleOperation[] { new DoubleSum(), new DoubleMinimum(), new DoubleMaximum(), new DoubleOperation() { public void process(double v) { if(v<0) ++result; } }, new DoubleOperation() { public void process(double v) { if(v==0) ++result; } }, new DoubleOperation() { public void process(double v) { if(v>0) ++result; } }, });
![Page 230: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/230.jpg)
www.xsys21.huExpert software systems for the 21th century
230Vég Csaba: Java-start!
A Dátum osztályt egészítsük ki egy +/évNapja: int tulajdonsággal, amely megadja hogy az adott dátum az év hányadik napja!
......
public static final int HónapNapjai[][] = {public static final int HónapNapjai[][] = {
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};};
public int getÉvNapja() { int s=0;public int getÉvNapja() { int s=0;
for(int i=1; i<hó; ++i) s+=HónapNapjai[isSzökőév() ? 1 : 0][i];for(int i=1; i<hó; ++i) s+=HónapNapjai[isSzökőév() ? 1 : 0][i];
return s+nap; return s+nap;
}}
......
![Page 231: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/231.jpg)
www.xsys21.huExpert software systems for the 21th century
231Vég Csaba: Java-start!
Inicializáló blokkstatikus – nem statikus
public static final int HónapNapjai[][] = new int[][] { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; public static final int együttesNapok[] = new int[13]; static { int s=0; for(int i=1; i<=12; ++i) { együttesNapok[i]=s; s+=HónapNapjai[0][i]; } }
![Page 232: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/232.jpg)
www.xsys21.huExpert software systems for the 21th century
232Vég Csaba: Java-start!
Számítsuk ki egy valós együtthatós polinom x helyen felvett helyettesítési értékét!
Polinom+/fok: int+együttható[i:int]: double+/helyettesítésiÉrték: double
![Page 233: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/233.jpg)
www.xsys21.huExpert software systems for the 21th century
233Vég Csaba: Java-start!
Tömb-jellegű tulajdonság
private double együttható[]; // ha nem számított
public double getEgyütthatóAt(int i) // ha olvasható
public void setEgyütthatóAt(int i, double együttható_) // ha írható
Polinom+/fok: int+együttható[i:int]: double+/helyettesítésiÉrték: double
![Page 234: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/234.jpg)
www.xsys21.huExpert software systems for the 21th century
234Vég Csaba: Java-start!
public class Polinom private double együttható[]; public int getFokszám() { return együttható.length-1; } public double getEgyütthatóAt(int i) { return i<=getFokszám() ? együttható[i] : 0; } public Polinom(double együttható_[]) { együttható=együttható_; } public Polinom() { this(new double[1]); } public double helyettesítésiÉrték(double x) { double y=0; for(int i=getFokszám(); i>=0; i--) y=y*x+getEgyütthatóAt(i); return y; } public static void main(String[] args) { System.out.println("P(2.5)=" +new Polinom(new double[]{7,4,3,2}).helyettesítésiÉrték(2.5)); }
![Page 235: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/235.jpg)
www.xsys21.huExpert software systems for the 21th century
235Vég Csaba: Java-start!
15.Karakter és szöveg
![Page 236: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/236.jpg)
www.xsys21.huExpert software systems for the 21th century
236Vég Csaba: Java-start!
Karakter
char: egyetlen karakter tárolására alkalmasUnicode-kódolás (65536-féle karakter)karakteres literál: aposztrófok között, pl. 'a'.
egész-jellegű típus egy karakter egész-értékké alakítható, egy egész-
érték pedig karakterré. konverzió során a karakter a kódjaként jelenik meg.
![Page 237: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/237.jpg)
www.xsys21.huExpert software systems for the 21th century
237Vég Csaba: Java-start!
Szöveg (String)
Szövegek ábrázolása: String-osztály nyelvi kiegészítések:
String-literál (pl. "a"), konkatenáció operátor
Szöveg karaktereinek tárolása: karakter-tömbben
A String-objektumok konstansok: az eredeti szövegen nem módosíthatunk, a módosítás-jellegű műveletek újabb String-et képeznek. a szöveg egy részét (substring) az eredeti szöveg alapján is
képezhetünk.
String: karakteres-tömb, kezdőpozíció és az utolsó karakter utáni pozíciót tárol.
![Page 238: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/238.jpg)
www.xsys21.huExpert software systems for the 21th century
238Vég Csaba: Java-start!
String: adott kezelési módú karaktertömb, amelyet alapvetően konstans szövegek tárolására készítettek.
String-osztály funkciócsoportjai: String készítés, ill. String-ből karakter- vagy bájttömböt. String adott karaktere, a szöveg hossza, részszöveg, a
szöveg elejéről és végéről a szóközök eltávolítása (trim). összehasonlítás, adott szöveggel kezdődik, végződik hozzáfűzés, nagybetűssé vagy kisbetűssé alakítás, adott
karaktert másik karakterre cserélhetünk. · A szövegben kereshetünk egy karaktert vagy egy
részszöveget.
![Page 239: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/239.jpg)
www.xsys21.huExpert software systems for the 21th century
239Vég Csaba: Java-start!
Konstrukció/konverzió()
// üres-szöveg
(s: String) // szöveg alapján új String készítése
(tömb: char[]) // karaktertömbből szöveg készítése
/toCharArray():char[] // szövegből karaktertömb készítése
$valueOf(v: *): String // szöveg létrehozása adott, elemi típusú értékből.
$valueOf(o: Object): String// szöveg létrehozása egy objektum alapján.
![Page 240: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/240.jpg)
www.xsys21.huExpert software systems for the 21th century
240Vég Csaba: Java-start!
Lekérdezés+/charAt(index: int): char
// az index pozíción található karakter
+/length():int
// a szöveg hossza, azaz a karaktereinek a száma
+/substring(kezdés: int, vége: int): String
// a kezdőpozíciótól a vége-1 pozícióig a részszöveg
+/substring(kezdés: int): String
// a kezdőpozíciótól a végéig terjedő részszöveg
+/trim():String
// a szöveg elejéről és végéről elhagyja a szóközöket
![Page 241: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/241.jpg)
www.xsys21.huExpert software systems for the 21th century
241Vég Csaba: Java-start!
Hasonlítás+/compareTo(s:String): int
// összehasonlítja a szövegeket. +/equals(o:Object)?
// megegyezik-e a két szöveg +/equalsIgnoreCase(s:String)?
// a kis/nagybetűk megkülönböztetése nélkül +/startsWith(elején:String, kezdés:int =0)?
// a pozíciótól ez a szöveg kezdődik? +/endsWith(végén:String)?
// ezzel a szöveggel végződik? +/regionMatches(k:int,s:String,sK:int,h:int)?
// rész egyezése +/regionMatches(i?,k:int,s:String,sK:int,h:int)?
![Page 242: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/242.jpg)
www.xsys21.huExpert software systems for the 21th century
242Vég Csaba: Java-start!
Átalakított szöveg
+/concat(s:String):String // a szöveghez hozzáfűzi a másik szöveget
+/toLowerCase(): String
// a nagybetűket kisbetűvé konvertálja +/toUpperCase (): String
// a kisbetűket nagybetűvé konvertálja +/replace(régi:char, új:char): String
// a „régi” karaktereket „újra” cseréli
![Page 243: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/243.jpg)
www.xsys21.huExpert software systems for the 21th century
243Vég Csaba: Java-start!
Keresés
+/indexOf(c:char, kezdés:int=0 ):int
// a karakter első előfordulásának a helye
+/lastIndexOf(c:char):int
// a karakter utolsó előfordulásának a helye
+/lastIndexOf(c:char, vége:int):int
// utolsó előfordulás a helye
+/lastIndexOf(s:String):int
// a szöveg utolsó előfordulásának a helye
+/lastIndexOf(s:String, vége:int):int
// a szöveg utolsó előfordulásának a helye
![Page 244: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/244.jpg)
www.xsys21.huExpert software systems for the 21th century
244Vég Csaba: Java-start!
String karakterei
Karakterek sorravétele:for(int i=0; i<s.length(); ++i)
A cikluson belül az aktuális karakterre az s.charAt(i) módon hivatkozhatunk.
Egy szövegben számoljuk meg a szóközöket!
![Page 245: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/245.jpg)
www.xsys21.huExpert software systems for the 21th century
245Vég Csaba: Java-start!
public class Szóközök
private String string; public int getSzóközökSzáma() { int s=0; for(int i=0; i<string.length(); ++i) if(string.charAt(i)==' ') ++s; return s; } public Szóközök(String string_) { string=string_; } public static void main(String[] args) { System.out.println("Szóközök száma: "+ new Szóközök(" to be or not to be"). getSzóközökSzáma()); }
![Page 246: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/246.jpg)
www.xsys21.huExpert software systems for the 21th century
246Vég Csaba: Java-start!
Szöveg karakterei
Egy szövegben ellenőrizzük, hogy minden nyitózárójelhez tartozik egy záró zárójel is. Ügyeljünk arra, hogy a "3)+(4" nem megfelelően zárójelezett! A nem megfelelő zárójelezés hiba, azaz különleges
esemény, ezért megtehetjük, hogy az ellenőrzés a megtalált hibáról kivétellel értesíti a hívót.
Zárójelezés-string: String+ (string': String)+/teszt(): ^váratlanZárójel, ^hiányzóZárójel
![Page 247: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/247.jpg)
www.xsys21.huExpert software systems for the 21th century
247Vég Csaba: Java-start!
StringBuffer
String: nem változtatható.
StringBuffer: szöveg további szövegrészletekkel való kiegészítése.
![Page 248: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/248.jpg)
www.xsys21.huExpert software systems for the 21th century
248Vég Csaba: Java-start!
StringBuffer funkciói
StringBuffer objektumot String objektummá (toString()) és vissza (konstruktor) alakíthatunk.
Elemi- vagy referencia-érték szöveges változatát egy StringBuffer objektum végéhez fűzhetjük (append) vagy egy adott pozícióra beszúrhatjuk (insert).
Szöveg adott pozícióján a karaktert módosíthatjuk (setCharAt(i:int)).
Szöveg hosszának módosítása (setLength), a szöveg rövidítése, vagy növelése a \u0000 karakterekkel történő feltöltéssel.
![Page 249: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/249.jpg)
www.xsys21.huExpert software systems for the 21th century
249Vég Csaba: Java-start!
A Szóközök osztályt egészítsük ki egy olyan metódussal, ami a szövegnek azt a megfelelőjét adja eredményül, amelyben az egymást követő szóközök helyén csak egyetlen szóköz szerepel, ill. a szöveg elejéről és végéről is eltávolítjuk a szóközöket!
![Page 250: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/250.jpg)
www.xsys21.huExpert software systems for the 21th century
250Vég Csaba: Java-start!
public class Szóközök
public String getTöbbszörösSzóközökNélkül() {
StringBuffer b=new StringBuffer(); int m=' ';
for(int i=0; i<string.length(); ++i) {
if(!(m==' '&&string.charAt(i)==' '))
b.append(string.charAt(i));
m=string.charAt(i);
}
if(m==‘ ‘ && b.length()>0) b.setLength(b.length()-1);
return b.toString();
}
![Page 251: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/251.jpg)
www.xsys21.huExpert software systems for the 21th century
251Vég Csaba: Java-start!
Referencia-típusú paraméter
Paraméterátadás:elemi típusú paraméter esetén a teljes érték
lemásolódik.összetett típusú paraméter (objektum vagy tömb)
esetén csak az értékre vonatkozó hivatkozás („referencia”) adódik át.
ha a metódus belsejében az összetett értéken (pl. objektumon vagy a tömb egy elemén) módosítunk, akkor a hívó az általa elért objektumon is észleli a változást.
![Page 252: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/252.jpg)
www.xsys21.huExpert software systems for the 21th century
252Vég Csaba: Java-start!
16.Keresés és rendezés
![Page 253: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/253.jpg)
www.xsys21.huExpert software systems for the 21th century
253Vég Csaba: Java-start!
KeresésEgy String-ként megadott Java azonosítóról állapítsuk meg, hogy az Java kulcsszó-e!
public class Elemzés {public class Elemzés {
public static final String kulcsszó[] = {"abstract", ...};public static final String kulcsszó[] = {"abstract", ...};
public static boolean isKulcsszó(String string) { public static boolean isKulcsszó(String string) {
for(int i=0; i<kulcsszó.length; ++i)for(int i=0; i<kulcsszó.length; ++i)
if(kulcsszó[i].equals(string)) return true;if(kulcsszó[i].equals(string)) return true;
return false;return false;
} }
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("kulcsszó a main: "+Elemzés.isKulcsszó("main"));System.out.println("kulcsszó a main: "+Elemzés.isKulcsszó("main"));
}}
} }
![Page 254: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/254.jpg)
www.xsys21.huExpert software systems for the 21th century
254Vég Csaba: Java-start!
Sorrend kihasználásapublic class Elemzés { public static final String kulcsszó[] = {"abstract", ...}; public static boolean isKulcsszó(String string) { for(int i=0; i<kulcsszó.length; ++i) if(kulcsszó[i].compareTo(string)==0) return true; else if(kulcsszó[i].compareTo(string)>0) break; return false; } public static void main(String[] args) { System.out.println("main kulcsszó: "+ Elemzés.isKulcsszó("main")); }}
![Page 255: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/255.jpg)
www.xsys21.huExpert software systems for the 21th century
255Vég Csaba: Java-start!
Objektumok egyenlősége
Az == és a != operátorok nem csak elemi adatok, hanem referenciák esetén is alkalmazhatók (<, <=, >, >= nem). DE: referenciák esetén az azonosságot vizsgálja
Egyenlőség vizsgálata: Object osztály +/equals(o:Object)? Metódusa alapértelmezésként az == művelet átdefiniálható
![Page 256: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/256.jpg)
www.xsys21.huExpert software systems for the 21th century
256Vég Csaba: Java-start!
java.util.Vector (összetett adatok) +/size(): int
// az elemek száma +/elementAt(i:int):Object
// az i indexű helyen álló elem +setElementAt(i:int, o:Object)
// az i helyen álló elem beállítása +/isEmpty()?
// üres a vektor (nincs benne elem)? +/elements():Enumeration
// a vektor elemeinek felsorolása +/contains(o:Object)?
// szerepel benne az elem? +/indexOf(o:Object):int
// hol található az elem (-1, ha az elem nem szerepel)
![Page 257: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/257.jpg)
www.xsys21.huExpert software systems for the 21th century
257Vég Csaba: Java-start!
java.util.Vector +addElement(o:Object)
// a Vector végéhez fűz egy elemet +insertElementAt(i:int,o:Object)
// beszúr egy elemet az adott pozícióra+removeElement(o:Object)
// törli az elemet +removeAllElements()
// törli az összes elemet +trimToSize()
// az aktuális elemszámnak megfelelő méretűre állítja a tárolás tömbjét
![Page 258: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/258.jpg)
www.xsys21.huExpert software systems for the 21th century
258Vég Csaba: Java-start!
Vector
Vector objektum Object típusú elemek, azaz tetszőleges referencia-típusú értékek tárolására alkalmas.
Vector: dinamikusan változtat a méretét elem hozzáadása (addElement) vagy beszúrása
(insertElement) esetén a tároló tömb automatikusan nagyobb méretűre cserélődik.
![Page 259: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/259.jpg)
www.xsys21.huExpert software systems for the 21th century
259Vég Csaba: Java-start!
Vector alkalmazásaimport java.util.Vector;public class Elemzés { public static final Hashtable kulcsszó = new Hashtable(); static { String T[] = {"abstract", ... }; for(int i=0; i<T.length; ++i) kulcsszó.put(T[i], T[i]); } public static boolean isKulcsszó(String string) { return kulcsszó.containsKey(string); } public static void main(String[] args) { System.out.println("kulcsszó a main: "+ Elemzés.isKulcsszó("main")); }}
![Page 260: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/260.jpg)
www.xsys21.huExpert software systems for the 21th century
260Vég Csaba: Java-start!
Vector elemeinek sorravétele
Tömb-jellegű módon:for(int i=0; i<v.size(); ++i)
aktuális elem: v.elementAt(i)
elements(): java.util.Enumeration objektummal
![Page 261: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/261.jpg)
www.xsys21.huExpert software systems for the 21th century
261Vég Csaba: Java-start!
java.util.Enumeration
+/hasMoreElements()? // a felsorolás tartalmaz-e még több elemet?
+nextElement(): Object // a felsorolás következő elemét adja meg
Az első elem elé lép!while( e.hasMoreElements() )
System.out.println(e.nextElement());
Általában konverzió: (típus)e.nextElement()
![Page 262: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/262.jpg)
www.xsys21.huExpert software systems for the 21th century
262Vég Csaba: Java-start!
java.util.Hashtable
Tömb: tekinthető a 0 és n közötti egészeken értelmezett leképezésként. Tömb-jellegű tulajdonság: valamely indexszerepű
érték (vagy értékek) alapján határozunk meg vagy állíthatunk be egy értéket.
Az indexszerepű értéket kulcsnak (key) nevezzük.
Hashtable: referencia-típusú kulcsok esetén alkalmazható
![Page 263: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/263.jpg)
www.xsys21.huExpert software systems for the 21th century
263Vég Csaba: Java-start!
java.util.Dictionary +/size():int
// a táblában lévő elemek száma+/isEmpty()?
// üres (nincs benne elem)?+/keys():Enumeration
// a kulcsok felsorolása+/elements():Enumeration
// az értékek felsorolása+/get(key:Object):Object
// kulcsnak megfelelő érték lekérdezése+put(key:Object, value:Object)
// kulcsnak megfelelő érték beállítása+remove(key:Object) // kulcsnak megfelelő érték kivétele
![Page 264: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/264.jpg)
www.xsys21.huExpert software systems for the 21th century
264Vég Csaba: Java-start!
Hashtable+clear()
// a táblában lévő összes elem kivétele
+/containsKey(key:Object)? // szerepel a táblában a kulcs?
+/contains(value:Object)? // szerepel a táblában az adott érték?
Object osztály +/hashCode():int metódusabármely referencia-típusú értékAlapértelmezésként egyediÉrték alapján célszerű beállítani
![Page 265: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/265.jpg)
www.xsys21.huExpert software systems for the 21th century
265Vég Csaba: Java-start!
Csomagoló-osztályok
Vector, Hashtable, Enumeration stb., Object típusú elemek: objektumok és tömbök esetén használhatók
Elemi típusú értékek:elkészítjük az elemi típusra specializált változatot
(például IntVector, DoubleVector, stb.). csomagoló-osztályok
![Page 266: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/266.jpg)
www.xsys21.huExpert software systems for the 21th century
266Vég Csaba: Java-start!
csomagoló-osztály (wrapper-class)
Minden elemi típushoz rendelkezésre áll:Boolean, Byte, Character, Short, Integer, Long, Float, Double
Elemi érték -> objektum: konstruktor (pl. new Integer(-1))
Objektum -> elemi értékmegfelelő metódus,
pl.: booleanValue(), byteValue(), charValue(), stb.
![Page 267: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/267.jpg)
www.xsys21.huExpert software systems for the 21th century
267Vég Csaba: Java-start!
Szövegből/szöveggé alakítás
Szövegből: Konstruktorral objektum parseByte(s:String): byte statikus metódusok
(Hibás forma esetén NumberFormatException) Egész típusok esetén: adott számrendszer
Szöveggé alakítás: a csomagoló osztály +/toString():String metódusával, elemi értékeknél pedig a megfelelő, például Byte esetén a +
$/toString(byte:Byte):String metódussal történhet.
![Page 268: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/268.jpg)
www.xsys21.huExpert software systems for the 21th century
268Vég Csaba: Java-start!
Konstansok
Elemi típusra vonatkozó konstansok és statikus metódusok pl. az alapértéknek megfelelő típusú (byte, char,
short, stb.) MAX_VALUE és MIN_VALUE statikus konstansok (static final).
![Page 269: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/269.jpg)
www.xsys21.huExpert software systems for the 21th century
269Vég Csaba: Java-start!
Character +$/isDigit(c:char)?
// számjegy?+$/isLetter(c:char)?
// betű?+$/isLetterOrDigit(c:char)?
// betű vagy számjegy?+$/isLowerCase(c:char)?
// kisbetű?+$/isUpperCase(c:char)?
// nagybetű?+$/toLowerCase(c:char):char
// kisbetűvé alakít+$/toUpperCase(c:char):char
// nagybetűvé alakít
![Page 270: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/270.jpg)
www.xsys21.huExpert software systems for the 21th century
270Vég Csaba: Java-start!
Character+$/isLetterOrDigit(c:char)?
// betű vagy számjegy?+$/isJavaIdentifierStart(c:char)?
// lehet-e egy Java azonosító első karaktere?+$/isJavaIdentifierStart(c:char)?
// lehet-e egy Java azonosító folytató (nem első) karaktere?+$/isUnicodeIdentifierStart(c:char)?
// lehet-e egy Unicode-azonosító első karaktere?+$/isUnicodeIdentifierStart(c:char)?
// lehet-e egy Unicode-azonosító folytató (nem első) karaktere?+$/isWhiteSpace(c:char)?
// szóköz-jellegű (szóköz, tabulátor vagy újsor)?
![Page 271: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/271.jpg)
www.xsys21.huExpert software systems for the 21th century
271Vég Csaba: Java-start!
Number
A Byte, Short, Integer, Long, Float és Double őse
Number definiálja a byteValue, shortValue, stb. metódusokat az előző csomagoló osztályok objektumai mind
használhatók a Number-osztály objektumaként mindegyiktől lekérdezhető adott formában a számérték.
![Page 272: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/272.jpg)
www.xsys21.huExpert software systems for the 21th century
272Vég Csaba: Java-start!
17.Szöveges állomány
![Page 273: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/273.jpg)
www.xsys21.huExpert software systems for the 21th century
273Vég Csaba: Java-start!
ÁllományokÁllománykezelés: java.io csomag
Szöveges állomány: az adatokat karakter-sorozatok ábrázolják. alapvetően emberek számára készülnek, általuk is olvasható vagy
létrehozható — például egy egyszerű szövegszerkesztő programmal.
Adatállomány: az adatok a gép belső kódolása alapján vannak tárolva, így azok
az ember számára csak közvetetten, valamely program által feldolgozva érhetők el és kezelhetők.
java.io.IOException
![Page 274: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/274.jpg)
www.xsys21.huExpert software systems for the 21th century
274Vég Csaba: Java-start!
Állományokszöveges-állomány adatállomány
olvasása Reader InputStreamírása Writer OutputStream
Karakterek ábrázolása: Unicode-kódolás alapján szöveges állományban egy karakter 1 bájton van ábrázolva
adott (például valamely nemzeti karakterkészletnek megfelelő) kódolás alapján
szöveges állományok esetén a Java elrejti a kódolást, azt elegendő csak a konstruktorban megadnunk.
az állomány olvasásakor vagy írásakor a kódkonverziót a megfelelő író- vagy olvasó-objektum automatikusan hajtja végre.
![Page 275: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/275.jpg)
www.xsys21.huExpert software systems for the 21th century
275Vég Csaba: Java-start!
Reader osztályok
Reader
InputStreamReader
FileReader
StringReader
CharArrayReader
BufferedReader
LineNumberReader
FilterReader
PipedReader Tárolás
Szolgáltatás
PushBackReader
![Page 276: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/276.jpg)
www.xsys21.huExpert software systems for the 21th century
276Vég Csaba: Java-start!
Reader - tárolásInputStreamReader // InputStream-ből olvas
(in: InputStream) // alapértelmezett kódolás alapján
(in: InputStream, k: String)
// a k kódolás alapján olvas
FileReader // állományból (alapértelmezett kódolás)
(név: String) // adott nevű állományból olvas
(f: File) // egy File állományból olvas
![Page 277: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/277.jpg)
www.xsys21.huExpert software systems for the 21th century
277Vég Csaba: Java-start!
Reader - tárolás
StringReader // Egy String objektumból olvas
(s: String) // adott szövegből olvas
CharArrayReader // char tömbből olvas
(T[]: char) // adott karakter-tömbből olvas
(T[]: char, kezd:int, hossz:int) // résztömbből olvas
![Page 278: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/278.jpg)
www.xsys21.huExpert software systems for the 21th century
278Vég Csaba: Java-start!
Reader két legalapvetőbb metódusa
+read(): int // beolvassa a következő karaktert (a kódját), // ha elértük az állomány végét, akkor -1 kódot ad
vissza. +close() // lezárja az állományt; ezzel kell jeleznünk, hogy
befejeztük // az állománnyal kapcsolatos munkát.
![Page 279: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/279.jpg)
www.xsys21.huExpert software systems for the 21th century
279Vég Csaba: Java-start!
Reader - szolgáltatás
BufferedReader
// pufferezést tesz lehetővé, így visszaállhatunk egy
// korábban beolvasott helyre, ill. beolvashatunk egy sort.
LineNumberReader
// számlálja az állomány sorait, valamint, ha a sor végét több
// karakter jelzi, azokat egyetlen \n karakterré konvertálja.
PushBackReader
// egy karaktert vissza tudunk tenni (push back) az
// állományba, a következő olvasás így azt olvassa.
![Page 280: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/280.jpg)
www.xsys21.huExpert software systems for the 21th century
280Vég Csaba: Java-start!
Sorszámlálás
Számoljuk meg, hogy egy állomány hány karakterből és hány sorból áll. A sorvége jeleket is karaktereknek tekintjük, azonban logikai sorokat számolunk, így az utolsó sor végén lehet, de hiányozhat is az újsor karakter!
Számláló+karakterekSzáma: int =0+sorokSzáma: int =0+ (in: Reader)+toString():String
![Page 281: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/281.jpg)
www.xsys21.huExpert software systems for the 21th century
281Vég Csaba: Java-start!
Számlálóimport java.io.*;
public class Számláló { private int karakterekSzáma=0; public int getKarakterekSzáma() { return karakterekSzáma; } private int sorokSzáma=0; public int getSorokSzáma() { return sorokSzáma; } public Számláló(Reader in) throws IOException { int c; while((c=in.read())!=-1) { ++karakterekSzáma; if(c=='\n') ++sorokSzáma; } in.close(); }
![Page 282: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/282.jpg)
www.xsys21.huExpert software systems for the 21th century
282Vég Csaba: Java-start!
public String toString() { return getKarakterekSzáma()+ " karakter, "+getSorokSzáma()+" sor."; } public static void main(String[] args) throws IOException { System.out.println(new Számláló( new StringReader("abcdef\ngehij\nklmn\nopqrst") )); System.out.println(new Számláló(
new FileReader("c:\\autoexec.bat")));
}
![Page 283: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/283.jpg)
www.xsys21.huExpert software systems for the 21th century
283Vég Csaba: Java-start!
Egy szöveges állományt írjunk ki a konzolra úgy, hogy minden sor előtt jelenjen meg a sorszáma!
sor beolvasása: BufferedReader osztály, sorok számlálása: LineNumberReader
readLine(): sor beolvasása, állomány végén null
![Page 284: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/284.jpg)
www.xsys21.huExpert software systems for the 21th century
284Vég Csaba: Java-start!
import java.io.*;
public class KiegészítésASorokSzámával { public static void main(String[] args) throws IOException { LineNumberReader in = new LineNumberReader( new FileReader("c:\\autoexec.bat") ); String line; while( (line= in.readLine())!=null ) { System.out.println((in.getLineNumber()-1)+" "+line); } }}
![Page 285: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/285.jpg)
www.xsys21.huExpert software systems for the 21th century
285Vég Csaba: Java-start!
Writer
Writer
OutputStreamWriter
FileWriter
StringWriter
CharArrayWriter
BufferedWriter
FilterWriter
PrintWriter
PipedWriter Tárolás
Szolgáltatás
![Page 286: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/286.jpg)
www.xsys21.huExpert software systems for the 21th century
286Vég Csaba: Java-start!
Writer - tárolás
CharArrayWriter toCharArray(): char[] toString():String writeTo(w:Writer) // pl. állományba
StringWriter (StringBuffer objektumba)getBuffer():StringBuffer toString():String
![Page 287: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/287.jpg)
www.xsys21.huExpert software systems for the 21th century
287Vég Csaba: Java-start!
Writer - szolgáltatás
BufferedWriter: korábbi megjegyzett pozícióra visszaléphetünk
PrintWriter:nem csak egyetlen karakter, hanem más típusú
érték szöveges kiírására is alkalmas. print(v: *) println(v: *) println()
közvetlenül, egy OutputStream-ből is létrehozható
![Page 288: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/288.jpg)
www.xsys21.huExpert software systems for the 21th century
288Vég Csaba: Java-start!
System.out
System.out: PrintStream
PrintWriter-hez hasonló a rendszer alapértelmezett kódolását használja
PrintWriter out =new PrintWriter(System.out);
![Page 289: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/289.jpg)
www.xsys21.huExpert software systems for the 21th century
289Vég Csaba: Java-start!
Készítsünk olyan osztályt, amely egy metódusával egy szöveges-állomány alapján egy olyan új szöveges állományt készítünk, amelyben a nem üres sorok elé kiírunk egy (a konstruktorban) megadott számú szóközt!
![Page 290: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/290.jpg)
www.xsys21.huExpert software systems for the 21th century
290Vég Csaba: Java-start!
Szűrők
SzűrőkBemeneti állomány tartalmán átalakítást kell
végeznünk, vagy a kezelését kiegészítő funkciókkal szeretnénk segíteni
Kimeneti állomány esetén a kiírás előtt kell bizonyos műveleteket végrehajtanunk vagy az adott módú kiírást újabb funkciókkal szeretnénk segíteni.
Szűrők esetén az eredmény ugyancsak állományként jelenik meg.
![Page 291: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/291.jpg)
www.xsys21.huExpert software systems for the 21th century
291Vég Csaba: Java-start!
FilterReader / FilterWriter
Egy Reader / Writer állomány alapján hozzuk létre
Rendelkeznek az alaposztály műveleteivel alapértelmezésként az alapul szolgáló állomány megfelelő
metódusának a meghívása pontosított osztályt készítünk, amelyben átdefiniáljuk a
megfelelő műveleteket. a pontosított osztályt újabb metódusokkal egészítjük ki:
megkönnyíthetjük az állomány tartalmának a szükséges módon történő feldolgozását vagy előállítását.
![Page 292: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/292.jpg)
www.xsys21.huExpert software systems for the 21th century
292Vég Csaba: Java-start!
Készítsünk olyan szűrőt, amely egy bemeneti szöveges állományban előforduló tabulátor ('\t') karaktereket a (konstruktorban) megadott számú szóközre helyettesíti!
![Page 293: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/293.jpg)
www.xsys21.huExpert software systems for the 21th century
293Vég Csaba: Java-start!
public class TabSzóközzé extends FilterReader { private int szóközökSzáma, n=0; public int read() throws IOException { if(n>0) { --n; return ' '; } int c=in.read(); if(c=='\t') { n=szóközökSzáma-1; return ' '; } return c; } public TabSzóközzé(Reader in_, int szóközökSzáma_) { super(in_); szóközökSzáma=szóközökSzáma_; } public static void main(String[] args) throws IOException { Reader in = new TabSzóközzé( new StringReader("jan :\t12\nfebr:\t31\nmarc:\t20"), 4 ); Writer out=new OutputStreamWriter(System.out); int c; while((c=in.read())!=-1) out.write(c); in.close(); out.close(); }
![Page 294: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/294.jpg)
www.xsys21.huExpert software systems for the 21th century
294Vég Csaba: Java-start!
18.StreamTokenizer
![Page 295: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/295.jpg)
www.xsys21.huExpert software systems for the 21th century
295Vég Csaba: Java-start!
Tokenekre bontás
Reader: karakterenként
BufferedReader: soronként
PrintWriter: szöveggé alakított adatok kiírása
StreamTokenizer: a bemenetet nagyobb egységenként (tokenenként) dolgozhatjuk fel.
![Page 296: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/296.jpg)
www.xsys21.huExpert software systems for the 21th century
296Vég Csaba: Java-start!
Karaktertípusok
Szóköz-jellegű: a tokenizáló kihagyjaSzámjegy típusú: szám (szám előtt - is lehet)Betűvel kezdődik és betűvel vagy számjeggyel folytatódik: azonosító.Idézőjel típusú karakterek között szöveges konstans, belül escape-szekvenciákat (pl. \n) is megadhatunk.
Megjegyzés-jellegű karakterek után a sorvégéig kihagyja a karaktereket. // utáni, illetve a /* és */ közötti karaktereket kihagyhatjuk
Normál karakter: önmagában jelenti a tokent.
![Page 297: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/297.jpg)
www.xsys21.huExpert software systems for the 21th century
297Vég Csaba: Java-start!
Létrehozás
a tokenizálót nem InputStream-ből, hanem egy Reader-ből célszerű létrehozni (a bemenet megfelelő kódolása miatt)
Konzol-bemenet olvasása:StreamTokenizer tokenizer = new StreamTokenizer(
new InputStreamReader(System.in)
);
![Page 298: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/298.jpg)
www.xsys21.huExpert software systems for the 21th century
298Vég Csaba: Java-start!
Tokenek olvasása
nextToken():int kihagyja a szóközöket és a megjegyzéseket. normál karakterek: a visszaadott érték a karakter kódja, különleges karakterek esetén:
TT_EOF=-1 // állomány végeTT_EOL='\n' // sorvégeTT_NUMBER=-2 // szám-jellegű tokenTT_WORD=-3 // azonosító-jellegű token
Tokenek olvasása (a t int típusú):while( (t=tokenizer.nextToken())!=tokenizer.TT_EOF ) ...
![Page 299: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/299.jpg)
www.xsys21.huExpert software systems for the 21th century
299Vég Csaba: Java-start!
Token jellemzői
+ttype: int // a beolvasott token kódja (a nextToken() eredménye)
+sval: String
// a beolvasott azonosító vagy szöveges konstans +nval: double
// a beolvasott szám értéke +/lineno(): int
// az aktuális sor száma
![Page 300: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/300.jpg)
www.xsys21.huExpert software systems for the 21th century
300Vég Csaba: Java-start!
Karaktertípusok+resetSyntax()
// az összes karakter normál-típusú lesz+wordChars(tól:int, ig:int)
// a tartomány karakterei betű-jellegűek+whitespaceChars(tól:int, ig:int)
// szóköz-jellegűek+ordinaryChars(tól:int, ig:int)
// normál karakterek+ordinaryChar(k: int)
// megfelel a következőnek: ordinaryChars(k,k)+commentChar(k: int)
// megjegyzésjel-jellegű+quoteChar(k: int)
// idézőjel-jellegű
![Page 301: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/301.jpg)
www.xsys21.huExpert software systems for the 21th century
301Vég Csaba: Java-start!
Karaktertípusok+parseNumbers()
// a 0-9 közötti karakterek szám-jellegűek+eolIsSignificant(f?)
// tokenként értelmezze-e a sorvége jeleket+slashStarComments(f?)
// kihagyja-e a /* megjegyzéseket +slashSlashComments(f?)
// kihagyja-e a // megjegyzéseket +lowerCaseMode(f?)
// kisbetűssé konvertálja-e az azonosítókat?
![Page 302: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/302.jpg)
www.xsys21.huExpert software systems for the 21th century
302Vég Csaba: Java-start!
Alapértelmezett beállítás
latin-betűk és a 0xa0-tól 0xff-ig terjedő kódok (ezek nemzeti karakterek) betű-típusúak,
'0' és '9' közöttiek számjegy-típusúak, '\0' és ' ' közötti karakterek szóközök, '"' és '\'' idézőjelek, a '/' megjegyzésjel (!), a sorvégét átugorja és nem hagyja ki a //utáni és a /* és */ közötti
karaktereket.
![Page 303: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/303.jpg)
www.xsys21.huExpert software systems for the 21th century
303Vég Csaba: Java-start!
A bemeneti szöveges állományban a tanulók nevei, majd kettőspont után a jegyei szerepelnek. Eredményként írjuk ki a tanulók neveit és átlagukat, majd végül az átlagok átlagát!
![Page 304: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/304.jpg)
www.xsys21.huExpert software systems for the 21th century
304Vég Csaba: Java-start!
A bemeneti szöveges állományban egy Java nyelvű program van. Egy tömbben felsorolt azonosítók alapján írjunk ki egy referenciatáblázatot, melyben az azonosítók után felsoroljuk, hogy az a program hányadik sorában szerepel!
![Page 305: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/305.jpg)
www.xsys21.huExpert software systems for the 21th century
305Vég Csaba: Java-start!
ReferenciaSzámláló -referenciák: Referenciák + (azonosítók':Vector, in: Reader) +/print(out: PrintWriter) Referenciák
-referencia: Vector<Referencia> + (azonosítók: String[]) +/referenciák: Enumeration<Referencia> +előfordulás(azonosító:String, sorszám:int) +/print(out: PrintWriter)
Referencia +azonosító: String -előfordulás: Vector<Integer> +/előfordulások: Enumeration<Integer> + (azonosító':String) +előfordulás(sorszám:int) +/print(out: PrintWriter)
![Page 306: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/306.jpg)
www.xsys21.huExpert software systems for the 21th century
306Vég Csaba: Java-start!
File (útvonal:String)
// létrehozás szövegesen megadott útvonalból (útvonal:String, név:String)
// létrehozás útvonalból és névből (útvonal:File, név:String)
// létrehozás útvonalból és névből +/getName(): String
// elérési út név-része +/getPath(): String
// a megadott elérési út +/getAbsolutePath(): String
// elérési utat abszolút útvonallá egészíti ki
![Page 307: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/307.jpg)
www.xsys21.huExpert software systems for the 21th century
307Vég Csaba: Java-start!
File +/getParent(): String
// a szülő könyvtár elérési útja vagy null +/isAbsolute()?
// abszolút módon van megadva az elérési út? +/isExists()?
// létezik a bejegyzés? +/canRead()?
// létezik és olvasható? +/canWrite()?
// létezik és írható?+/isFile()?
// a bejegyzés egy állomány? +/isDirectory?
// a bejegyzés egy könyvtár?
![Page 308: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/308.jpg)
www.xsys21.huExpert software systems for the 21th century
308Vég Csaba: Java-start!
File+/lastModified():long // utolsó módosítás kódja (csak összehasonlításra) +/length():long // állomány hossza +/mkdir()? // a szülő könyvtárban megkísérli létrehozni az elérési út
könyvtárát +/mkdirs()? // a szülőkben megkísérli létrehozni a teljes elérési utat+/list():String[] // könyvtár esetén a benne található állományok neve
![Page 309: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/309.jpg)
www.xsys21.huExpert software systems for the 21th century
309Vég Csaba: Java-start!
File +renameTo(újÁllomány: File)
// átnevezés +delete()?
// megkísérli törölni az bejegyzést (állományt vagy könyvtárat) +/equals()?
// ugyanazt az állományt jelöli? +/toString()
// elérési útvonalként jelenik meg
+$separator:String, +$separatorChar:charútvonal elemeinek elválasztása
![Page 310: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/310.jpg)
www.xsys21.huExpert software systems for the 21th century
310Vég Csaba: Java-start!
19.Adatállományok
![Page 311: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/311.jpg)
www.xsys21.huExpert software systems for the 21th century
311Vég Csaba: Java-start!
InputStream - tárolás
FileInputStream // adathordozón tárolt állományból
(név: String) // adott nevű állományból olvas
(f: File) // File állományból olvas
ByteArrayInputStream // Egy byte tömbből olvas
(T[]: char) // adott tömbből olvas
(T[]: char, kezd:int, hossz:int) // résztömbből olvas
![Page 312: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/312.jpg)
www.xsys21.huExpert software systems for the 21th century
312Vég Csaba: Java-start!
InputStream – alapvető metódusok
+read(): int
// beolvassa a következő bájtot;
// ha elértük az állomány végét, akkor -1 értéket ad.
+close()
// lezárja az állományt; ezzel kell jeleznünk, hogy
// befejeztük az állománnyal kapcsolatos munkát
![Page 313: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/313.jpg)
www.xsys21.huExpert software systems for the 21th century
313Vég Csaba: Java-start!
InputStream
InputStream FileInputStream
ByteArrayInputStream
BufferedInputStream
PipedInputStream
Tárolás Szolgáltatás
DataInput
DataInputStream
ObjectInputStream
SequenceInputStream
PushBackInputStream FilterInputStream
ObjectInput
![Page 314: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/314.jpg)
www.xsys21.huExpert software systems for the 21th century
314Vég Csaba: Java-start!
InputStream - szolgáltatásBufferedInputStream: az állományt nagyobb egységekben olvassa, korábbi (megjegyzett) pozícióra visszaállhatunk.
PushBackInputStream: egyetlen bájtot (unread(b:int)) vagy egy tömbbel (esetleg
résztömbbel) megadott bájtokat visszahelyezhetünk az InputStream-be
PipedInputStream: párhuzamosan végrehajtott programrészek közötti kommunikációSequenceInputStream segítségével több InputStream-et egyetlen bemenetté kapcsolhatunk össze.DataInputStream, ObjectOutputStream: a bementről a gép belső tárolásaként ábrázolt adatokat (pl. int vagy double típusúakat) olvassunk be
![Page 315: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/315.jpg)
www.xsys21.huExpert software systems for the 21th century
315Vég Csaba: Java-start!
OutputStream - tárolás
FileOutputStream // adathordozón tárolt állomány(név: String) // adott nevű állományba ír
(f: File) // File állományba ír (f: File, hozzáfűzés?) ByteArrayOutputStream // Egy byte tömböt
készít (T[]: char) // adott tömbből olvas
(T[]: char, kezd:int, hossz:int) // résztömbből olvas
![Page 316: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/316.jpg)
www.xsys21.huExpert software systems for the 21th century
316Vég Csaba: Java-start!
OutputStream
OutputStream FileOutputStream
ByteArrayOutputStream
PipedOutputStream
Tárolás Szolgáltatás
DataOutput
ObjectOutput
DataOutputStream
BufferedOutputStream
ObjectOutputStream
FilterOutputStream
![Page 317: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/317.jpg)
www.xsys21.huExpert software systems for the 21th century
317Vég Csaba: Java-start!
OutputStream – alapvető metódusok
+write(b:int)
// bájt kiírása
+close()
// lezárja az állományt
BufferedOutputStream: a kiírásokat nagyobb egységekbe gyűjthetjük, így ritkábban fordulunk az operációs rendszerhez.
![Page 318: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/318.jpg)
www.xsys21.huExpert software systems for the 21th century
318Vég Csaba: Java-start!
Bájtok olvasása
Egy adatállomány bájtjait írjuk ki szövegesen hexadecimális formában (16-os számrendszerben). Egy sorban megadott számú bájt jelenjen meg!
![Page 319: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/319.jpg)
www.xsys21.huExpert software systems for the 21th century
319Vég Csaba: Java-start!
DataInput DataOutputread():int write(v:int)readBoolean(): boolean writeBoolean(v: boolean)readByte(): byte writeByte(v: int)readUnsignedByte(): int writeUnsignedByte(v: int)readFully(t:byte[]) write(t:byte[])readFully(t:byte[],i:int,h:int) write(t:byte[],i:int,h:int)readShort(): short writeShort(v: int)readUnsignedShort(): int writeUnsignedShort(v: int)readChar(): char writeChar(v: int)
writeChars(v: String)readInt(): int writeInt(v: int)readLong(): long writeLong(v: long)readFloat(): float writeFloat(v: double)readDouble(): double writeDouble(v: double)readUTF(): String writeUTF(v: String)skipBytes(n:int)
![Page 320: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/320.jpg)
www.xsys21.huExpert software systems for the 21th century
320Vég Csaba: Java-start!
Elemi adatok írása/olvasása
DataInputStream / DataOutputStream: az állományokat nem csak bájtonként érhetjük el, hanem gépi formában tárolt elemi adatokat is elhelyezhetünk benne, ill. visszaolvashatunk belőle.
![Page 321: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/321.jpg)
www.xsys21.huExpert software systems for the 21th century
321Vég Csaba: Java-start!
Készítsünk egy osztályt, ami a Java kulcsszavait egy tömbben tárolja. Az osztály egy metódusa tárolja, egy másik metódusa pedig egy alapállományból töltse be a kulcsszavakat. Az adatállomány elején az elemek száma int-ként, a String-ek pedig UTF-ben legyenek tárolva!
![Page 322: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/322.jpg)
www.xsys21.huExpert software systems for the 21th century
322Vég Csaba: Java-start!
Szerializáció
Összetett adatok szerializációja: az adatállományokkal nem csak elemi értékeket, hanem tetszőleges („referencia-”) típusú összetett adatokat, így tömböket és objektumokat is írhatunk/olvashatunk.
Szerializáció alapeszközei: ObjectInputStream és ObjectOutputStream
![Page 323: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/323.jpg)
www.xsys21.huExpert software systems for the 21th century
323Vég Csaba: Java-start!
ObjectInputStreamObjectInputStream: InputStream ObjectInput interfészt is implementálja.
DataInput pontosítása
readObject(): Object
Létrehozás: InputStream alapján hozhatunk létre.
(f: InputStream) // ObjectInputStream létrehozása
![Page 324: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/324.jpg)
www.xsys21.huExpert software systems for the 21th century
324Vég Csaba: Java-start!
ObjectOutputStreamObjectOutputStream: OutputStream ObjectOutput interfészt is implementálja.
DataOutput pontosítása
writeObject(o: Object)
Létrehozás: OutputStream alapján hozhatunk létre.
(f: OutputStream) // ObjectOutputStream létrehozása
![Page 325: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/325.jpg)
www.xsys21.huExpert software systems for the 21th century
325Vég Csaba: Java-start!
Szerializáció
... public void read(ObjectInputStream in) throws IOException,ClassNotFoundException { kulcsszavak=(String[])in.readObject(); } public void write(ObjectOutputStream out) throws
IOException { out.writeObject(kulcsszavak); }...
![Page 326: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/326.jpg)
www.xsys21.huExpert software systems for the 21th century
326Vég Csaba: Java-start!
Biztonsági probléma: megoldás: csak azoknak az objektumoknak a kiírása
engedélyezett, amelyek osztálya implementálja a java.io csomagban megtalálható Serializable („szerializálható”) „jelző”-interfészt.
transient kulcsszó: ha egy attribútum külső tárolása nem szükséges (betöltés után alapérték)
Externalizable: a Serializable pontosításareadExternal(in:ObjectInput):
^IOException, ^ClassNotFoundExceptionwriteExternal(in:ObjectInput): ^IOException
![Page 327: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/327.jpg)
www.xsys21.huExpert software systems for the 21th century
327Vég Csaba: Java-start!
20.Véletlen elérés
![Page 328: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/328.jpg)
www.xsys21.huExpert software systems for the 21th century
328Vég Csaba: Java-start!
Véletlen elérésű állományLétrehozás: (név:String, mód:String)
// adott nevű állomány
(f:File, mód:String) // File objektummal megadott állomány
Mód: "r": csak olvasásni szeretnénk "rw": írni és módosítani is
RandomAccessFile: implementálja a DataInput és DataOutput interfészeket
elemi adatok olvasása és írására lehetséges összetett adatok írása/olvasása nem lehetséges
![Page 329: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/329.jpg)
www.xsys21.huExpert software systems for the 21th century
329Vég Csaba: Java-start!
Véletlen elérés metódusai
+/length(): long // az állomány mérete bájtokban
+/getFilePointer():long
// hol áll a mutató +/seek(pozíció:long)
// adott helyre lépés
![Page 330: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/330.jpg)
www.xsys21.huExpert software systems for the 21th century
330Vég Csaba: Java-start!
Egy állományt az @ jelek alapján bontsunk oldalakra. Először az első oldalt mutassuk meg, majd + jelre a következő, - jel esetén az előző oldalt, e esetén az első, u esetén az utolsó oldalt, illetve v esetén fejezzük be az állomány megtekintését! ReadMe
+ (állományNév:String)+show()+aktuálisOldalMegjelenítése()+elsőOldal()+előzőOldal()+adottOldal(i:int)+következőOldal()+utolsóOldal()
![Page 331: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/331.jpg)
www.xsys21.huExpert software systems for the 21th century
331Vég Csaba: Java-start!
Index-alapján történő elérés
Adott tanfolyamon részt vett diákok nevét és legfeljebb 10 eredményét tartalmazó adatállomány alapján írjuk ki a neveket és az eredményeket az átlagok szerinti növekvő sorrendben!
![Page 332: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/332.jpg)
www.xsys21.huExpert software systems for the 21th century
332Vég Csaba: Java-start!
Logikai modell
tanfolyam.removeAllDiák(); tanfolyam.addDiák(new Diák("Kiss A.", new double[]{ 5,5,5 })); tanfolyam.addDiák(new Diák("Kovács Á.", new double[]{ 4,5 })); tanfolyam.addDiák(new Diák("Fekete L.", new double[]{ 4,4,5 }));
*
Tanfolyam +addDiák(d:Diák) +removeAllDiák() +/everyDiák():Enumeration<Diák> +/everyDiákÁtlagAlapján():Enumeration<Diák>
Diák +név: NChars<25> +eredmények[i:int]: double + (név':String, eredmények':double[]) +/átlag: double +/print(out: PrintStream)
![Page 333: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/333.jpg)
www.xsys21.huExpert software systems for the 21th century
333Vég Csaba: Java-start!
Logikai modell
Enumeration e;
for(e=tanfolyam.everyDiák(); e.hasMoreElements(); )
((Diák)e.nextElement()).print(System.out);
System.out.println("****");
for(e=tanfolyam.everyDiákÁtlagAlapján(); e.hasMoreElements(); )
((Diák)e.nextElement()).print(System.out);
*
Tanfolyam +addDiák(d:Diák) +removeAllDiák() +/everyDiák():Enumeration<Diák> +/everyDiákÁtlagAlapján():Enumeration<Diák>
Diák +név: NChars<25> +eredmények[i:int]: double + (név':String, eredmények':double[]) +/átlag: double +/print(out: PrintStream)
![Page 334: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/334.jpg)
www.xsys21.huExpert software systems for the 21th century
334Vég Csaba: Java-start!
Állományban tárolásTanfolyam
data:RandomAccessFile+ (filename: String)+close()+addDiák(d:Diák)+removeAllDiák()+/everyDiák():Enumeration<Diák>+/everyDiákÁtlagAlapján():Enumeration<Diák>
Diák+filePos: long+név: NChars<25>+eredmények[i:int]: double+ (név':String, eredmények':double[])+/átlag: double+/print(out: PrintStream)+$/read(f:RandomAccessFile):Diák+/write(f:RandomAccessFile)
NChars+size: int+string: String+/toString(): String+$/read(in:DataInput, size:int):NChars+/write(out:DataOutput)
![Page 335: Java – start!](https://reader035.fdocuments.in/reader035/viewer/2022062222/568147ac550346895db4e9b8/html5/thumbnails/335.jpg)
www.xsys21.huExpert software systems for the 21th century
335Vég Csaba: Java-start!
Tanfolyam data:RandomAccessFile + (filename: String) +close() +addDiák(d:Diák) +removeAllDiák() +/everyDiák():Enumeration<Diák> +/everyDiákÁtlagAlapján():Enumeration<Diák>
Diák +filePos: long +név: NChars<25> +eredmények[i:int]: double + (név':String, eredmények':double[]) +/átlag: double +/print(out: PrintStream) +$/read(f:RandomAccessFile):Diák +/write(f:RandomAccessFile)
DiákIndex +filePos: long +átlag: double + (diák:Diák) +/getDiák(f:RandomAccessFile)
*
DiákIndexek -filename:String -index: Vector -rendezett? + (filename':String, tanfolyam':Tanfolyam) +close() +setIndex() +setRendezett() +/addDiák(d:Diák) +/removeAllDiák() +/everyDiák():Enumeration<Diák>
-indexek
-