ჯავა (პროგრამირების ენა)
ვიკიპედიიდან
ჯავა (Java) -- მულტიფუნქციური და მულტიპლატფორმული თანამედროვე პროგრამირების ენა. ჯავაზე პროგრამების წერა შესაძლებელია ყველა ძირითადი ოპერაციული სისტემისა და აპარატული უზრუნველყოფისათვის. ჯავაზე შეიძლება დაიწეროს ზოგადი დანიშნულების დესკტოპ აპლიკაციები, ვებ აპლიკაციები და აპლიკაციები სპეციალური ელექტრონული აპარატურისთვის (მოდემები, მარშრუტიზატორები, მობილური ტელეფონები, პრინტერები და ა.შ.).
ჯავას პოპულარობის რამდენიმე მიზეზი განაპირობებს:
- მულტიპლატფორმულობა
- ენის მარტივი, მოხდენილი და კარგად ჩამოყალიბებული სინტაქსი (განსაკუთრებით C++ -თან შედარებით).
- ქსელური პროგრამირების (მათ შორის ვებ პროგრამირების) სრულყოფილი საშუალებები ინტუიტური, გასაგები ენის ინტერფეისით.
- მძლავრი საშუალებები ობიექტზე ორიენტირებული პროგრამირებისთვის.
- კოდის უმდიდრესი ბიბლიოთეკები. მათ შორის ბევრი - ღია კოდის (open source) ლიცენზიით.
- მეხსიერების ავტომატური მენეჯერი (Garbage Collector)
- მაღალი წარმადობა
- მულტიპროცესულობა (threading).
ჯავა შეიქმნა კომპანია Sun Microsystems-ში და მისი ავტორია ჯეიმს გოსლინგი (James Gosling). ჯავას პირველი ოფიციალური ვერსია გამოვიდა 1995 წელს. ჯავას საფუძვლად დაედო ისეთი ცნობილი, ობიექტზე ორიენტირებული პროგრამირების ენები, როგორებიცაა: Eiffel, SmallTalk, Objective C და Cedar/Mesa. ახალი ენის შექმნის მთავარი მიზანი იყო შეექმნათ პროგრამირების ენა რომლის საშუალებითაც მარტივი იქნებოდა ქსელური, დისტრიბუტირებული აპლიკაციების წერა ჰეტეროგენულ გარემოში.
ჯავას დიზაინში, შეძლებისდაგვარად, ჩაიდო ორი მთავარი პრინციპი: სიმარტივე და ობიექტზე ორიენტირებულობა. ჯავა არის ერთ-ერთი ყველაზე ”სუფთად” ობიექტზე ორიენტირებული ენა. განსხვავებით C++სგან, პითონისაგან (თუმცა, ამ უკანასკნელში, 2.2 ვერსიის შემდეგ, კლასები და ტიპები უნიფიცირებულია, იხ. აქ )და ბევრი სხვა თანამედროვე ენისგან, ჯავაში არ არის არაობიექტზეორიენტირებული კოდის მხარდაჭერა. ისევე, როგორც, მაგალითად, რუბიში, კოდის ნებისმიერი ნაწილი წარმოადგენს კლასს.
ჯავა არის მულტიპლატფორმული ენა. ჯავაზე დაწერილი და დაკომპილირებული პროგრამა ერთნაირად ეშვება, პრაქტიკულად, ნებისმიერ პლატფორმაზე. ჯავას ეს თვისება მიიღწევა ჯავას ვირტუალური მანქანის (Java Virtual Machine, JVM) საშუალებით. ჯავაზე დაკომპილირებული პროგრამა სრულდება ვირტუალურ, საშუეალედო ”მანქანაზე”, რომელსაც გადაყავას ჯავას ინსტრუქციები უკვე იმ კონკრეტული ოპერაციული სისტემის და პროცესორის ”ენაზე”, რომელ პლატფორმაზეც არის გაშვებული პროგრამა. ჯავას ვირტუალური მანქანები არსებობს პრაქტიკულად ყველა სტანდარტული აპარატურისა და ოპერაციული სისტემისთვის. მობილური აპარატების უმრავლესობაშიც კი მოსალოდნელია რომ ეყენოს ჯვმ-ის შემცირებული, მობილური ვერსია.
ჯავაში ჩადებულია სტანდარტული, მულტიპლატფორმული გრაფიკული API რომელიც საშუალებას იძლევა მასზე დაკომპილირებული პროგრამები ერთნაირად, უპრობლემოდ გაეშვას Windows MFC, Linux KDE/Gnome ან თუნდაც Mac Cocoa გარემოში. ენის სინტაქსში არ არის პლატფორმაზე დამოკიდებული კონსტრუქციები. ასე მაგალითად, სხვა ბევრი ენისგან განსხვავებით ჯავაში მკაცრად არის განსაზღვრული მარტივი ტიპის მონაცემების (int, double, long, float) ზომა. იგივე C++სგან განსხვავებით ამ მონაცემთა ტიპების ზომა მეხსიერებაში არ არის დამოკიდებული იმ პლატფორმაზე რომელზეც გაეშვება პროგრამა.
ჯავაში ინტეგრირებულია მეხსიერების ავტომატური მენეჯერი. მონაცემთა (მარიტივი ტიპები, ობიექტები) შექმნის და გამოყენების შემდეგ პროგრამისტს არ ჭირდება მათი განადგურება, მეხსიერების გამოსანთავისუფლებლად, პროგრამული კოდით. ვირტუალური მანქანა თავად ზრუნავს ამაზე სპეციალური მენეჯერის Garbage Collector-ის საშუალებით. შედეგად, პროგრამისტი განთავისუფლებულია ტრივიალური და დამღლელი, ზედმეტი კოდის წერისგან და დაცულია მეხსიერების გაჟონვის (Memory Leaks, შემთხვევით, გაუთავისუფლებლად დატოვებული ობიექტების შედეგად) შეცდომებისგან.
ჯავას ბოლო ვერსიები გამოირჩევა მაღალი წარმადობით. ხშირად ჯავა პროგრამის წარმადობა უტოლდება C/C++ზე დაწერილი პროგრამების წარმადობას და ბევრად აღემატება ისეთი სკრიპტინგ ენების წარმადობას როგორებიცაა PHP, TCL, Perl და სხვა.
ჯავაში ჩადებულია მდიდარი და გამოსაყენებლად მარტივი მულტიპროცესული (threading) ბიბლიოთეკა. ჯავაში ძალიან ადვილია ისეთი პროგრამის დაწერა, რომლის სხვადასხვა ნაწილები ცალ-ცალკე პროცესებში პარალელურად სრულდება, რაც ზოგადად მნიშვნელოვნად ზრდის პროგრამის წარმადობას და ზოგიერთი ამოცანისთვის პრინციპულად მნიშვნელოვანიცაა. არსებობს ამოცანათა დიდი ჯგუფი, რომელთა გადაწყვეტისათვის პარალელური შესრულების რეჟიმის არსებობა აუცილებელია.