objektum orientált programozás - szt1.sze.huszt1.sze.hu/java/ea/prog3_ea_2011_02.pdf · 2...

Post on 06-Feb-2018

222 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Széchenyi István Egyetem

Programozás III.

Varjasi Norbert

varjasin@sze.hu

2

Széchenyi István Egyetem

A Java nyelv fő jellemzői Egyszerű Objektumorientált Elosztott Robusztus (hibatűrő, megbízható): Biztonságos Hordozható Architektúra-független

(gépfüggetlen): Interpretált Nagy teljesítményű Többszálú Dinamikus

3

Széchenyi István Egyetem

A java virtuális gép (JVM)

Képzeletbei, „ideális” számítógép. Szoftveresen megvalósított működési környezet.

(az op. rendszer egy folyamata).

Feladata:Betölti a használt osztályokat (.class állományok)Az ott található blokkokat, utasításokat értelmezi, átalakítja gépi

kódú üzenetekké és futtatja.Memóriát kezel, kioszt, felszabadít, op. rendszerrel kapcsolatot tart, erőforrásokat használ.

4

Széchenyi István Egyetem

5

Széchenyi István Egyetem

6

Széchenyi István Egyetem

7

Széchenyi István Egyetem

A Java adattípusai

8

Széchenyi István Egyetem

A Java adattípusai

9

Széchenyi István Egyetem

A Java megszámlálható egész adattípusai Egészek:

byte (8 bites, -128 – 127) short (16 bites, -32.768 – 32.767) int (32 bites, -2.147.483.648 – 2.147.483.647) long (64 bites, -9.223.372.036.854.775.808 –

9.223.372.036.854.775.807) Pl.:

int újSzoket, régiSzoket, newSocket, oldSocket; byte elsőBájt, lastByte; byte utolsóBájt = 12; (értékadással) int folyamAzonosító = 017; (oktális értékadás) int streamId = 017; int kapcsolóAzonosító = 0XFF; (hexadecimális értékadás) int streamControlId=0X0F, switchId=0XBB;

10

Széchenyi István Egyetem

Lebegőpontos típusok: float (32 bites, 1.40129846432481707e-45 -

3.40282346638528860e+38) double (64 bites, 4.94065645841246544e-324d -

1.79769313486231570e+308d)

Pl.: float összeg=23.8f, újÖsszeg=24.f; float cashValue=23.8f, newCashValue; double teljesÖsszeg=1.56e2, régiÖsszeg=2.34E4d,

össz=7.34d; double newTotal=1.56e2, oldTotal=2.34E4;

11

Széchenyi István Egyetem

Karakter típusú adatok:char (2 bájt/karakter!, 0 – 65.535 )Pl.:

char elsőBetű, másodikBetű='b'; char senseChar, ringChar='e';

Logikai típusú adatokboolean (1 bit)Pl.:

boolean kilép, vanÉrték=true; boolean loopSensor, pollSensor=true;

12

Széchenyi István Egyetem

Kulcsszavak és azonosítókabstract 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 synchronized this

throw throws transient try void

volatile while

13

Széchenyi István Egyetem

Kifejezések, operátorok

prefix – az operátor az operandus előtt áll, postfix – az operátor az operandus után áll, vagy infix jellegű – az operátor az operandusok között

helyezkedik el.

A kifejezés kiértékelése a műveleti jelek közötti precedencia szabály alapján következik

14

Széchenyi István Egyetem

Precedencia

Operátor Megnevezés[ ] tömb indexelés

. tagelérés pl: java.lang.Math.PI

( ) zárójeles kifejezés

kif++ kif-- postfix operátorok

++kif --kif +kif –kif prefix operátorok

! ~ logikai NEM, bitenkénti NEM

new példányosítás

(típus)kif típuskényszerítés

* / % aritmetikai műveletek

+ -

<< eltolás balra, a legkisebb bit 0-t kap

>> eltolás jobbra, és balról a legmagasabb helyiértékű bit értéke kerül be

>>> eltolás jobbra, balról 0 érkezik.

15

Széchenyi István Egyetem

PrecedenciaOperátor Megnevezés

< > <= >= összehasonlítások

