33
Imperatív és procedurális programozás a Javában Kozsik Tamás [email protected] http://kto.web.elte.hu/ Eötvös Loránd Tudományegyetem Programozási Nyelvek és Fordítóprogramok Tanszék 2008. Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 1 / 30

Imperatív és procedurális programozás a Javában

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Imperatív és procedurális programozás a Javában

Imperatív és procedurális programozás a Javában

Kozsik Tamás

[email protected]://kto.web.elte.hu/

Eötvös Loránd TudományegyetemProgramozási Nyelvek és Fordítóprogramok Tanszék

2008.

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 1 / 30

Page 2: Imperatív és procedurális programozás a Javában

Tartalom

1 Imperatív programozásTípusokUtasításokKifejezések

2 Procedurális programozás

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 2 / 30

Page 3: Imperatív és procedurális programozás a Javában

Tartalom

1 Imperatív programozásTípusokUtasításokKifejezések

2 Procedurális programozás

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 2 / 30

Page 4: Imperatív és procedurális programozás a Javában

Áttekintés

Olcsó programfejlesztésBiztonságra való törekvés

SafetySecurity

MemóriakezelésSzintaktikai szabályok – megörökölte a C betegségeitStatikus szemantikai szabályokDinamikus szemantikai szabályokhttp://java.sun.com/

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 3 / 30

Page 5: Imperatív és procedurális programozás a Javában

Imperatív programozás Típusok

Típusok

Primitív típusokReferencia típusok

Osztályok (konkrét és absztrakt)Tömb típusokFelsorolási típusok

InterfészekAnnotációk

Változók típusa:

csak primitív vagy referencia

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 4 / 30

Page 6: Imperatív és procedurális programozás a Javában

Imperatív programozás Típusok

Primitív típusok

8 db beépített típusbooleancharbyte, short, int, longfloat, double

Rögzített ábrázolásNincs elojel nélküli egész típusA char típus 2 bájtos UnicodeA logikai típus önálló (vezérlési szerk., relációk)Altípusosság; konverzió: automatikusan csak bovíto (!)Osztályosítás: csomagoló osztályokkal

Auto-(un)boxingGyatra aritmetikaBigDecimal, BigIntegerstrictfp, IEEE 754

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 5 / 30

Page 7: Imperatív és procedurális programozás a Javában

Imperatív programozás Típusok

Referenciák

A vermen csak primitív típusú adatok és referenciákAz összetett adatok mindig dinamikusakFelszabadító utasítás nincsAutomatikus szemétgyujtésDestruktor – finalize

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 6 / 30

Page 8: Imperatív és procedurális programozás a Javában

Imperatív programozás Típusok

Tömbök

ReferenciákNem lehet deklarációval létrehozniMinden tömb a heap-en van

Speciális osztályok, öröklodésBiztonságos használat

length attribútumFutási ideju indexellenorzés

Használatint[] t = new int[100];for( int i = 0; i<t.length; ++i ){ t[i] = i; }

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 7 / 30

Page 9: Imperatív és procedurális programozás a Javában

Imperatív programozás Típusok

Szövegek

Nincs char*Elsodlegesen a String osztály

Pl. idézojelekKonkatenáció: túlterhelt +

Emellett StringBuffer és StringBuilderRitkán char[]

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 8 / 30

Page 10: Imperatív és procedurális programozás a Javában

Imperatív programozás Típusok

Felsorolási típusok

A legegyszerubb esetenum Color { RED, GREEN, BLUE, YELLOW }

Nem int

Speciális osztályokDefiniálhatók hozzájuk mezok és muveletek

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 9 / 30

Page 11: Imperatív és procedurális programozás a Javában

Imperatív programozás Típusok

Hiányosságok

Alprogram típusPrimitív típusok és referenciák összeférhetetlenségePrimitívbol és tömbbol származtatás hiányaFixpontos, moduló

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 10 / 30

Page 12: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Vezérlési szerkezetek

Elágazás: if és switch–caseCiklus: for, while és do–while

Iterálás adatszerkezeten: enhanced for-loop

Blokk utasításNem strukturált lehetoségek

Iterálás tömbönint[] t = new int[100]; ...int sum = 0;for( int elem: t ){ sum += elem; }

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 11 / 30

Page 13: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Strukturált vezérlési szerkezetek

if és while esetén: logikai típusú feltétel

Többágú elágazás tördeléseif( <feltétel-1> ){

<utasítások>} else if( <feltétel-2> ){

<utasítások>} else {

<utasítások>}

switch esetén diszkrét vagy felsorolási típusú diszkriminánsA minták fordítási ideju konstansokbreak!!!

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 12 / 30

Page 14: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

A switch és a break

switch (billentyu) {case ’w’: y++; break;case ’z’: y--; break;case ’a’: x--; break;case ’s’: x++; break;default : System.out.println("Hiba!");

}

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 13 / 30

Page 15: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Nem strukturált vezérlés

Címkézheto break és continuereturn

Nincs goto

Hatékonyság növeléseint i=0, j=0;külso: for (; i<10; ++i)for (j=0; j<10; ++j)if (tömb[i][j] == 0)break külso;

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 14 / 30

Page 16: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Deklaráció utasítások

Típus-, alprogram- és változódeklarációkKonvenció: azonosítók neveAzonosítók lexikális szabályai

