Java бол Sun Microsystems корпорацийн бүтээсэн програмчлалын хэл
бөгөөд хамгийн анх 1995 онд түүнийг олон нийтэд танилцуулжээ. Анх
хийгдэхдээ Sun-ийн Java платформ дээр ажиллахаар байсан юм. Жава-г
бүтээхдээ С ба С++ хэлийн онцлог, бичиглэлийг хүчтэй тусган авчээ.
Гэхдээ хамгийн гол нь обьект хандалтат загвар дээр түлхүү анхаарсан ба
доод түвшний програмчлалын боломжийг бага оруулсан байна.
Java програм нь бит биш байт коднуудад хөрвүүлэгдэн ажилладаг бөгөөд
энэхүү байт коднуудыг зөвхөн Java Virtual Machine (JVM) хэмээх систем
ажиллуулдаг юм. Харин JVM нь платформ болгонд зориулагдан тусдаа
хийгдсэн байдаг тул таны бичсэн програм, код аль ч үйлдлийн систем,
платформ дээр ажиллах болж байгаа нь түүний хамгийн өвөрмөц онцлог юм.
1995 онд Sun нь Java-гийхаа гол хөрвүүлэгч, Virtual Machine,
Class-ийн гол гол сангуудыг бүтээжээ. Харин одоо дэлхий дээр хамгийн их
хүчээ авч байгаа систем болоод байгаа бөгөөд GNU (General Public
License) гэсэн үнэгүй лицензтэй болсноор түүнийг хэн дуртай нь үнэгүй
татан авч ашиглах боломжтой болжээ.
Түүх
Анх 1991 онд James Gosling Жава хэлний үндэс суурийг тавьжээ. Тэрээг
уг хэлийг өөрийн төсөлд ашиглахаар төлөвлөж байсан байна. Анх энэ хэлийг
Oak (Царс) хэмээн нэрлэж байсан бөгөөд Царс маань урган том болсоор
бусад хүмүүсийн анхаарлыг татаж эхэлсэн байна. Удалгүй нэрээ сольж,
Green болсон ба удалгүй Жава хэмээх нэрээ олсон байна. Gosling нь
анхнаасаа өнөөгийн жавагийн амжилт олж байгаа гол онцлогийг олж
анхаарсан байна. Тэр нь өөрийн гэсэн Virtual Machine-тай C/C++ хэлтэй
төсөөтэй програмчлалын хэл бүтээх байжээ.
Албан ёсоор Java 1.0 хэл нь 1995 онд бүтээгдсэн бий болсон бөгөөд
хамгийн гайхамшигтай уриа болох Write Once, Run Anywhere (Нэг удаа бич,
Хаа сайгүй ашигла) хэмээх уриаг гаргасан юм. Энэ нь жава кодыг аль ч
платформ дээр ажиллуулах боломжийг олгох зохион байгуулалттай байлаа.
Жавагийн хамгаалалтын түвшинг хэрэглэгч хүн хүссэнээрээ өөрчлөх
боломжтой ба зарим тохиолдолд сүлжээ болоод файл руу хандах эрхийг нь
цаанаас нь хаачихсан нь хүмүүст ихээр таалагдсан юм. Ийм болохоор ихэнхи
броузерууд Java Applet-г ажиллуулах боломжийг өөртөө нэмсэн байна.
Яагаад гэвэл Java Applet нь хэрэглэгч хүнд ямар ч аюул учруулахгүй
байсан байна. Өөрөөр хэлбэл програмист хүн Java Applet-ийг ашиглан
хэрэглэгчдийн компьютерт халдах боломжийг тун сайн хаажээ.
Ер нь бол Жава маш богино хугацаанд олон нийтийг олон нийтийг хамарч
эхэлсэн ба түүний хамгийн гол уриа болох бүх платформ дээр ажиллах гэсэн
нь хамгийн ихээр таалагдсан юм. Java-гийн гол хувилбар болох Java 2.0
гарснаас хойш түүний хүчин чадал, нэр хүнд огцом нэмэгджээ. Энэ үеэс
тусгай платформуудад зориулагдсан хувилбарууд гарах болсон нь програм
хөгжүүлэгчдэд бүр их эрх чөлөөг мэдрүүлсэн юм. Жишээлбэл J2EE хэмээх
багц нь том корпораци, байгууллагын түвшинд програм бичих боломжийг
олгож байсан бол J2ME нь жижиг электрон төхөөрөмжүүд, тэр дундаа гар
утсанд зориулагдсан програм бичих, харин J2SE нь жирийн компьютер дээр
ажиллах програм бичих зориулалттай байлаа. 2006 оны үеэс эхлэн Жава
програмчлалын систем нь Java EE, Java ME, Java Se гэж 3 хуваагдах болсон
юм.
1997 онд Sun Microsystems нь ISO/IEC, JTC1 гэх мэтийн стандартуудын
болзлыг хангав. Сүүлд нь Ecma байгууллага нь Java-гийн стандартуудыг
тогтоосон ба энэ бүхэн түүний хөгжилд ихээхэн хувь нэмэр оруулсан нь
гарцаагүй. Энэ үед Sun корпораци нь Java-гийхаа бүхий л код, багаж
хэрэгслүүдийг нийтэд үнэ төлбөргүйгээр дэлгэв. Энэ нь Microsoft-ыхны
хувьд байж болшгүй үзэгдэл байсан бол Sun нь алс ирээдүйг олж харжээ.
Гэхдээ Sun нь ашиг олж байсан бөгөөд жишээ нь Java Enterprise системдээ
зориулсан тусгай лиценз бүхий бүтээгдэхүүнийг борлуулах замаар орлогоо
бүрдүүлж байв.
2006 оны 11 сарын 13нд Sun нь Java-гийхаа ихэнх хэсгийг GNU лицензтэй
болгож, хэн дуртай нь татаж авч ашиглах боломжтой болгов. Харин 2007
оны 5 сарын 8нд Java-гийн нууц байсан гол гол файлууд, цөм хэсгийг хийж
дуусгасан ба тэдгээрийгээ нээлттэй эхтэй болгосон байна. Ингэснээр Жава
нь даянд дэлхийн програм хөгжүүлэгчдийн өмч болсон байна.
Философи
Үндсэн зорилго
Java-г анх хийж эхлэхээс 5 үндсэн дүрмийг баримталж ирсэн байна. Үүнд:
1. Жава бол обьект хандалтад програмчлалын арга зүйтэй.
2. Жава бол ижил програмыг хэд хэдэн үйлдлийн систем дээр ажиллуулахыг зөвшөөрнө.
3. Жава бол компьютерын сүлжээг дээд зэргээр ашиглахаас гадна бүхий л боломжуудыг хангаж өгнө.
4. Жава бол алс зайд байгаа кодыг нууцлал хамгаалалттайгаар ажиллуулах боломжтой байна.
5. Жава бол бусад объект хандатат програмчлалын хэлүүдийн бүхий л сайн талуудыг өөртөө агуулна.
Үйлдлийн системээс хамаарахгүй ажиллах нь
Зөвхөн энэ чанараас болж өдөр тутам олон зуун мянган програм
хөгжүүлэгчид Жава руу урваж байгаа нь нэгэнтээ ил болжээ. Өөрөөр хэлбэл
таны бичсэн програм бүхий л үйлдлийн систем, платформ, тоног төхөөрөмж
дээр ажиллах боломжтой гэдэг бол үнэхээр гайхамшиг.
Жава дээр бичсэн код нь ихэнх Жаватай нийцтэй үйлдлийн систем, тоног
төхөөрөмж дээр ажиллах боломжтой юм. Програмаа нэг удаа бичээд
хөрвүүлээд л авсан бол түүнийгээ хаа сайгүй ажиллуул гэсэн үг шүү дээ.
Энэхүү гайхамшигт боломжийг хэрхэн хангадаг вэ?
Java compiler буюу Жава хөрвүүлэгч нь Жава дээр бичигдсан кодыг бүтэн
машины хэл болох битэд хөрвүүлдэггүй юм байна. Харин хагас
боловсруулсан бүтээгдэхүүн гэдэг шиг хагас хөрвүүлж Java Bytecode гаргаж
авдаг ажээ. Энэ кодыг зөвхөн Java Virtual Machine ажиллуулж дөнгөдөг
юм. Тэгэхээр JVM нь ихээхэн чухал үүрэгтэй юм байна. JVM - ийг тухайн
үйлдлийн системд зориулан тусгайлан бичсэн байдаг. Тэгэхээр энэхүү VM
маань эцсийн бүтээгдэхүүн болох машин дээр ажиллах боломжтой бит кодыг
үүсгэдэг байна. Бас VM нь тоног төхөөрөмжийн график хэсэг, санах ой,
сүлжээ гэх мэт амин чухал зүйлсийг удирдана. Ихэнх тохиолдолд Java
Bytecode нь саадгүй ажилладаг боловч зарим хэт онцгой машин дээр JIT
хэмээх хөрвүүлэгч шаардлагатай болдог. Тэгэхээр таны бичсэн код тань JVM
хэмээх системээр дамжиж байж хэрэгждэгийг ойлгож авсан байх. Тэгэхээр
програмын ажиллагаа яалтчгүй удаан байхаас аргагүй болж байгаа юм.
Яагаад гэвэл C/C++ дээр бичсэн код нь шууд машины бит кодонд
хөрвүүлэгдсэн байдаг тул ажиллагааны хувьд маш хурдан байдаг бол
Жавагийн эх код нь заавал ЖаваВиртуалМашинаар дамжина. Энэ үүднээс удаан
ажилладаг гэсэн шүүмжлэлийг байнга сонсдог байсан бөгөөд энэ нь түүний
гол сул тал байлаа. Гэхдээ сүүлийн үеийн JVM нь төрөл бүрийн технологи,
аргуудыг хэрэглэснээр дутахгүй хурдан ажилладаг болоод байна. Гэхдээ
орчин үеийн тоног төхөөрөмжүүд тооцоолох чадвар нэмэгдсэнээр энэхүү
дутагдал онцын мэдэгдэхээ болиод байгаа юм.
Жишээ нь хурдыг нэмэгдүүлэх нэг арга бол Just-in-Time(JIT) буюу Яг
цагт гэсэн хөрвүүлэлтийн арга юм. Энэ бол програм яг ажиллах үед нь
ЖаваБайткодыг машины код руу хөрвүүлнэ гэсэн үг. Ингэснээр програм илүү
хурдан ажиллах бололцоотой болдог. Гэвч энэ арга нь Overhead буюу хэт
ачаалалд орох эрсдэлтэй. Иймээс сүүлийн үеийн VM-ууд динамик маягийн
холимог аргыг хэрэглэдэг болоод байна. Энэхүү динамик арга нь програмын
амин чухал хэсгүүдийг хэрхэн хөрвүүлэхээ сайтар тооцоолж чаддаг юм.
Ингэснээр эцсийн дүндээ таны бичсэн код C/C++ дээр бичсэнээс дутахгүй
хурдан ажиллаж чадах билээ.
Хурдыг нэмэгдүүлэх өөр нэг арга бол статик хөрвүүлэгч ашиглах явдал
юм. Энэ хөрвүүлэгч нь шулуухан машины эх код руу хөрвүүлчихдэг. Өөрөөр
хэлбэл Жавагийн сонгодог байткод үүсгэхгүй гэсэн үг юм. Ийм статик
хөрвүүлэгчийн жишээ гэвэл GCJ юм. Гэвч ингэх юм бол өвөрмөц онцлог
огтхон ч үр дүнгүй болчихож байгаа юм. Ийм арга хэрэглэх нь заавал Жава
дээр бичих огтхон ч шаардлагагүй болж байгаа бөгөөд C/C++ дээр бичиж
байгаагаас огтхон ч ялгаагүй болж байна.
Хөгжүүлэлт
SunMicroSystems нь JavaStandardEdition хэмээх платформын лицензийг
албан ёсоор эзэмшдэг юм байна. Энэ платформ нь MicrosoftWindows, Linux,
Solaris гэсэн үйлдлийн системүүд дээр ажиллана. Бусад платформуудад
зориулсан Жавагийн орчныг бүрдүүлэгч системүүд бас бий.
Жава брэнд нь шулуун дардан замаар явсангүй. Мэдээж Microsoft-той
зүйл бүрээр тэрсэлдэж байсан нь ойлгомжтой. Тухайлбал Java нь
Microsoft-ийн үйлдлийн систем дээр ажилладаг болохын тулд ихээхэн саадыг
давсан юм. Учир нь Microsoft нь Жава ажиллахад шаардлагатай RMI болон
JNI интерфэйсүүдийг хаачихсан юм. Мэдээж Sun-ыхан шүүхэд зарга мэдүүлсэн
бөгөөд 1997 онд 20 сая долларыг төлүүлж чаджээ. Гэсэн ч Windows нь анх
ирэхдээ Жавагүй ирдгийг бид бүгд мэднэ. Бас сүүлийн үеийн
InternerExplorer нь JavaApplet-ийг дэмждэггүй шүү дээ. Заавал 3дагч
нэмэлт Plug-In суулгах шаардлагатай болдог. Гэхдээ та дуртай үедээ
интернэтээс RunTime орчныг бий болгогч дэд системүүдийг татан авч болно.
Платформ хамаарахгүй ажилладаг чанар нь Enterprise маягийн томоохон
програм хөгжүүлэгчдэд онцгой таалагдсан юм. Яагаад гэвэл ийм чиглэлийн
лицензтэй програм хангамжууд асар өндөр үнэтэй байдаг шүү дээ. Түүнчлэн
Enterprise чиглэлийн системүүд нь олон платформ болоод янз бүрийн орчинд
ажиллах дэд системүүдээс бүрдэх шаардлагатай байдаг юм. Тэгвэл Жавад
энэ бүхэн бүгд бий. Сервэр талдаа гэвэл Жишээ нь: servlet хэмээх вэб
серверийг нэрлэж болох юм. Enterprise орчинд JavaBeans байж болно. Жава
нь нээлттэй эхтэй болохоор дэлхийн шилдэг систем хөгжүүлэгчид өөр
өөрсдийн тусгай системүүдийг бүтээж байгаа билээ. Хамгийн сүүлд
GlassFish хэмээх төсөл нэн амжилттай хэрэгжиж байгаа бөгөөд энэ нь
JavaEE орчинд үнэхээр тансаг зүйл хийж болохоор хэмжээнд ирээд байна.
Санах ойг автоматаар удирдах нь
Жавагийн үнэхээр өвөрмөц онцогийн нэг бол санах ойг автоматаар
удирдах аргачлал юм. Энэ боломжийн хүчээр програмчин хүн гар аргаар
санах ойг удирдах нүсэр ажлаас чөлөөлөгдөж байгаа билээ. Бусад хэлнүүд
дээр объектийг үүсгэхийн тулд юуны өмнө хэрэгцээт санах ойг бий болгож
авах, обьектоо хэрэглэж дууссаны дараа суллах гэх мэтийн ажиллагааг
хийдэг шүү дээ. Хэрэв програмчин хүн объектоо суллаж, устгахаа мартсан
бол санах ойн тэр хэсгийг ашигласан тэр чигээрээ үлдчихдэг. Програм
гацах, алдаа гарах мэтэд санах ойг иймэрхүү байдлаар эзлээд үлдчих
тохиолдол зөндөө гардаг. Бас санах ойг суллах гэж оролдох үедээ алдаа
гаргах, дахин дахин оролдох гэх мэтэд гацаах ноцтой алдаанууд гарах нь
түгээмэл байдаг.
Харин Жава дээр бол үүнийг сайхан шийдэж өгчээ. Автомат хог цэвэрлэгч
гэсэн систем байдаг бий. Програмчин хүн объект үүсгэлээ гэхэд түүнийг
зааж байдаг ямар нэгэн хувьсагч, эзэмшигч заавал үүсдэг. Энэ нь уг
объектыг удирдах, ашиглах үүрэгтэй. Тэгвэл объектыг устгалаа гэхэд
зөвхөн энэ объектын заагч хувьсагчийг устгачихдаг. Энэ үед заагчгүй
объект санах ойд үлдчихнэ гэсэн үг. Харин JavaGarbageCollection(Жавагийн
хог цэвэрлэгч) нь иймэрхүү эзэнгүй санах объект санах ойд байгаа
эсэхийг автоматаар шалгаж байдаг. Эзэнгүй объект тааралдвал түүнийг
санах ойгоос бүрэн чөлөөлж бүрмөсөн устгана.
Syntax буюу бичиглэл
Java-гийн хувьд syntax нь бараг тэр чигээр C++ юм. C++ -ээс ялгаатай
зүйл нь гэвэл тэрээр тэр чигтээ объект хандалтат тул энэ талд нэмэгдсэн
ганц нэг зүйлс бий. Гэхдээ мэдээж C++ -тэй усны дусал шиг адилхан байна
гэж юу байхав. Объект хандалтат тул бүх коднууд ямар нэгэн объектэд
харьяалагдах бөгөөд бүгд class дотор бичигдэнэ. Зөвхөн бодит өгөгдлийн
төрлүүд (тоон утгууд, boolean утга, тэмдэгт) л class дотор бичигдэхгүй
байж болдог нь түүний ганц зөрчил юм.
Анхны програм "Hello World!"
public class Hello{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
Энэ жава програм нь ажиллахын тулд заавал Hello.java нэртэй файлд
хадгалагдах ёстой. Яагаад гэвэл классын маань нэр Hello байна шүү дээ.
Дараа нь энэхүү кодыг Bytecode буюу хагас машины хэлэн хөрвүүлэх болно.
Бидэнд Java Compiler хэрэг болно. Хөрвүүлсний дараа Hello.class файл
үүссэн байх ёстой.
Эх сурвалж http://mn.wikipedia.org