Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
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
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
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
Á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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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