Unicode_ és $

Egy deklarációban több változóInicializációMódosítószavakA léptetos ciklusnak lehet lokális változója, de a többi utasításnaknem!Konvenció: használjuk a kapcsos zárójeleket, tördelésTípuskifejezésekhez nem deklarálható név

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 15 / 30

Page 17: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Kifejezés, mint utasítás

Kifejezések értéke figyelmen kívül hagyhatóMellékhatásÉrtékadás(ok)Függvényhívás

void metódusKivételekSorozás

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 16 / 30

Page 18: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Blokkok

Egyszerusített hatóköri/láthatósági szabályokEgymásba ágyazott blokkok lokális változóiElfedés: csak tagok esetébenLokális változók inicializálása

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 17 / 30

Page 19: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Megjegyzések

Egysoros és többsorosDokumentációs megjegyzés

/** és */ közöttKódegység elé írhatójavadocTipikusan HTML, de programozható (doclet)Kiegészíto információk (@return, @param, @see stb.)

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 18 / 30

Page 20: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Problémák

Utasítások és kifejezések keveredéseA szintaxis bénasága, túlzott tömörségint sum = 0, i = 1;while( i<10 );

sum += i++;

switch utasítás nem intuitív

Csellengo elseif (a==1)if (b==2)c = 1;

elsec = 2;

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 19 / 30

Page 21: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Problémák

Utasítások és kifejezések keveredéseA szintaxis bénasága, túlzott tömörségint sum = 0, i = 1;while( i<10 );

sum += i++;

switch utasítás nem intuitív

Csellengo elseif (a==1) if (a==1)if (b==2) if (b==2)c = 1; c = 1;

else elsec = 2; c = 2;

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 19 / 30

Page 22: Imperatív és procedurális programozás a Javában

Imperatív programozás Utasítások

Problémák

Utasítások és kifejezések keveredéseA szintaxis bénasága, túlzott tömörségint sum = 0, i = 1;while( i<10 );

sum += i++;

switch utasítás nem intuitív

Csellengo elseif (a==1) if (a==1) if (a==1){if (b==2) if (b==2) if (b==2)c = 1; c = 1; c = 1;

else else } elsec = 2; c = 2; c = 2;

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 19 / 30

Page 23: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Kifejezések

Felépítés:literálváltozóoperátormetódushívás (függvény)zárójelektömbindexelés, szelekció

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 20 / 30

Page 24: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Kiértékelési sorrend

Teljesen definiáltOperátorok precedenciájaOperátorok asszociativitásaZárójelezésArgumentumok kiértékelési sorrendje

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 21 / 30

Page 25: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Operátorok

ArításFixitásPrecedencia, asszociativitásTúlterhelt operátorokOperátorokat nem terhelhet túl a programozóÚj operátorokat sem definiálhat

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 22 / 30

Page 26: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Java operátorok

C-bol megszokottakAritmetikai, relációs, értékadó, bitmanipulálóElágazóÉrtékadások, sorozás, hatékonyság

Van instanceof, valamint >>> és >>>=A + operátor jelentéseiLusta és mohó logikai operátorok

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 23 / 30

Page 27: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Literálok

Egész literálokLebegopontos literálokKarakterliterálokStringliterálokLogikai típusértékek: true, falsenull

class-literál

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 24 / 30

Page 28: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Egész literálok

Alapból int típusúDecimálisHexadecimálisOktálisNincs bináris vagy egyéb!

long típusúshort vagy byte típusúAutomatikus szukíto konverzió

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 25 / 30

Page 29: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Lebegopontos literálok

Alapból double típusúfloat típusúVan 0.0 és -0.0Konstansok, pl: Float.POSITIVE_INFINITY, Double.NaN

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 26 / 30

Page 30: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Szöktetés

Karakter- és stringliterálokbanA \ karakterrelSpeciális karakterek

Tabulátor, kocsivissza, újsor, lapdobás...Rep-jelIdézojelek

Karakterek Unicode megadása\u000a és \u000d kizárva!

ASCII karakterek oktális megadása

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 27 / 30

Page 31: Imperatív és procedurális programozás a Javában

Imperatív programozás Kifejezések

Konstansok

final változókprimitív típusreferencia

Üres konstansFordítási ideju konstansFeltételes fordítás

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 28 / 30

Page 32: Imperatív és procedurális programozás a Javában

Procedurális programozás

Programegységek

TípusdefiníciókMezok (példány- és osztály-)Metódusok (példány- és osztály-)Típusdefiníciók (példány- és osztály-)KonstruktorokInicializátor blokkok (példány- és osztály-)

Nincsenek globális alprogramokPéldány- vagy osztálymetódusokProcedurális programozás imitálása

Nincsenek globális változók sem!Csomagok

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 29 / 30

Page 33: Imperatív és procedurális programozás a Javában

Procedurális programozás

Alprogramok

Függvény és eljárás összemosása: metódusVisszatérési értékVerem, aktivációs rekord, automatikus változókParaméterátadás (call-by-value, call-by-sharing)Nem adható formális paraméternek alapértelmezett értékTúlterhelésInline-osításFelüldefiniálás, dinamikus kötésHívási lehetoség: invokevirtual, invokestatic, invokespecialVáltozó hosszúságú paraméterlista

printf

Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 30 / 30