logo
Вступ до спец

7.6. Революція на ім’я Java

Починаючи з кінця 1995 року, весь комп’ютерний світ був захлеснутий лавиною рекламних повідомлень, серйозних публікацій та просто чуток навколо модної новинки – мови програмування Java, яка була запропонована компанією Sun Microsystems. Згідно із запевненням розробників, через декілька років Java повинна була витіснити всі існуючі мови програмування на всіх типах комп’ютерів – від вбудованих у побутові прилади мікропроцесорів до суперсистем. Пройшло декілька років, пил улігся, тепер можна спокійно обговорити феномен Java, його переваги та недоліки.

Мова Java зародилася як частина проекту створення передового програмного забезпечення для різних побутових приладів. Реалізація проекту була почата на мові С++, але незабаром виникла низка проблем, якнайкращим засобом боротьби з якими була зміна самого інструменту – мови програмування. Звідси й існує помилкова думка, що мова Java відбулася від мови програмування С++. Стало зрозумілим, що необхідна незалежна мова програмування, яка дозволить створювати програми, які не доводилося б компілювати окремо для кожної архітектури і можна було б використовувати на різних процесорах під різними операційними системами.

Народженню мови Java передувала досить цікава історія. У 1990 році розробник ПЗ компанії Sun Microsystems Патрік Ноутон(Patrick Naughton) зрозумів, що йому набридло підтримувати сотні різних інтерфейсів програм, які використовувались у компанії, і повідомив виконавчого директора Sun Microsystems та свого другаСкотта Макнілі(Scott McNealy) про свій намір перейти працювати у компанію NEXT. Макнілі, у свою чергу, попросив Ноутона скласти список причин своєї незадоволеності.

Ноутон, хоча і не розраховував на те, що хтось зверне увагу на його лист, все ж таки виклав свої претензії, нещадно розкритикувавши недоліки Sun Microsystems, зокрема, архітектуру програмного забезпечення NEWS, що розроблялося на той момент. На здивування Ноутона, його лист здобув успіх: він був розісланий усім провідним інженерам Sun Microsystems, які не забарилися відгукнутися та висловити гарячу підтримку своєму колезі і схвалити його погляди на ситуацію в Sun Microsystems. Звернення викликало схвалення й у вищого керівництва компанії, а саме у Біла Джоя(Bill Joy), засновника Sun Microsystems, таДжеймса Гослінга(James Gosling), начальника Ноутона.

Того дня, коли Ноутон повинен був піти з компанії, було ухвалено рішення про створення команди провідних розробників з тим, щоб вони робили що завгодно, але створили щось незвичайне. Команда з шести осіб приступила до розробки нової об’єктно-орієнтованої мови програмування, яка була названа Oak(дуб), на честь дерева, що росло під вікном Гослінга.

Незабаром компанія Sun Microsystems перетворила команду Green, що працювала над секретним проектом під назвою “Green”, у компанію First Person. Цей невеликий проект мав на меті створення абсолютно нової платформи для розробки програмного забезпечення, яка вирішувала б багато з існуючих проблем. Після низки невдач компанія анонсувала броузер Mosaic – так народився World Wide Web, з якого почався бурхливий розвиток Internet.

Ноутон запропонував використовувати Oak у створенні Internet-додатків. Так Oak став самостійним продуктом. Незабаром був написаний Oak-компілятор та Oak-браузер "WebRunner". У 1995 році компанія Sun Microsystems ухвалила рішення оголосити про новий продукт, перейменувавши його вJava(єдине розумне пояснення назві – любов програмістів до кави). Коли Java опинилася у руках Internet, стало необхідним запускати Java-аплети – невеликі програми, що завантажуються через Internet. WebRunner був перейменований уHotJava, а компанія Netscape встала на підтримку Java-продуктів.

Мова повинна була втілювати наступні якості: простоту та потужність, безпеку, об’єктну орієнтованість, надійність, інтерактивність, архітектурну незалежність, можливість інтерпретації, високу продуктивність та легкість у вивченні. Навіть якщо ви ніколи не напишете жодного рядка на мові Java, знати про її можливості вельми корисно, оскільки саме перераховані вище властивості мови додають динаміку сторінкам Всесвітньої павутини.

Створення мови Java – це дійсно один з найзначніших кроків уперед в області розробки середовищ програмування за останні 20 років. Мова HTML (Hypertext Markup Language – мова розмітки гіпертексту) була необхідна для статичного розміщення сторінок у “Всесвітній павутині” WWW. Мова Java була потрібна для якісного стрибка при створенні інтерактивних продуктів для мережі Internet.

