Java
Pagrindinės Java teigiamybės
Apžvelkime Java kalbos pagrindines teigiamybes ir trūkumus, lygindami
ją su kol kas populiariausia programavimo kalba C++.
Paprastumas
1) Java neturi adresų (rodyklių) aritmetikos. Java dirba tik su tais
objektais, su kuriais ryšys palaikomas per kintamuosius. Taigi Java
kintamasis savaime nėra objektas, bet tik nuoroda į objektą. Todėl
užrašas (sakinys)
String s;
reiškia, kad s yra nuoroda (kelias), bet ne pats objektas (tolesnėje
programoje panaudoję nuorodą s, vykdymo metu gautumėte klaidą, jog
bandote operuoti su „tuščia” vieta). Todėl prieš naudojant objektą,
būtina jį sukurti. Tam naudojamas specialus sakinys new:
String s = new String(„abcd“);
(String tipo objektą galima sukurti ir tiesiogiai:String s = „abcd“;
2) Neturi goto sakinio (išskyrus praplėstus break ir continue sakinius).
3) Neleidžia metodo vardo perduoti parametrų sąrašu (skirtumas nuo C++),
bet leidžia perduoti objektą (o šis viduje turi metodų).
4) Neturi struct (įrašo) tipo. Bet tai čia atitinka class.
5) Neturi union ir bitinių laukų (bitiniai laukai, kaip grynai aparatinė
funkcija, nesiderina su Java principu „nepriklausanti nuo kompiuterio
architektūros”).
6) Java neleidžia turėti metodų su kintamu parametrų sąrašu. Tai
nesiderina su principu “griežtai tipizuota”, kadangi neįmanoma
patikrinti busimųjų tipų. Tačiau tai leidžia metodų perkrovimo
galimybė (metodų vardai vienodi, bet skiriasi antraštės).
7) Neturi enum, typedef ir #define. Tai atitinka static final tipas.
8) Neturi void parametrų sąraše.
9) Java leidžia aprašyti kintamuosius bet kurioje kodo vietoje (tai
leidžia ir C++).
10) Java neturi globaliųjų kintamųjų (panašiai kaip static tipo
kintamasis, galiojantis visiems tos klasės objektams).
11) Neturi daugialypio paveldėjimo (C++ tai turi). Iš dalies tai
pasiekiama interfeisais.
12) Automatiškai atlaisvina nebenaudojamą atmintį (šiukšlių rinktuvas –
Garbage Collection). Šis šiukšlių rinktuvas kartkarčiais kviečiamas
automatiškai, tačiau programuotojas gali jį išsikviesti ir pats:
System.gc();
Objektų saugyklos
Pagrindinės informacijos saugyklos yra:
1. Registrai. Jie yra procesoriaus viduje, todėl tai pats sparčiausias
išrinkimo tipas. Deja, registrų skaičius labai ribotas. Jais pagal
poreikius manipuliuoja tik pats kompiliatorius.
2. Stekas. Yra RAM’e (tiesioginės kreipties atmintyje). Procesorius saugo
nuorodą į šį steką, ir, vaikštant “aukštyn”/”žemyn”, informacija įrašoma
ir paimama. Gana greitas būdas (antras po registrų). Šiaip jau Java pačių
objektų steke nesaugo, nes reikėtų nuolat perskaičiuoti objektų dydžius,
perstumiant steko nuorodą „aukštyn”/„žemyn”. C++ tai galima.
3. Krūva (heap – „netvarkusis masyvas”). Yra RAM’e. Tai ir yra ta vieta,
kur saugomi visi Java programos objektai. Pagrindinis privalumas tas, kad
kompiliatoriui nereikia žinoti kiek kiekvienas objektas užima vietos. Su
new sakiniu sukurtas objektas vykdymo metu automatiškai pateks į „krūvą”.
Aišku, operacijos sulėtės.
4. Statinė atmintis. Ji taip pat yra RAM’e, tik specialiai tam skirtoje
vietoje. „Krūvoje” esantys tuo momentu nebereikalingi objektai gali būti
šiukšlių rinktuvo automatiškai pašalinti, o statiniai objektų elementai
išlieka iki programos darbo pabaigos. Tokie elementai sukuriami naudojant
atributą static.
Paprastieji tipai. Vis dėlto elementariems aritmetiniems veiksmams
paspartinti Java turi ir paprastų duomenų tipų (byte, int, double, …).
Tai nėra objektai, todėl jiems sukurti nereikia new sakinio. Jų įvedimo
priežastis ta, kad tokiems elementariems objektams sukurti ir padėti į
„krūvą” būtų sugaištama per daug laiko. Paprastųjų tipų kintamieji saugomi
steke.
(Kiekvienam procesui Java turi atskirą steką.
Nepriklausymas nuo asmeninio kompiuterio (PC) architektūros
Daugumos programavimo kalbų galutinis produktas yra vykdomasis (.exe
tipo) modulis, susidedantis iš konkrečių instrukcijų PC procesoriui.
Tačiau Windows sistemos dažniausiai naudoja Intel firmos procesorius,
Macintosh sistema naudoja Motorola arba PowerPC procesorius ir t.t. Be to,
kiekviena sistema (Windows,Unix, Linux) naudoja savas papildomas
bibliotekas. Todėl klasikinė schema
Kodas(Kompiliatorius(Redaktorius(vykdomasis failas (*.exe)(PC
turi vieną gana didelį trūkumą – vienos sistemos produktas dažnai neveikia
kitoje sistemoje.
Šio trūkumo neturi programa, parašyta Java kalba. Esmė ta, kad čia
negeneruojamos instrukcijos procesoriui, bet programos tekstas (kodas)
kompiliuojamas į specialų objektinį kodą, vadinamą baitkodu. Šį kodą toliau
skaito ir vykdo Java abstrakti virtualioji mašina (JVM), kurią turi
kiekviena kompiuterinė sistema. Taigi turime tokią schemą:
Kodas ( Kompiliatorius ( bait-kodas ( JVM
Java abstrakti virtualioji mašina JVM
JVM – tai speciali Sun Microsystems firmos programa
(bait-kodo
interpretatorius), parašyta kiekvienai operacinei sistemai atskirai. Tai
JRE (Java Runtime Environment). Ji itraukta į populiariausių naršyklių
sudėtį (Microsoft Internet Explorer, Netscape Navigator, Opera), į JDK
(Java Development Kit ). Ją galima įdiegti ir atskirai.
JVM jau gaminama ir atskiromis mikroshemomis. Taigi ją galima įdėti ne
tik į PC, bet ir į TV stotis, o ateityje ir į buitinius prietaisus.
Daugiaprocesė
Programa tuo pat metu gali vykdyti keletą procesų (thread).
Daugiaprocesiškumas yra organizuotas objektų lygmeniu – kiekvienas procesas
yra atskiras objektas. Panaudojant synchronized modifikatorių resursai
„užrakinami” (būtų blogai, jei keli procesai vienu metu rašytų informaciją
į tą patį failą).
Programų saugumas
Saugumas užtikrinamas keliais lygiais. Tai ypač svarbu apletams