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
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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
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
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
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