Вивчаючи Java, ви будете приємно здивовані тим, що її синтаксис близький до синтаксису мови C++. Успадкувавши найкраще від мови програмування C++, мова Java при цьому позбавилася від деяких недоліків C++, внаслідок чого на ній стало простіше програмувати. У цій мові немає, наприклад, покажчиків, які складні у використанні та потенційно можуть бути причиною доступу програми до області пам’яті, яка їй не належить. Немає множинного успадкування та шаблонів, хоча функціональні можливості мови Java від цього не постраждали. Якщо ви вмієте програмувати на C++, для вас не складе особливих труднощів вивчити мову Java.

Чому треба вивчати нову мову програмування Java? Якщо відповісти на це питання стисло, то тому, що вона спеціально орієнтована на найсучасніші технології, які пов’язані з мережею Internet. Популярність Internet, яка постійно зростає, а особливо, серверів Web, створює для програмістів нові можливості для реалізації своїх здібностей.

Величезна перевага Java полягає у тому, що на цій мові можна створювати додатки, які здатні працювати на різних платформах. До мережі Internet підключені комп’ютери найрізноманітніших типів – Pentium РС, Macintosh, робочі станції Sun і таке інше. Навіть у рамках комп’ютерів, що створені на базі процесорів Intel, існує декілька платформ, наприклад, Microsoft Windows версії 3.1, Windows 98, Windows NT, Windows ХР. Тим часом, створюючи сервер Web у мережі Internet, ви напевно б хотіли, щоб ним могли користуватися якомога більша кількість людей. Серверомназивають потужний («головний») постійно працюючий комп’ютер разом із програмним забезпеченням, який надає користувачам певні Internet-послуги. У цьому випадку допоможуть додатки Java, які призначені для роботи на різних платформах та не залежні від конкретного типу процесора та операційної системи.

Програми, які складені на мові програмування Java, можна розділити за їхнім призначенням на дві великі групи.

До першої групи відносяться додатки Java, призначені для автономної роботи під управлінням спеціальної інтерпретуючої машини Java (віртуальна машина Java). Реалізації цієї машини створені для всіх основних комп’ютерних платформ.

Друга група – це так звані аплети (applets). Аплети є різновидом додатків Java, які інтерпретуються віртуальною машиною Java, вбудованою практично в усі сучасні браузери.

Додатки, що відносяться до першої групи (ми будемо називати їх просто додатками Java), – це звичайні автономні програми. Оскільки вони не містять машинного коду і працюють під управлінням спеціального інтерпретатора, їх продуктивність помітно нижче, ніж у звичайних програм, які створені, наприклад, на мові програмування C++. Проте не слід забувати, що програми Java без перетрансляції здатні працювати на будь-якій платформі, що само по собі має велике значення у плані розробок для Internet.

Аплети Java вбудовуються у документи HTML, що зберігаються на сервері Web. За допомогою аплетів можна зробити сторінки сервера Web динамічними та інтерактивними, тобто забезпечувати діалог між користувачем та Java-додатком за допомогою елементів управління (меню, вікон діалогу тощо). Аплети дозволяють виконувати складну локальну обробку даних, які надходять від сервера Web або введених користувачем з клавіатури. З міркувань безпеки аплети (на відміну від звичайних додатків Java) не мають ніякого доступу до файлової системи локального комп’ютера. Всі дані для обробки вони можуть отримати тільки від сервера Web.

Для підвищення продуктивності додатків Java у сучасних браузерах використовується так звана JIT-компіляція (Just-In-Time compilation – компіляція "по ходу справи", "на льоту"). Коли будь-яка інструкція (або набір інструкцій) Java-процессора виконується вперше, відбувається компіляція відповідних байт-кодів із збереженням скомпільованих кодів у спеціальному буфері. При подальшому виклику тієї ж інструкції замість її інтерпретації відбувається виклик з буфера скомпільованих кодів. Тому інтерпретація відбувається лише при першому виклику інструкції. В результаті загальна швидкість виконання Java-аплета збільшується у кілька разів.

