Защо J A V A ?

Тази статия е нещо като продължение на статията за интранет-а, обаче се отнася само за Java, и е на доста по-високо ниво. Целта на статията е да се обясни по-подробно за Java на хора които само са чували за `нея` (но не повече)


Общо за Java:

Java (чете се "джава") е програмен език. Java се появи преди известно време. По-точно преди 3 години. "Авторите" на Java са американската фирма Sun. Тук е интересно да се спомене, че както повечето "творения" на Sun, Java не блести с "нещо" много голямо на пръв поглед. Например, въпреки че сървърите и работните станции на Sun никога не са били най-мощните за момента (като на Digital или HP например), то те са доста предпочитани и използувани.

По принцип Java е интерпретатор. Тук незапознатите веднага ще кажат "Това е крачка назад". Но Java не интерпретира p-код (като Basic например). Java интерпретира машинен код. Този машинен код обаче не е за никоя конкретна машина, той е за JVM (Виртуална машина на Java). JVM е измислен "супер-risk" стеков процесор, със само няколко регистъра и с много малко инструкции. (Преди известно време Sun представи "реален" JVM - процесора Java_Chip. Той обаче не е предназначен за компютри, а за TV, радио, офис техника, кредитни карти и т.н.). Java машинния код може да се компилира до машинен код за конкретна машина за части от секундата. Това е така, защото "компилацията" се свежда до размяна на едни машинни инструкции с други. Тези компилатори се наричат JIT (Just in time).

JVM може да се намери като отделна програма (java.exe), като част от друга програма (Netscape Fast Track Web Server), в Web Browser (Netscape Navigator, Ms Internet Explorer, IBM Web Explorer, Sun Hot Java), в някой OS (Linux, OS/2)

Sun обещават да създадат истински компилатор за Sun-Spark и 80x86 до една година, но това не е чак толкова важно.

К'во "печелим"?

Java e многоплатформен
той транслира JVM кода. Това е възможно за много процесори и операционни системи. Java код, разработен на PC например, ще тръгне на всяка друга. Това може да не е важно за някой офис приложения, но е много важно за всички Интернет/Интранет приложения. Един потребител може да започне със Windows 95, след време да премине на Windows NT или OS/2, а след като и тази операционна система не му задоволи изискванията, той може да премине на CISK/UNIX или RISK/UNIX. Във всичкото това време той ще може да ползува един и същи програмен продукт. Друг пример може да е потребител, който има различна техника, от Windows 95 и Mac/OS, през Windows NT, UNIX до големи enterprice UNIX сървъри. Този потребител би могъл да работи с един и същ програмен продукт на всичките тези машини.

Java прилича на C++
"Истинският програмист" на C++ може да премина на Java за броени дни. Напоследък все по-често се появява софтуер за автоматичен трансфер между C++ и Java. За съжаление той е полезен за трансфер само на алгоритмите, но транслирания код, радко може да се компилира директно:))
Според автора който все още предпочита Object Pascal пред C++, в Java са премахнати всички неща които са спорни във C++, и са добавени нови възможности, които никога не са били възможни във C++ (като лесни за работа String, тип boolean, предаване на параметри по адрес и др.) Тук е момента да се каже, че в Java има и нереализирани неща (като липсата на възможност за наследяване на constructor-ите на обектите, липсата на destructor-и на обектите, невъзможността за директно сравняване на String-ове, някой доста странни операции като
Date d = new Date();
System.out.print(d);

и др.)

Java е наистина обектно-ориентиран
Тук е важно да се отбележи, че за разлика от привидно обектно ориентираните езици като Power Boulder, New Era, Arc View Avenue и "др. от този сорт", Java е истински обектно ориентиран език, със всички възможности като наследяване, полиморфизъм и т.н. Недостатък е липсата на destructor, но тя се компенсира до някъде от gc (garbage collector, събирач на боклуци). Също е много важно да се отбележи, че Java "идва" с много класове, не само за визуален интерфейс (като Power Builder, Delphi или Visul C++ и др.), но и такива за паралелни процеси, достъп до бази данни, работа със данни в паметта и мн.др. Ползуването на тези класове е от особено значение, когато предаваме своята програма по Internet, т.к. тези класове са при клиента и мрежовия трафик се намалява значително. Това спомага и за сигурността на данните.
Много е важно да се отбележи, че Java използува собствените си класове (т.е. ние може да ги пренапишем) за неща като зареждане на системните класове от диска (а защо не от мрежата?), зареждане на картини GIF и JPEG (а защо не и някакъв наш формат?) и т.н.

K'во "губим" с Java?

Java е бавен
Java e бавен, даже понякога отчайващо бавен. Не трябва да се забравя обаче, че той е напълно 100% преносим.

Понякога Java не е достатъчно стабилен
Докато въпросът за скоростта не е толкова важен стабилността на дадена програма е нещо от първостепенно значение. Java е идеален за програми които работят известно време (до няколко часа), но все още не е достатъчно стабилен за сървър приложения, които трябва да работят дни, месеци даже години без спиране или изключване. Авторът лично е изпитал това когато е писал WWW сървър на Java. Въпросният WWW сървър (с "кодово" име `Octtarion`) е достатъчно бърз, но недостатъчно надежден. Въпросният сървър `забива` след 4-5 часа работа при максимално натоварване, когато оперативната памет е вече доста фрагментирана и "garbage collector", не успява да си 'свърши работата'. Ако се направи анализ обаче тези 4-5 часа биха се равнявали на 4-5 месеца в един не чак толкова натоварен Web сайт.

Относно сървърния софтуер трябва да се спомене, че Sun Microsystems са разработили "JAVA Web Server", но той се предлага на доста висока цена за такъв (около $400 - $500). Преди известно време беше разработен и безплатен SQL сървър базиран също на Java с `open source`.

Къде да използваме Java

Java може да се използува доста добре за множество цели (авторът няма пред вид 'шаренийте' по web страниците), като едни от най-добрите му качества са преносимостта и лесната разбираемост на програмния код написан с Java. Той наистина е бавен, но това много лесно може да се компенсира по различни начини.

Авторът лично смята, че Java не е подходящ за сървърен, а по-скоро за клиентски софтуер, и то при случаите на хетерогенна мрежа (какъвто е и Internet) или когато операционната система на клиента не е известна. Другото голямо приложение на Java е Java_Chip и по-точно монтирането му в кредини карти, телевизори и друга техника за бита.


Николай Михайлов