«Ջավա»–ի խմբագրումների տարբերություն
Content deleted Content added
չ փոխարինվեց: 5թ → 5 թ (7) oգտվելով ԱՎԲ |
չ clean up, փոխարինվեց: → (29), ): → )։ (12) oգտվելով ԱՎԲ |
||
Տող 12.
}}
'''Java'''-ն պլատֆորմից անկախ, ընդհանուր նշանակության [[ծրագրավորման լեզու]] է, որը զուգահեռ, կլասսների վրա հիմնված, օբյեկտ – կողմնորոշված և հատուկ մշակված է, որպեսզի ունենա ինչքան հնարավոր է շատ իրագործումներ։
== Պատմությունը ==
Ծրագրավորման մեջ C++ ծրագրավորման լեզվի հեղափոխությունից հետո քչերն էին սպասում ավելի բեկումնային հեղափոխության, որը կատարեց Java-ն։ Կանխատեսելով շարժական էլեկտրոնային սարքերի լայն տարածումը, Sun-ը 1991–ին հիմնեց այդ ուղղությամբ զբաղվող ներքին կորպորատիվ հետազոտական նախագիծ, որը ստացավ ''Green'' անվանումը։ Նախագծի արդյունքում ստեղծվեց C/C++ վրա հիմնված ծրագրավորման լեզու, որին նրա ստեղծող Ջեյմս Գոսլինգը անվանեց Oak (կաղնի) ի պատիվ այն կաղնու, որը երևում էր նրա աշխատասենյակից։ Հետագայում հայտնաբերվեց, որ արդեն գոյություն ունի ծրագրավորման լեզու Oak անունով և [[Sun]]-ը նրան տվեց նոր անուն Java, որով էլ այն հետագայում ներկայացվեց հասարակությանը։ Այն անվանվել է ի պատիվ Java սուրճի տեսակի (որը այն ժամանակ շատ տարածված էր ծրագրավորողների շրջանում), որն էլ իր հերթին իր անվանումը ստացել է Ինդոնեզական Յավա կղզուց։ Sun-ի սպասված շարժական էլեկտրոնային սարքերի արագ առաջընթացը չէր ստացվում և նրա հրապարակումը ուշանում էր։ ՄիաԺամանակ [[համացանց]]ը սկսել էր մեծ զարգացում ապրել և 1993 թվականին Sun-ի աշխատակիցները սկսեցին Java-ն համալրել համացանցում դինամիկ էջեր ստեղծելու ունակություններով։ Sun Microsystems-ը ներկայացրեց Java-ի առաջին տարբերակը՝ Java 1.0 1995 թ.-ին։
2006 թ. նոյեմբերի 13-ին Sun–ը
Java ծրագրերը աշխատում են ամենուրեք,
== Տեխնիկական նկարագրություն==
Տող 29.
Java-ի տեղափոխելությունը պայմանավորված է նրանով, որ կոմպիլացվելուց հետո կոդն անմիջապես չի դառնում միջավայրին համապատասխան մեքենայական կոդ, այլ վերածվում է միջանկյալ կոդի, որը կոչվում է Java բայթկոդ։ Վերջինս աշխատեցվում է Java վիրտուալ մեքենայի կողմից, որն արդեն հատուկ է տվյալ միջավայրին։ Սովորաբար բոլոր օգտագործողների սարքերում էլ տեղադրված է Java Runtime Environment-ը (JRE), որն էլ ապահովում է [[Java վիրտուալ մեքենա]]յի առկայությունը։ Վերջինիս աշխատանքը ներկայացված է նկարում։ Ինչպես երևում է նկարից՝ Java վիրտուալ մեքենան նախատեսված է ոչ միայն Java-ի, այլ նաև այլ ծրագրավորման լեզուների համար (նկարում ներկայացված է [[Python]]-ը)։ Սովորաբար Java-ով գրված ծրագրերը [[C++]]-ով գրվածների հեմեմատ ունեն ավելի դանդաղ աշխատելու և շատ հիշողություն օգտագործելու համբավ։ Բայց Java-ի [[Just-in-time (JIT)]] կոմպիլացայի ներդրումից հետո ծրագրերի արագագործությունը զգալիորեն մեծացել է։ JIT-ի դերը կայանում է նրանում, որ այն դինամիկ ձևով Java բայթկոդը թարգմանում է մեքենայական կոդի, որն էլ միանգամից կատարվում է։
Ծրագրերի կատարման այս մեթոդի առավելությունը կայանում է նրանում, որ բայթկոդը
Մյուս կարևոր առանձնահատկությունը
Վիրտուակ մեքենայի գլխավոր թերությունը ցածր արագագործությունն է համարվում։ Որոշ կատարելագործումենր բարձրացրել Java ծրագրերի կատարման արագությունը։
*Բայթկոդի հեռարձակումը մեքենայական կոդի դինամիկ ձևով ծրագրի կատարման ժամանակ (JIT տեխնոլոգիա, [[Just-in-time (JIT)]])
*Պլատֆորմ – կողմնորոշված կոդի լայն օգտագործում (native կոդ) ստանդարտ գրադարաններում։
*Սարքերի միջոցներ, որոնք ապահովում են բայթկոդի արագացված մշակում (օրինակ Jazelle տեխնոլոգիան, որը կիրառվում է որոշ ARM պրոցեսսորների համար)
Ըստ http://shootout.alioth.debian.org կայքի,
Վիրտուալ մեքենայի կոնցեպցիան մեծ ազդեցություն թողեց, և շատ ծրագրավորման լեզուների համար ստեղծվեցին համապատասխամ տեխնոլոգիաներ։ Այդ գաղափարը նաև իրագործվել է CLI ինֆաստրուկտուրայի մեջ, որը հանդիսանում է Microsoft ընկերության .NET պլատֆորմի հիմքը։
Java-ն օգտագործում է [[աղբահավաք]]՝ ({{lang-en|[https://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29 Garbage collector - GC]}}) հիշողության ավտոմատ կազմակերպման համար։ Երբ ծրագրի աշխատանքի ժամանակ որևէ օբյեկտ չի օգտագործվում, այսինքն չկա նրա վրա ցուցող որևէ հղում, ապա աղբահավաքը ջնջում է այն հիշողությունից։ Չնայած այս ավտոմատացված կազմակերպմանը՝ [[հիշողության արտահոսք]]ի ({{lang-en|[https://en.wikipedia.org/wiki/Memory_leak Memory leak]}}) վտանգը դեռ մնում է։ Օրինակ հիշողության արտահոսք կարող է լինել, եթե ոչ պետքական օբյեկտի վրա ցուցող [[հղում]] ({{lang-en|[https://en.wikipedia.org/wiki/Reference_%28computer_science%29 Refernce]}}) մնա։ Ի տարբերություն [[C++]]-ի Java-ն հնարավորություն չի տալիս [[ցուցիչ]]ների ({{lang-en|[https://en.wikipedia.org/wiki/Pointer_%28computer_programming%29 Pointer]}}) հետ աշխատելու, ձեռքով հիշողությունն ազատելու, [[խելացի ցուցիչ]]ներ ({{lang-en|[https://en.wikipedia.org/wiki/Smart_pointer Smart pointer]}}) օգտագործելու և այլն։ Աղբահավաքը կարող է աշխատել ցանկացած պահի, իդեալական դեպքում այն աշխատում է համեմատաբար պարապուրդի մեջ եղած ժամանակ։ Երաշխավորված է, որ այն կաշխատի, երբ բավարար հիշողություն չլինի նոր օբյեկտ ստեղծելիս։ Սա թույլ է տալիս աղբահավաքին տեղափոխել օբյեկտների հասցեները և տալիս է տիպերի ապահովություն։ Ինչպես C++-ում և որոշ օբյեկտ-կողմնորոշված ծրագրավորման լեզեւներում, Java - ում պրիմիտիվ տիպերը(int, double, boolean, char) պահվում են դաշտերում (օբյեկտների համար), ստեկում ({{lang-en|[https://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29 Stack]}}) (ֆունկցիաների համար), այդ պատճառով դրանց համար աղբահավաք չի աշխատում։ Սա Java - ի ստեղծողների գիտակցված որոշումն է, որի նպատակն է բարձրացնել արագագործությունը։
Java-ն ունի մի քանի տեսակի աղբահավաքներ։ Java - ով գրված ծրագրերի 90% -ի համար Concurrent Mark-Sweep ({{lang-en|[https://en.wikipedia.org/wiki/Concurrent_mark_sweep_collector Concurrent mark sweep collector]}})
== Java տարբերակների պատմությունը ==
Տող 77.
Java 5 սպեցիֆիկացիան թողարկվեց 2004 թ. սեպտեմբերին։ Այս տարբերակում լեզու մտցրվեցին մի շարք կարևոր հնարավորություններ։
* Թվարկվող տեսակ (enum)
** Java-ում enum-ը լիարժեք կլասս է, այսինքն ունի կոնստրուկտոր, դաշտեր, մեթոդներ, այդ թվում թաքուն և աբստրակտ։
** Այն կարող է իրագործել ինտերֆեյսներ։
**Այն ունի ներդրված մեթոդներ, որոնք թույլ են տալիս ստանալ արժեքը ըստ անվան, վերափոխումը
* Մետատվյաներ (metadata, annotations), թույլ է տալիս ավելացնել կոդի մեջ մետատվյալներ, որոնք չեն ազդում կոդի կատարման վրա, բայց թույլ են տալիս ստանալ տարբեր տվյալներ կոդի և նրա կատարման մասին։
* Ընդհանուր ծրագրավորման միջոցներ (generics), Eiffel-ին համարժեք տեխնոլոգիա (սկզբունքորեն տարբերվում է C++-ի կաղապարներից), որը թույլ է տալիս ստեղծել կլասսներ և մեթոդներ ցանկացած տեսակի դաշտերով և պարամետրերով։ Այս մեխանիզմով իրականացվել են Java-յի ստանդարտ գրադարանի հավաքածուների նոր տարբերակները։
* Անորոշ թվով պսրամետրեր ունեցող մեթոդներ։
* Autoboxing/Unboxing, Java-յի սկալյար տիպերի և դրանց համապատասխան տիպ-վրապպերների միջև ավտոմատ փոխակերպումը (օրինակ int - Integer)
* Ստատիկ մեթոդների և փոփոխականների ներմուծում։
* Լեզվի մեջ ավելացան օբյեկտների հավաքածուի վրայով ցիկլերը (իտերատոր, foreach)
=== Java SE7 ===
Տող 92.
* Վիրտուալ մեքենան սկսեց աջակցել դինամիկ լեզուները։
* 64 բիթանոց սեղմված ցուցիչներ։
* Զուգահեռ իրականացման համար միջոցներ (JSR 166)
* Մուտք - ելք նոր գրադարանը, որը լավացնում էր պլատֆորմ-անկախությունը։
* XRender Java 2D-ի համար, որը լավացնում էր ժամանակակից GPU-ների կառավարման հնարավորություննրը։
Տող 117.
Java պլատֆորմները
*Java SE – Java Standart Edition, Java-ի հիմնական հրատարակությունը, պարունակում է կոմպիլյատորներ. API, JRE (Java Runtime Enviroment)
*Java EE – Java Enterprise Edition, պարունակում է
*Java ME – Java Micro Edition, ստեղծվել է, որպեսզի օգտագործվի այնպիսի սարքերում, որոնք սահմանափակ հաշվարկային հզորություն ունեն, օրինակ բջջային հեռախոսները, պլանշետները, ներդրված համակարգերը։
*Java FX - տեխնոլոգիա, որը հանդիսանում է Java-ի էվոլյուցիան Rich Client Platform – ում։ Նախատեսված է, ազմակերպությունների ծրագրային ապահովման և բիզնես ծրագրերի գրաֆիական ինտերֆեյսի ստեղծման համար։
*Java Card – տեխնոլոգիան ներկայացնում է անվտանգ միջավայր այն ծրագրերի համար, որոնք աշխատում են սմարթ քարտերի և այլ սարքերի վրա, որոնք ունեն
== Շարահյուսությունը ==
Java-ի սինտակսիսը մեծ մասամբ համընկնում է C++ -ի սինտակսիսի հետ։ Ի տարբերություն C++ -ի, որը կոմբինացրել է ստրուկտուրային, ընդհանուր և օբյեկտ-կողմնորոշված ծրագրավորումը, Java-ն կառուցված է որպես օբյեկտ-կողմնորոշված լեզու։ Ամբողջ կոդը գրվում է կլասսների ներսում, և ցանկացած տվյալ, բացառությամբ պրիմիտիվ տիպերի, գտնվում է օբյեկտի մեջ։ Java -ն կրկնում է C++ -ի որոշ հայտնի ասպեկտները (օրինակ printf() ֆունկցիան)։
Ի տարբերություն C++-ի,
Java-ն մեկնաբանությունների (comments) սինտակսիսը համարժեք է C++-ին։ Կա երեք տեսակի մեկնաբանություն։ Մեկ տողի համար (<code>//</code>), մի քանի տողերի համար՝ սկսվում է <code>/*</code> - ով և վերջանում <code>*/</code> -ով, և Javadoc ({{lang-en|[https://en.wikipedia.org/wiki/Javadoc Javadoc]}})տեսակը, որը սկսվում է <code>/**</code>-ով, և վերջանում <code>*/</code> -ով։
Տող 186.
</source>
Ֆալլերը պետք է անվանվեն այն public կլասսի անունով, որը նրանք պարունակում են։ Օրինակ <code>HelloWorldApp.java</code>։ Այն սկզբում կոմպիլացվելու է բայթկոդի, որի արդյունքում ստացվելու է <code>HelloWorldApp.class</code> ֆայլը։ Դրանից հետո միայն այն կկատարվի։ Java ֆայլը կարող է պարունակել միայն մեկ <code>public</code> կլասս, բայց այն կարող է պարունակել բազմաթիվ կլասսներ <code>public</code>-ից
<code>public</code> սպեցիֆիկատորը նշանակում է, որ ֆունկցիան կարող է կանչվել այլ կլասսներից կամ որ կլասսը կարող է օգտագործվել հիերարխիայից դուրս այլ կլասսներում։
<code>static</code> սպեցիֆիկատորը սահմանում է ստատիկ ֆունկցիա, որը կապված է միայն կլասսին, և ոչ թե նրա օբյեկտների հետ։ Միայն ստատիկ ֆունկցիաները կարող են կանչվել առանց օբյեկտի հասցեի։ Ստատիկ ֆունկցիաները չեն կարող դիմել կլասսի այն անդամներին, որոնք ստատիկ չեն։
Տող 213.
Java լեզուն ակտիվ օգտագործվում է [[Android]] օպերացիոն համակարգի վրա տեղափոխելի ծրագրեր գրելու համար։ Ծրագրերը կոմպիլացվում են ոչ ստանդարտ բայթկոդ, որպեսզի այն կարողանա օգտագործվել Dalvik վիրտուալ մեքենայում։ Այսպիսի կոմպիլյացիայի համար օգտագործվում է լրացուցիչ գործիք՝ Software Development Kit, մշակված [[Google]] ընկերության կողմից։
Ծրագրերի իրագործումը կարելի է կատարել հետևյալ միջավայրերում՝
2014 թ․-ի դեկտեմբերի 8-ին Google-ը ճանաչեց Android Studio-ն նախընտրելի միջավայր Android ՕՀ-ւմ նախագծելու համար"
Տող 232.
=== Պրիմիտիվ տիպերը ===
Java լեզվում կան ընդամենը 8 պրիմիտիվ տիպեր՝ boolean, byte, char, short, int, long, float, double. Գոյություն ունի նաև 9-րդ տիպ՝ void, բայց այս տիպի փոփոխականներ և դաշտեր հայտարարելը կոդում արգելված է։ Այ օգտագործվում է կլասսներում և մեթոդներում, որպես ոչինչ չվերադարձնող արժեք։
Տիպերի երկարությունը և արժեքների միջակայքը որոշվում են ստանդարտով, ոչ թե իրագործմամբ։ Char-ը երկու բայթ է զբաղեցնում, լոկալիզացիայի հարմարության համար։ Երբ մշակվում էր ստանդարտը, արդեն գոյություն ուներ Unicode-32-ը, բայց ոչ Unicode-64-ը։ Քանի որ չկար մեկ բայթանոց փոփոխական, ավելացրեցին նոր տիպ՝ byte, և ի տարբերություն ուրիշ ծրագրավորման լեզուների, այն առանց նշանի չէ։ Float և double տիպերը կարող են ունենալ հատուկ արժեքներ ՝ <math>+\infty</math>, <math>-\infty</math> и «ոչ թիվ» ([[NaN]])
{| class="wikitable"
Տող 280.
Օբյեկտային են համարվում բոլոր տեսակի փոփոխականները, բացի պրիմիտիվ տիպերի փոփոխականներից։ Java-ում ակնհայտ ցուցիչներ չկան։ Ի տարբերություն C, C++ և այլ լեզուների, հղումների օգտագործումը java-ում ունի բարձր անվտագույան շեմ, քանի որ դրված են խիստ սահմանափակումներ դրանց օգտագործման վրա՝
* Չի կարելի փոխակերպել պրիմիտիվ տեսակի օբյեկտը ցուցիչի կամ հղումի, և հակառակը։
* Ցուցիչների հետ չի կարելի կատարել հանրահաշվական գործողություններ (++, --, +, -)
* Տիպերի փոխակերպումը խիստ կառավարվում է։ Բացառությամբ զանգվածների վրա հղումներից, թույլատրված փոխակերպել հղումները միայն ժառանգվող տիպի և նրա ծնողի միջև, ընդ որում
* Java-ում չկա հասցե վերցնելու օպերատոր (&) և օբյեկտի վերցնումը ըստ հասցեի (*)
Այսպիսով կառավարել հիշողությունը ֆիզիկական մակարդակի վրա անհնար է։ Նաև կարելի է ստուգել, արդյոք ցուցիչ հղված է null-ի վրա։
=== Հղումների կրկնօրինակումը ===
Տող 294.
<code>clone()</code> մեթոդը պահանջում է, որպեսզի կլասսը իրագործի <code>Cloneable</code> ինտերֆեյսը։
=== Փոփոխականների սկզբնաարժեքավորումը ===
Բոլոր փոփոխականները պահանջում են սկզբնաարժեքավորում, կամ ավտոմատ լցվում 0-ներով (0, null, զրոների զանգված)
=== Աղբի հավաքումը ===
|