Складні оптимізуючі JIT-компілятори діють ще більш вишукано. Оскільки зазвичай компіляція інструкції йде набагато довше у порівнянні з інтерпретацією цієї інструкції, час її виконання вперше за наявності JIT-компіляциї може помітно відрізнятися у гірший бік у порівнянні з чистою інтерпретацією. Тому буває вигіднішим спочатку запустити процес інтерпретації, а паралельно йому у фоновому режимі компілювати інструкцію. Лише після закінчення процесу компіляції при подальших викликах інструкції виконуватиметься її скомпільований код. До цього усі її виклики інтерпретуватимуться. Розроблена Sun віртуальна машина HotSpot здійснює JIT-компіляцию лише тих ділянок байт-кодів, які критичні до часу виконання програми. При цьому по ходу роботи програми відбувається оптимізація скомпільованого коду. Кодом у даному випадку є внутрішнє уявлення програми у вигляді внутрішніх інструкцій.

Мова Java є об’єктно-орієнтованою і постачається разом з достатньо об’ємною бібліотекою класів. Так само як і бібліотеки класів систем розробки додатків на мові C++, бібліотеки класів Java значно спрощують розробку додатків, представляючи у розпорядження програміста могутні засоби вирішення поширених завдань. Тому програміст може більше уваги приділяти вирішенню прикладних завдань, а не таких, як, наприклад, організація динамічних масивів, взаємодія з операційною системою або реалізація елементів призначеного для користувача інтерфейсу.

Загальновідомо, що мова програмування Java є мобільною. Це треба розуміти у тому сенсі, що існує принципова можливість перенесення програм Java на різні платформи.

Проте слід зазначити, що створення додатків, що дійсно працюють на різних платформах, – непросте завдання. На жаль, справа не обмежується необхідністю перекомпіляції початкового тексту програми для роботи в іншому середовищі. Багато проблем виникає через несумісність програмних інтерфейсів різних операційних систем та графічних оболонок, які реалізовують призначений для користувача інтерфейс.

Програма на мові Java компілюється у спеціальний модуль, що складається з команд віртуального процесора Java. Такий модуль містить байт-код(інструкції для абстрактного Java-процессора у вигляді байтових послідовностей команд цього процесора та даних до них) та призначений для виконання Java-інтерпретатором. На сьогодні вже створені перші моделі фізичного процесора, здатного виконувати цей байт-код, проте інтерпретатори Java є на всіх основних комп’ютерних платформах. Зрозуміло, що на кожній платформі використовується свій інтерпретатор, або, точніше кажучи, свій віртуальний процесор Java.

Ще одна проблема, що виникає при перенесенні програм, які створені, наприклад, на мові програмування Сі, полягає у тому, що розмір області пам’яті, яка потрібна для змінних стандартних типів, який є різний на різних платформах. Наприклад, в середовищі операційної системи Windows версії 3.1 змінна типу int у програмі, яка складена на мові С, займає 16 бітів. У середовищі Windows NT цей розмір складає 32 біти. Очевидно, що важко складати програму, не знаючи точно, скільки є біт у слові. При перенесенні програм на платформи з іншою розрядністю можуть виникати помилки, які важко виявити. У мові Java всі базові типи даних мають фіксовану розрядність, яка не залежить від платформи. Тому програмісти завжди знають розміри змінних у своїй програмі.

На даний час технологія Java ще не зовсім стала, йдуть суперечки про єдиний стандарт, при цьому суперечності доходять до рівня судового розгляду. Протягом кількох років тягнулася судова суперечка між корпорацією Microsoft, що спробувала «поліпшити» мову стосовно свого браузеру Internet Explorer, та фірмою Sun, що відстоює свої права на «чисту» Java. Microsoft цю суперечку програла, проте з поразкою не змирилася і як хід у відповідь виступила у 2000 році за ініціативою .NET (читається «дот нет» ", DotNet – у перекладі з англійського "точка Net"). Кінцева мета цієї ініціативи така ж, як у технології Java – забезпечити єдине середовище для компонентного мережного програмування, коли готові модулі (компоненти), реалізовані в різних місцях, можуть завантажуватися по мережі і виконуватися на різних апаратних платформах. При цьому .NET йде далі: передбачається можливість використання не єдиної мови Java, а й інших мов, зокрема розробленої і активно просувної Microsoft перспективної мови C#.

Мабуть, найближчими роками ми зможемо стати свідками «битви гігантів» на полі технологій мережного програмування. Хто б в ній не переміг, у виграші опиняться програмісти, одержуючи інструмент зручної, швидкої та надійної розробки своїх додатків.