Java

Java


Java (вимовляється Джава[4]) — [об'єктно-орієнтована] [мова програмування], випущена 1995 року компанією [«Sun Microsystems»] як основний компонент платформи Java. З 2009 року мовою займається компанія [«Oracle»], яка того року придбала «Sun Microsystems». В офіційній реалізації Java-програми [компілюються] у [байт-код], який при виконанні інтерпретується [віртуальною машиною] для конкретної платформи.

«Oracle» надає компілятор Java та [віртуальну машину Java], які задовольняють специфікації [Java Community Process], під ліцензією [GNU General Public License].

Мова значно запозичила синтаксис із [C] і [C++]. Зокрема, взято за основу об'єктну модель С++, проте її модифіковано. Усунуто можливість появи деяких конфліктних ситуацій, що могли виникнути через помилки програміста та полегшено сам процес розробки об'єктно-орієнтованих програм. Ряд дій, які в С/C++ повинні здійснювати програмісти, доручено віртуальній машині. Передусім Java розроблялась як платформо-незалежна мова, тому вона має менше низькорівневих можливостей для роботи з апаратним забезпеченням, що в порівнянні, наприклад, з C++ зменшує швидкість роботи програм. За необхідності таких дій Java дозволяє викликати підпрограми, написані іншими мовами програмування.

Java вплинула на розвиток [J++], що розроблялась компанією [«Microsoft»]. Роботу над J++ було зупинено через судовий позов «Sun Microsystems», оскільки ця мова програмування була модифікацією Java. Пізніше в новій платформі «Microsoft» [.NET] випустили [J#], щоб полегшити міграцію програмістів J++ або Java на нову платформу. З часом нова мова програмування [С#] стала основною мовою платформи, перейнявши багато чого з Java. J# востаннє включався в версію [Microsoft Visual Studio] 2005. Мова сценаріїв [JavaScript] має схожу із Java назву і синтаксис, але не пов'язана із Java.

Назва

Спочатку мова називалася Oak («дуб») і розроблялася Джеймсом Гослінгом для програмування побутових електронних пристроїв. Згодом вона була перейменована в Java і стала використовуватися для написання клієнтських застосунків і серверного програмного забезпечення. Названа на честь марки кави Java, яка, в свою чергу, отримала найменування однойменного острова (Ява), тому на офіційній емблемі мови зображена чашка з паркою кавою. Існує й інша версія походження назви мови, пов'язана з алюзією на кава-машину як приклад побутового влаштування, для програмування якого спочатку мова створювалася.

Історія

Мова програмування Java зародилася в [1991] р. в лабораторіях компанії [Sun Microsystems]. Розробку проекту започаткував [Джеймс Ґослінґ], сам проект мав назву «Green» (Зелений). Створення першої робочої версії, яка мала назву «Oak» (дуб), зайняло 18 місяців. Оскільки виявилось, що ім'я Oak уже використовувалось іншою фірмою, то в результаті тривалих суперечок навколо назви нової мови з-поміж ряду запропонованих було вибрано назву Java[5], у [1995] р. мову було офіційно перейменовано[6].

Головним мотивом створення Java була потреба в мові програмування, яка б не залежала від платформи (тобто від [архітектури]) і яку можна було б використовувати для створення [програмного забезпечення], що вбудовується в різноманітні побутові електронні прилади, такі як мобільні засоби зв'язку, пристрої дистанційного керування тощо.

Досить скоро майже всі найпопулярніші тогочасні [веб-оглядачі] отримали можливість запускати «безпечні» для системи Java-аплети всередині веб-сторінок. У грудні 1998 р. Sun Microsystems випустила Java 2 (спершу під назвою J2SE 1.2), де було реалізовано декілька конфігурацій для різних типів платформ. Наприклад, J2EE призначалася для створення корпоративних [застосунків], а значно урізана J2ME для приладів з обмеженими ресурсами, таких як мобільні телефони. У 2006 році в маркетингових цілях версії J2 було перейменовано у Java EE, Java ME та Java SE відповідно.

[13 листопада] [2006] року Sun випустили більшу частину Java як вільне та відкрите програмне забезпечення згідно з умовами [GNU General Public License] (GPL). [8 травня] [2007] корпорація закінчила процес, в результаті якого всі початкові коди Java були випущенні під GPL, за винятком невеликої частини коду, на який Sun не мала авторського права.

Період становлення Java збігся у часі з розквітом міжнародної інформаційної служби [World Wide Web]. Ця обставина відіграла вирішальну роль у майбутньому Java, оскільки Web теж вимагала платформо-незалежних програм. Як наслідок, були зміщені акценти в розробці Sun з побутової електроніки на програмування для [Інтернет].

Головні концепції

Початкові цілі

У створенні мови програмування Java було чотири початкові цілі:[7]

  1. Синтаксис мови повинен бути «простим, об'єктно-орієнтовним та звичним».
  2. Реалізація має бути «безвідмовною та безпечною».
  3. Повинна зберегтися «незалежність від архітектури та переносність».
  4. Висока продуктивність виконання
  5. Мова має бути «інтерпретованою, багатонитевою, із динамічним зв'язуванням модулів».

Платформа Java

Під «незалежністю від архітектури» мається на увазі те, що програма, написана на мові Java, працюватиме на будь-якій підтримуваній апаратній чи системній платформі без змін у [початковому коді] та [перекомпіляції].

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

Стандартні бібліотеки забезпечують загальний спосіб доступу до таких платформозалежних особливостей, як обробка [графіки], [багатопотоковість] та роботу з [мережами]. У деяких версіях задля збільшення продуктивності JVM байт-код можна компілювати у машинний код до або під час виконання програми.

Основна перевага використання [байт-коду] — це портативність. Тим не менш, додаткові витрати на інтерпретацію означають, що інтерпретовані програми будуть майже завжди працювати повільніше, ніж скомпільовані у машинний код, і саме тому Java одержала репутацію «повільної»[джерело?] мови. Проте, цей розрив суттєво скоротився після введення декількох методів оптимізації у сучасних реалізаціях JVM.

Одним із таких методів є [just-in-time компіляція] (JIT, що перетворює байт-код Java у машинний під час першого запуску програми, а потім кешує його. У результаті така програма запускається і виконується швидше, ніж простий інтерпретований код, але ціною додаткових витрат на компіляцію під час виконання. Складніші віртуальні машини також використовують динамічну рекомпіляцію, яка полягає в тому, що віртуальна машина аналізує поведінку запущеної програми й вибірково рекомпілює та оптимізує певні її частини. З використанням динамічної рекомпіляції можна досягти більшого рівня оптимізації, ніж за статичної компіляції, оскільки динамічний компілятор може робити оптимізації на базі знань про довкілля періоду виконання та про [завантажені] класи. До того ж він може виявляти так звані гарячі точки ([англ.] hot spots) — частини програми, найчастіше внутрішні цикли, які займають найбільше часу при виконанні. JIT-компіляція та динамічна рекомпіляція збільшує швидкість Java-програм, не втрачаючи при цьому портативності.

Існує ще одна технологія оптимізації байткоду, широко відома як статична компіляція, або компіляція ahead-of-time (AOT). Цей метод передбачає, як і традиційні компілятори, безпосередню компіляцію у машинний код. Це забезпечує хороші показники в порівнянні з інтерпретацією, але за рахунок втрати переносності: скомпільовану таким способом програму можна запустити тільки на одній, цільовій платформі.

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

Об'єктність

На противагу C++, Java об'єктно-орієнтованіша. Всі дані і дії групуються в класи [об'єктів]. Виключенням з повної об'єктності (як скажімо в [Smalltalk]) є примітивні типи (int, float тощо). Це було свідомим рішенням проектувальників мови задля збільшення швидкості. Через це Java не вважається повністю об'єктно-орієнтовною мовою.

У Java всі об'єкти є похідними від головного об'єкта (він називається просто Object), з якого вони успадковують базову поведінку і властивості.

Хоча у [C++] вперше стало доступне множинне [успадкування], але у Java можливе тільки одинарне успадкування, завдяки чому виключається можливість конфліктів між членами класу ([методи] і [змінні]), які успадковуються від базових класів.

Безпека

У намірах проектувальників Java мала замінити [C++] — об'єктного наступника мови [C].[8] Проектувальники почали з аналізу властивостей C++, які є причиною найбільшого числа помилок, щоби створити просту, безпечну і безвідмовну мову програмування.

В Java існує система винятків або ситуацій, коли програма зустрічається з неочікуваними труднощами, наприклад:

  • операції над елементом масиву поза його межами або над порожнім елементом
  • читання з недоступного каталогу або неправильної адреси URL
  • ввід недопустимих даних користувачем

Одна з особливостей концепції [віртуальної машини] полягає в тому, що помилки (виключення) не призводять до повного краху системи. Крім того, існують інструменти, які «приєднуються» до середовища періоду виконання і кожен раз, коли сталося певне виключення, записують інформацію з пам'яті для відлагодження програми. Ці інструменти [автоматизованої обробки виключень] надають основну інформацію щодо виключень в програмах на Java.

Проте мову програмування Java не рекомендується використовувати в системах, збій в роботі яких може призвести до смерті, травм чи значних фізичних ушкоджень (наприклад, програмне забезпечення для керування атомними електростанціями, польотами, систем життєзабезпечення чи систем озброєння) через ненадійність програм, написаних на мові програмування Java.[9], пункт ліцензії Microsoft 7.7.h.


Report Page