Java платформаси. Платформа бу – ускунавий ѐки дастурий таъминот муҳити бўлиб, унда дастур ишга туширилади. Платформа сифатида кўп ҳолларда Microsoft Windows, Linux, Solaris OS ва Mac OS лар тушинилади. Java платформаси эса, бошқа кўпчилик платформалардан фақат дастурий таъминотдан иборатлиги билан ажралиб туради ва бошқа қурилмавий платформаларда ишлай олади.
Java платформаси икки таркибий қисмдан иборат:
Java вертуал машинаси;
Java дастурлаш илова интерфейси.
Java вертуал машинаси Java платформаси учун асос саналиб, турли қурилмавий платформаларда осон кўчиб ўта олади.
‖API‖ кўплаб қулайликларни таъминлаш имкониятига эга дастурий пакетлар тўплами. Дастурчи ушбу пакетлардан фойдаланилган ҳолда ўзининг дастурий таъминотини яратади.
7.3 – расм. API ва Java вертуал машинаси дастурни асос қурилмадан ажратиб туради
Бу тизим ўз навбатида жараѐнни секинлашишига сабаб бўлади. Аммо ҳозирда вертуал машиналар соҳасидаги ривожланишлар буларни камайтиради.
Java хавфсизлик фреймворки.Стандарт Java платформаси (компилятор, байткод текширувчиси, реал вақт тизими) қуйидаги қоидалар асосида лойихалаштирилган:1
класс азоларини бошқаришда (private, protected, ва public калит сўзлар орқали) қатий риоя этади;
дастур ўзбошимчалик билан хотира манзилларига сакрамайди
(кўрсатикичлар мавжуд эмас);
final деб эълон қилинган катталиклар ўзгартирилмайди;
ўзгрувчиларни эълон қилинмасдан олдин фойдаланиш мумкин эмас;
масивларни бошқаришда дастлаб уларни чегаралари текширилади;
бир турдаги объэктлар ўзбошимчалик билан бошқа турга ўтказилиши мумкин эмас.
Бундан ташқари бошқаришни назоратлашда махсус усуллардан фойдаланади.
Имтиѐзли кодлар.Javaнинг рухсатни бошқариш тизими ресурслардан рухсат этилмаган тарзда фойдаланишни ҳимоялайди. Бунинг содда усули эса уларга имтиѐзлар бериш. Фақат ресурсдан фойдаланиш имкониятига эга фойдаланувчигина (дастур) ундан фойдаланиш мумкин. Имтиѐзга эга бўлмаган дастур эса тизим томонидан блокланади. Имтиѐзга эга блоклар ўз навбатида тизимни хавфсиз ишлашига, рухсат этилмаган амалларни бажарамасликка катта ѐрдам беради. Ҳар бир имтиѐзга эга кодлар ўзи билан тизимга таваккалчиликни олиб келиши мумкин. Шуннинг учун имтиѐзга эга кодлардан имкони борича камроқ фойдаланиш тавсия этилади.
Имтиѐзга эга кодларда хатолик бўлганда, бу катта хавфсизлик муаммосини олиб келиши мумкин. Шунинг учун имтиѐзга эга кодлардан тизимда фойдаланишдан олдин, улар аудитланиши шарт. Шунинг учун имтиѐзга эга кодлар ичидаги ҳар бир ўзгарувчи текширилиши шарт. Бунга мисол қилиб қуйидаги кодни киритиш мумкин:
public static String getProp(final String name)
{ return (String) AccessController.doPrivileged(new
PrivilegedAction()
{ public Object run()
{
// 'name' is tainted, beware!
Return System.getProperty(name);
} // end method
} // end constructor
}
Юқоридаги мисолда public тоифасидаги метод берилган бўлиб, name имтиѐз текширилмасдан туриб берилмоқда. Бу эса ўз навбатида ихтиѐрий фойдаланувчи томонидан бажарилиши мумкинлигини билдиради. Бундан ташқари қуйидагилар тавсия этилади:
final public static бўлмаган типлардан фойдаланишни чеклаш;
имкони борича методлар кўламини камайтириш (имкони борича камроқ public мақомига эга ўзгарувчи ва методлардан фойдаланиш);
махфий маълумотларга эга бўлган ички ўзгарувчан объектларга ҳеч қачон цилка қайтармаслик;