instaceof az objektum példánya-e az osztálynak

== != egyenlőségvizsgálatok (referencia összehasonlítás)

& bitenkénti ÉS

^ bitenkénti kizáró VAGY

| bitenkénti VAGY

&& logikai ÉS

|| logikai VAGY

? : feltételes kifejezés

= += -= *= /= %= hozzárendelés, értékadás

>>= <<= >>>= bit szintű értékadások

&= ^= |=

16

Széchenyi István Egyetem

Referenciák, példányosítás

A „példányok” - „objektumok” típusa Minden objektum, tömb, felsorolás ilyen A referencia != mutató, (kicsit több annál :)

Pl: Osztálytípus peldánynév;Teglalap t1;String szoveg1;String szoveg2 = new String(”Béla”);Teglalap t2 = new Teglalap(3,4);

A null referenciaszoveg1 = null;

17

Széchenyi István Egyetem

Hozzáférési kategóriák (adatrejtés)

nyilvános tagok (public) csomag-szintű tagok (jelöletlen) védett tagok (protected) privát tagok (private)

18

Széchenyi István Egyetem

Vezérlési szerkezetek utasítások feltételes kifejezés elágazások

if if-else if-else-if… switch

ciklusok while do-while for

19

Széchenyi István Egyetem

Feltételes kifejezésekif(<logikai kif.>) <utasítás>; (vagy utasítás blokk);

if(<felt.>) {<utasítás;>}else{<utasítás;>}

if(<felt.>) {<utasítás;>}else if(<felt.2>) {<utasítás;>}else {<utasítás;>}

switch(<argumentum>){ case <érték1>: utasítás(ok); break; case <értékn>: utasítás(ok); break; default: utasítás(ok);}

<argumentum>: megszámlálható típus, (java 7-től: String is!)

20

Széchenyi István Egyetem

Elöl- és hátultesztelő ciklusokwhile: while (<kifejezés igaz>) {

<utasítások;> }

while (i < 5) { sum += tomb[i]; i++; }

do-while: do{

<utasítások;> }while (<kifejezés igaz>)

do {i++;nameArray[i] = ””; } while (i != lastIndex);

PÉLDA demo

21

Széchenyi István Egyetem

A tömb adattípus

22

Széchenyi István Egyetem

Tömbök deklarációja

<elemtípus>[] <tömbazonosító>; <elemtípus> <tömbazonosító>[];

int cT[], d; //„d” egyetlen elemi adat!!! Alkalmazott[] dolgozok; ”int a[3];” -> fordítási hibát okoz!!

23

Széchenyi István Egyetem

Tömbök létrehozása

new <elemtípus> [méret]; iT = new int[365];dT = new double[365/12]; //30!sT = new String[4];

24

Széchenyi István Egyetem

Tömbök helyfoglalása

short [] aTomb = new short[10];for(int i=0; i < aTomb.length; i++){aTomb[i] = i*5;}

25

Széchenyi István Egyetem

Tömbök deklarálása inicializáló blokkban<elemtípus> [] <tömbazonosító> = { <érték0>, <érték1>, …};

int[] aTomb = {1, 2, 3, 7, 11 };

char[] maganh = { ’a’, ’e’, ’i’, ’o’, ’u’};

boolean[] valaszok = { true, true, false};

double[] arak = {1202.1, 33.35};

26

Széchenyi István Egyetem

Többdimenziós tömbök

<elemtípus>[][] <tömbazonosító>;

Egy 2 dimenziós tömb deklarációja:

double [][] a;

A 2 dimenziós tömb létrehozása:

a = new double[2][3];

27

Széchenyi István Egyetem

Többdimenziós tömb megadása inicializáló blokkal

<elemtípus> [][] <tömbazonosító> = { {<érték0>, <érték1>, …} , {<érték0>, <érték1>, …} , …};

int[][] honapNapjai = {

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

};

28

Széchenyi István Egyetem

Többdimenziós tömbök helyfoglalása

int[][] honapNapjai = {

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

};

29

Széchenyi István Egyetem

Többdimenziós tömbök egyéb esetei

Megadható különböző méretű, több lépésben létrehozott többdimenziós tömb is:

int[][] alsoMatrix = new int[3][]; for (int i=0; i < alsoMatrix.length; i++ ){alsoMatrix[i] = new int[i+1];for (int j=0; j < alsoMatrix[i].length; j++ ){

alsoMatrix[i][j] = 1;}

30

Széchenyi István Egyetem

Objektumokból képzett tömbökObejektumtípus [] azon = new Objektumtípus[n];

String [] honapok = new String[12];

vagy inicializátorral:

String [] honapok = {”január”, ”február”, …};

31

Széchenyi István Egyetem

Tömbök bejárása 1

for (<inic.> ; <log.kif.> ; <lépt.>){<ut.>}int i = 0 ;

for ( ; i < 10; i++) { a[i] = 0;}

for(int i = 0; i < 10; i++) { a[i] = 0;}

for(int i = 0; i < 10; ) {a[i] = 0;i++; }

for(int i=0, j=10; i<=j; i++, j--){ szamlalo++;}

for(int i=start+newList;i<=followBitSum;i+=2){utasítások ;}

32

Széchenyi István Egyetem

Tömbök bejárása 2

for (<típus> <elem> : <tömb>){}

int total = 0;int t[] = new int[10];…for(int i: t){ total += i;}

33

Széchenyi István Egyetem

Szöveges adatok kezeléseA String osztály

34

Széchenyi István Egyetem

Karakteres típusok

'a', '\t', '\b',.... – karakteres konstans char – alaptípusKarakterekből képzett tömbök:char sor[] = new char[50];Feldolgozásuk: C nyelvhez hasonlóan

35

Széchenyi István Egyetem

Sztringkezelés Egy új, önálló osztály a szöveges adatok kezelésére, együttműködés az alaptípusokkal, automatikus konverzióban használható, a String osztály használata

String szov1 = new String(”első szöveg”);

String szov2 = ”második szöveg”;

String szov3 = ”Eredmény =”+3”;

Konstans karakterláncok kezelése. Hatékony és gyors karakterlánc kezelés. Egyszerű műveletek és metódusok.

36

Széchenyi István Egyetem

Sztringkezelés

Alapműveletek: length(), charAt(i), getBytes(), split(string,delim), toCharArray(), valueOf(g,i), substring(i,db)

Csak kevés módosító művelete van: concat(g), replace(mit, mire), toLowerCase(), toUpperCase(), trim().

37

Széchenyi István Egyetem

Sztringkezelés – módosítható szöveges adatok A StringBuffer osztály

String – StringBuffer átalakítás oda-visszahozzáfűzés, beszúrás (append, insert)rövidítés, bővítésmegfordítható (reverse)karakterek, réssztringek törölhetők

38

Széchenyi István Egyetem

StringBuffer (StringBuilder)

Metódusai:capacity(), length(), charAt(i),indexOf(g), lastIndexOf(g)append(g), delete(i1, i2), insert(iPosn, g), getChars(i),setCharAt(iposn, c), substring(), replace(i1,i2,gvalue), reverse(),trimToSize(), toString(g)

39

Széchenyi István Egyetem

Szövegek darabolása – split metódus, StringTokenizerGyakori feladat a szövegek szétdarabolása fehér karakterek mentén:1. String osztály split metódus String[] eredmeny = "Egy darabolási teszt feladat".split("\\s");

for (int x=0; x<eredmeny.length; x++) System.out.println(eredmeny[x]);

(reguláris kifejezések!)2. StringTokenizer osztály

Később tárgyaljuk (a java.util csomagnál)!

StringTokenizer st = new StringTokenizer("Egy darabolási teszt"); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); }

40

Széchenyi István Egyetem

Csomagoló (burkoló) osztályok

∀ elemi típushoz ∃ egy ún. csomagoló osztály: Boolean, Character, Integer, Long, Float, Double

Az adott típusú értéket egy objektumban helyezi el, amely ezután referenciaként érhető el:

+ : összetett adatszerkezetekben hatékonyabban használhatóak, elérhetőek egyes speciális műveletek

– : helypazarló Példa:

Float f = new Float(3.14);int n = Integer.parseInt(”1234”);

41

Széchenyi István Egyetem

Csomagoló osztályok

top related