→ Пошук по сайту       Увійти / Зареєструватися
Знання Програмування на Java Навчальний курс по JAVA

Історія розвитку Java

 Java

Браузери

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

За допомогою Java web-сторінку можна наповнити не лише звичайним текстом, але і динамічними елементами - простими відеовставками типу обертового земної кулі або Дьюка, що махає рукою (хоча нині такі завдання добре вирішує анімований GIF, а в більш складних випадках - Macromedia Flash); інтерактивними елементами типу обертання моделі хімічної молекули; бігучими рядками, що містять, наприклад, біржові індекси або прогноз погоди.

Але насправді Java - це більше, ніж прикраса HTML. Оскільки це повноцінна мова програмування, за його допомогою можна створити складний користувальницький інтерфейс. У самій першій версії Java Development Kit (засіб розробки на Java) був приклад аплету, що представляє найпростіші електронні таблиці. Незабаром з'явився текстовий редактор, що дозволяє змінювати стиль і колір тексту. Звичайно, були ігрові аплети, навчальні, моделюючі фізичні і інші системи. Наприклад, клієнт, який зробив замовлення в магазині або відправив посилку поштою, отримував можливість стежити за доставкою через Internet.

На відміну від звичайних програм, аплети отримали "у спадок" важливу властивість HTML-сторінок. Прочитавши сьогодні зміст сторінки новин, клієнт не зберігає її на своєму комп'ютері, а на наступний день читає оновлений зміст. Точно так само, скачавши аплет і попрацювавши з ним, можна видалити його, а наступного разу отримати більш нову версію. Таким чином, програми з'являються і зникають з машини клієнта без жодного зусилля, не потрібні ні спеціальні знання, ні дії, і при цьому автоматично підтримуються найостанніші версії.

З іншого боку, користувач вже не прив'язаний до свого основного робочого місця, в будь-якому Internet-кафе можна відкрити потрібну web-сторінку і почати роботу зі звичними програмами. І все це без будь-яких побоювань підчепити вірус. Розробників дуже зацікавило, що їхні програми через день після випуску можуть побачити користувачі всього світу, незалежно від того, який комп'ютер, операційну систему і браузер вони використовують. Хоча браузер на стороні клієнта повинен підтримувати Java, як уже говорилося, користувачам пропонувався HotJava, доступний на будь-якій платформі. Самий популярний у той час браузер Netscape Navigator, починаючи з версії 2.0, також підтримував Java. Однак сьогодні, як відомо, найпоширеніший браузер - Microsoft Internet Explorer.

Компанія Microsoft, домігшись приголомшуючого успіху в галузі програмного забезпечення для персональних комп'ютерів, стала (і в цілому залишається до цих пір) основним конкурентом в цій області для Sun, IBM, Netscape і інших. Якщо на початку дев'яностих основні зусилля Microsoft були спрямовані на операційну систему Windows і офісні додатки (MS Office), то в середині десятиліття стало очевидно, що пора серйозно зайнятися Internet. На початку 1995 року Білл Гейтс опублікував "плани оголошення війни" Netscape з метою зайняти таке ж монопольне становище в WWW, як і в області операційних систем для персональних комп'ютерів. І коли незабаром Netscape підписала ліцензійну угоду з Sun, Microsoft опинилася у важкій ситуації.

Internet Explorer 2.0 не викликав ентузіазму і ніхто не вірив, що він може скласти хоч скільки-небудь помітну конкуренцію Netscape Navigator. А це означає, що нова версія IE 3.0 повинна уміти все, що вміє тільки що вийшов NN 2.0. Тому 7 грудня 1995 Microsoft оголошує про свій намір ліцензувати Java, а в березні 1996 року угоду про ліцензування було підписано. Найбільша компанія з виробництва програмного забезпечення була змушена підтримувати свого, можливо, самого небезпечного конкурента.

Зараз ми маємо можливість озирнутися назад і оцінити наслідки подій, що відбулися. Тепер вже очевидно, що Microsoft повністю вдалося здійснити свій план. Якщо Netscape Navigator 3.x ще зберігав лідируюче становище, то Netscape 4.x вже почав поступатися Internet Explorer 4.x. Версія NN 5.x так і не вийшла, а NN 6.x став черговим розчаруванням для колишніх прихильників "Навігатора". Зараз з'явилася версія 7.0, однак вона не займає значної частки ринку, в той час як Internet Explorer 5.0, 5.5 та 6.0 використовують більше 95% користувачів.

Цікаво, що багато хто запекло звинувачував Microsoft в тому, що компанія боролася з Netscape "неринковими" засобами. Однак порівняємо дії конкурентів. Серед багатьох кроків, вжитих Microsoft, була і підтримка незалежної організації W3C, яка керувала розробкою нового стандарту HTML 3. Спочатку компанія Netscape вважалася локомотивом індустрії, оскільки вона постійно розвивала і модернізувала HTML, який спочатку взагалі-то не призначався для графічного оформлення тексту. Але Microsoft, вклавши велику кількість коштів і людських ресурсів, змогла затвердити стандарти, які відрізнялися від уже реалізованих в Netscape Navigator, причому відмінності часом були суто формальними. У результаті виявилося, що сторінки, створені відповідно до W3C-специфікаціями, відображалися в Navigator спотворено. Важливо й те, що NN необхідно було викачувати (нехай і безкоштовно) і встановлювати вручну, а IE швидко став вбудованим компонентом Windows, готовим до використання (і від якого, до речі, позбутися не можна було принципово).

А яким чином Netscape зміг домогтися лідируючого положення? Свого часу подібними ж методами компанія намагалася (успішно, в кінці кінців) витіснити з ринку NCSA Mosaic. Тоді HTML був не особливо багатий цікавими можливостями, а тому інновації, підтримувані Navigator, одразу привертали увагу розробників і користувачів. Однак такі сторінки некоректно відображалися в Mosaic, що змушувало його користувачів задуматися про перехід до продуктів Netscape.

У результаті у зв'язку із забуттям Netscape і його Navigator багато хто зітхнув з полегшенням. Хоча, безумовно, втрата конкуренції на ринку і воцаріння такого небезпечного монополіста, як Microsoft, ніколи не йде на користь кінцевим користувачам, проте багато втомилися від "війни стандартів", коли і без того небагаті можливості HTML доводилося витончено підганяти таким чином, щоб сторінки виглядали однаково в обох браузерах.

Про HotJava, на жаль, сказати особливо нічого. Деякий час Sun підтримувала цей продукт і додала можливість візуально генерувати web-сторінки без знання HTML. Однак створити конкурентоспроможний браузер не вдалося і незабаром розвиток HotJava було зупинено. Зараз ще можна завантажити і подивитися останню версію 3.0.

І останнє, на чому варто зупинитися, - це мова Java Script, який також вельми поширений і який до цих пір багато хто пов'язує з Java, мабуть, через схожість імен. Втім, деякі загальні риси у них дійсно є.

4 грудня 1995 компанії Netscape і Sun спільно оголошують нову мову сценаріїв "(scripting language) Java Script. Як випливає з прес-релізу, це відкритий багатоплатформовий об'єктна мова сценаріїв для корпоративних мереж і Internet. Код Java Script описується прямо в HTML-тексті (хоча можна і довантажувати його з окремих файлів з розширенням. Js). Ця мова призначений для створення додатків, які пов'язують об'єкти та ресурси на клієнтській машині або на сервері. Таким чином, Java Script, з одного боку, розширює і доповнює HTML, а з іншого боку - доповнює Java. За допомогою Java пишуться об'єкти-аплети, якими можна управляти через мову сценаріїв.

Загальні властивості Java Script і Java:

  • легкість в освоєнні. За цим параметром Java Script порівнюють з Visual Basic - щоб використовувати ці мови, досвід програмування не вимагається;
  • кросплатформеність. Код Java Script виконується браузером. Мається на увазі, що браузери на різних платформах повинні забезпечувати однакову функціональність для сторінок, що використовують мову сценаріїв. Однак це виконується приблизно в тій же мірі, що і підтримка самого HTML, - відмінностей все ж таки дуже багато;
  • відкритість; специфікація мови відкрита для використання та обговорення спільнотою розробників;
  • всі перераховані властивості дозволяють стверджувати, що Java Script добре пристосований для Internet-програмування;
  • синтаксису мов Java Script і Java дуже схожі. Втім, вони також досить сильно нагадують мову С;
  • мова Java Script Не об'єктно-орієнтована (хоча деякі аспекти об'єктно-орієнтованого підходу підтримуються), але дозволяє використовувати різні об'єкти, що надаються браузером;
  • схожа історія появи і розвитку. Обидві мови були оголошені компаніями Sun і Netscape з інтервалом у кілька місяців. Що вийшов незабаром після цього Netscape Navigator 2.0 підтримував обидві нові технології. Можливо, сама назва Java Script було дано для того, щоб скористатися популярністю Java, або для того, щоб ще більше розширити поняття "платформа Java". Цілком ймовірно, що основну роботу з розробки мови провела саме Netscape.

Незважаючи на велику кількість схожих характеристик, Java і Java Script - абсолютно різні мови, і в першу чергу - за призначенням. Якщо спочатку Java позиціонувався як мова для створення Internet-додатків (аплетів), то зараз вже очевидно, що Java - це повноцінна мова програмування. Що стосується Java Script, то він повністю виправдовує свою назву мови сценаріїв, залишаючись розширенням HTML. Втім, розширенням досить потужним, так як любителі цієї технології примудряються створювати цілком серйозні програми, такі як 3D-ігри від першої особи (у сильно спрощеному режимі, природньо), хоча це скоріше випадок з області курйозів.

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

Мережеві комп'ютери

Коли стало зрозуміло, що нова технологія користується небувалим попитом, розробникам захотілося зміцнити і розвинути успіх і поширеність Java. Для того щоб Java не розділила долю NeWS (ця віконна система згадувалася на початку лекції, вона не отримала розвитку, програвши X Window), компанія Sun намагалася налагодити співробітництво з незалежними фірмами для виробництва різних бібліотек, засобів розробника, інструментів. 9 січня 1996 було сформовано новий підрозділ JavaSoft, яке і зайнявся розробкою нових Java-технологій і просуванням їх на ринок. Головна мета - поява все більшої кількості самих різних додатків, написаних на цій платформі. Наприклад, 1 липня 1997 року було оголошено, що вчені NASA (National Aeronautics and Space Administration, державна організація США, що займається дослідженням космосу) за допомогою Java-аплетів управляють роботом, що вивчає поверхню Марса ("Java допомагає робити історію!").

Час зупинитися докладніше на тому, чому по відношенню до Java використовується термін "платформа" і чим Java відрізняється від звичайного мови програмування.

Як правило, платформою називають поєднання апаратної архітектури ("залізо"), яка визначається типом використовуваного процесора (Intel x86, Sun SPARC, PowerPC тощо), з операційною системою (MS Windows, Sun Solaris, Linux, Mac OS і ін) . При написанні програм розробник завжди користується засобами цільової платформи для доступу до мережі, підтримки потоків виконання, роботи з графічним інтерфейсом (GUI) і іншими можливостями. Звичайно, різні платформи, в силу технічних, історичних та інших причин, підтримують різні інтерфейси (API, Application Programming Interface), а значить, і програма може виконуватися тільки під тією платформою, під яку вона була написана.

Однак часто замовникам потрібно одна і та ж функціональність, а платформи вони використовують різні. Завдання портування додатків стоїть перед розробниками давно. Рідко вдається перенести складну програму без істотної переробки, дуже часто різні платформи по-різному підтримують багато можливостей (наприклад, операційна система Mac OS традиційно використовує однокнопочну мишу, в той час як Windows спочатку розрахована на двокнопочні).

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

Було б дивно, якби з розвитком комп'ютерної індустрії розробники не спробували створити універсальну платформу, під якою могли працювати всі програми. Особливо для такого кроку сприяв бурхливий розвиток Глобальної мережі Internet, яка об'єднала користувачів незалежно від типу використовуваних процесорів і операційних систем. Саме тому творці Java задумали розробити не просто ще одну мову програмування, а універсальну платформу для виконання додатків, тим більше що спочатку OaK створювався для різних побутових приладів, від яких чекати сумісності не доводиться.

Яким же чином можна "згладити" відмінності і різноманіття операційних систем? Спосіб не новий, але ефективний - за допомогою віртуальної машини. Програми на мові Java виконуються у спеціальній, універсальної середовищі, яка називається Java Virtual Machine. JVM - це програма, яка пишеться спеціально для кожної реальної платформи, щоб, з одного боку, приховати всі її особливості, а з іншого - надати єдине середовище виконання для Java-додатків. Фірма Sun і її партнери створили JVM практично для всіх сучасних операційних систем. Коли мова йде про браузери з підтримкою Java, мається на увазі, що в ньому є вбудована віртуальна машина.

Детальніше JVM розглядається нижче, але необхідно сказати, що розробники Sun доклали зусилля, щоб зробити цю машину цілком реальною, а не тільки віртуальною. 29 травня 1996 оголошується операційна система Java OS (фінальна версія випущена в березні наступного року). Відповідно до прес-релізу, це була "можливо, сама невелика і швидка операційна система, що підтримує Java". Дійсно, розробники прагнули до того, щоб забезпечити можливість виконувати Java-додатки на самому широкому спектрі пристроїв - мережеві комп'ютери, кишенькові комп'ютери (PDA), принтери, ігрові приставки, мобільні телефони і т.д. Очікувалося, що Java OS буде реалізована на всіх апаратних платформах. Це було необхідно для початкової мети творців Java - легкість додавання нової функціональності та сумісності в будь-які електричні прилади, якими користується сучасний споживач.

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

Крім побутових приладів, компанія Sun позиціонувала дане рішення і для комп'ютерної індустрії - мережеві комп'ютери повинні були замінити різнорідні платформи персональних робочих станцій. Такий підхід добре вкладався в основну концепцію Sun, виражену в гаслі "Мережа - це комп'ютер". Можливості одного комп'ютера ніколи не зрівняються з можливостями мережі, що об'єднує всі ресурси компанії, а тим більше - всього світу. Напевно, сьогодні це вже очевидно, але в часи, коли WWW ще не обплутала планету, ідея була революційною.

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

Крім очевидних зручностей, це починання було з великим ентузіазмом підтримане індустрією і в силу того, що воно було найсильнішим зброєю в боротьбі з найбільшим виробником програмного забезпечення - Microsoft. Тоді (та й зараз) найпоширенішою платформою була операційна система Windows на базі процесорів Intel (з чиєїсь легкої руки тепер багатьма звана Wintel). Цим компаніям вдалося створити замкнуте коло, що гарантує успіх, - всі користувалися їх платформою, так як під неї написано найбільше програм, що, у свою чергу, змушувало розробників створювати нові продукти саме для платформи Wintel. Оскільки корпорація Microsoft завжди дуже агресивно розвивала свою перевагу в області персональних комп'ютерів (згадаємо, як Netscape Navigator безнадійно програв конкуренцію MS Internet Explorer), це не могло не викликати сильне занепокоєння інших представників комп'ютерної індустрії. Зрозуміло, що концепція мережних комп'ютерів звела б нанівець переваги Wintel у випадку широкого розповсюдження. Розробники просто перестали б замислюватися, що знаходиться всередині їх робочої станції, також як домашні користувачі не мають уявлення, на яких мікросхемах зібраний їх мобільний телефон або відеомагнітофон.

Ми вже розповідали про те, як і чому Microsoft ліцензувала Java, хоча, здавалося б, цей крок лише сприяв небезпечному поширенню нової технології, але Internet Explorer завойовував все більшу популярність. Однак незабаром вибухнув судовий скандал. 30 вересня 1997 вийшов новий IE 4.0, а вже 7 жовтня Sun оголосила, що цей продукт не проходить тести на відповідність зі специфікацією віртуальної машини. 18 листопада Sun звертається до суду, щоб заборонити використання логотипу "Сумісний з Java" ("Java compatible") для MS IE 4.0. Виявилося, що розробники Microsoft злегка "поліпшили" мову Java, додавши кілька нових ключових слів і бібліотек. Не те що б це були надпотужні розширення, проте досить привабливі для того, щоб значна частина розробників почала її використовувати. На щастя, в Sun швидко усвідомили всю ступінь небезпеки такого кроку. Java могла втратити звання універсальної платформи, для якої вірний знаменитий девіз "Write once, run everywhere" ("Написано один раз, працює скрізь"). У такому випадку вона втратила б основу свого успіху, перетворившись усього лише в "ще одну мову програмування".

Компанії Sun вдалося відстояти свою технологію. 24 березня 1998 суд погодився з вимогами компанії (звичайно, це було лише попереднє рішення, справа завершилася лише 23 січня 2001 року - Sun отримав компенсацію в 20 мільйонів доларів і добився виконання ліцензійної угоди), а вже 12 травня Sun знову виступає з вимогою зобов'язати Microsoft включити повноцінну версію Java в Windows 98 і інші програмні продукти. Ця тяганина триває до цих пір із змінним успіхом сторін. Наприклад, Microsoft виключила з віртуальної машини Internet Explorer бібліотеку java.rmi, що дозволяє створювати розподілені додатки, намагаючись привернути увагу розробників до DCOM-технології, жорстко прив'язаною до платформи Win32. У відповідь багато компаній стали поширювати спеціальне доповнення (patch), що усуває цей недолік. У результаті Microsoft зупинила свою підтримку Java на версії 1.1, яка на даний момент є застарілою і не має багатьох корисних можливостей. Це, у свою чергу, практично зупинило широке поширення аплетів, крім випадків або зовсім нескладної функціональності (типу рухомого рядка або діалогу з кількома полями введення і кнопками), або програм для внутрішніх мереж корпорацій. Для останнього випадку Sun випустив спеціальний продукт Java Plug-in, що вбудовується в MS IE і NN, дозволяючи їм виконувати аплети на основі Java самих останніх версій, причому повну відповідність специфікаціям гарантується (спочатку продукт називався Java Activator і вперше був оголошений 10 грудня 1997 ). На даний момент Microsoft то включає, то виключає Java зі своєї операційної системи Windows XP, мабуть, намагаючись знайти найвигідніший для себе варіант.

Що ж стосується мережевих комп'ютерів і Java OS, то, на жаль, вони поки не знайшли своїх споживачів. Мабуть, звичайні персональні робочі станції в сукупності з JVM вимагають набагато менше технологічних і маркетингових зусиль і при цьому цілком успішно справляються з прикладними завданнями. А Java, в свою чергу, стала позиціонуватися для створення складних серверних додатків.

Платформа Java

Отже, Java має довгу і непростою історією розвитку, проте настав час розглянути, що ж вийшло у творців, якими властивостями володіє дана технологія.

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

Наявність віртуальної машини визначає багато властивостей Java, проте зараз зупинимося на наступному питанні - є Java мовою компільованою або інтерпретується? Насправді, використовуються обидва підходи.

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

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

Багато розроблювачів спочатку жорстко критикували сміливий гасло Sun "Write once, run everywhere", виявляючи все більше і більше невідповідностей і нестиковок на різних платформах. Однак треба визнати, що вони просто були занадто нетерплячі. Java тільки з'явилася на світ, а перші версії специфікацій були недостатньо вичерпними.

Дуже скоро фахівці Sun прийшли до висновку, що просто вільно публікувати специфікації (що вже робилося задовго до Java) недостатньо. Необхідно ще й створювати спеціальні процедури перевірки нових продуктів на відповідність стандартам. Перший такий тест для JVM містив всього близько 600 перевірок, через рік їх число зросло до десяти тисяч та з тих пір весь час збільшується (саме його свого часу не зміг пройти MS IE 4.0). Безумовно, автори віртуальних машин весь час вдосконалювали їх, усуваючи помилки і оптимізуючи роботу. Все-таки будь-яка, навіть дуже добре задумана технологія вимагає часу для створення високоякісної реалізації. Аналогічний шлях розвитку зараз проходить Java 2 Micro Edition (J2ME), але про це пізніше.

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

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

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

У Java існує всього 8 типів даних, які не є об'єктами. Вони були визначені з самої першої версії і ніколи не змінювалися. Це п'ять цілочисельних типів: byte, short, int, long, а також до них відносять символьний char. Потім два дробових типу float і double і, нарешті, булевський тип boolean. Такі типи називаються прості, або примітивні (від англійського primitive), і вони детально розглядаються в лекції, присвяченій типам даних. Всі інші типи - об'єктні або посилальні (англ. reference).

Синтаксис Java чомусь багатьох ввів в оману. Він дійсно створений на основі синтаксису мов C / C + +, так що якщо подивитися на вихідний код програм, написаних на цих мовах і на Java, то не відразу вдається зрозуміти, яка з них на якій мові написана. Це чомусь дало багатьом привід думати, що Java - це спрощений C + + з додатковими можливостями, такими як garbage collector. Автоматичний прибиральник сміття (garbage collector) ми розглянемо трохи нижче, але вважати, що Java така ж мова, як і C + +, - велика помилка.

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

Але, як вже говорилося, С + + принципово не годився для нових завдань, які поставили собі розробники з компанії Sun, тому модель Java була побудована заново, причому відповідно до зовсім інших цілей. Подальші лекції будуть поступово розкривати конкретні відмінності.

Що ж стосується об'єктної моделі, то вона скоріше була побудована за зразком таких мов, як Smalltalk від IBM, або розроблена ще в 60-ті роки в Норвезькому Обчислювальному Центрі мова Simula, на яку посилається сам творець Java Джеймс Гослінг.

Інша важлива властивість Java - легкість в освоєнні і розробці - також отримала неоднозначну оцінку. Дійсно, автори прагнули позбавити програмістів від найбільш поширених помилок, які часом допускають навіть досвідчені розробники на C / C + +. І перше місце тут займає робота з пам'яттю.

У Java з самого початку був введений механізм автоматичного збирання сміття (від англійського garbage collector). Припустимо, програма створює деякий об'єкт, працює з ним, а далі наступає момент, коли він більше вже не потрібен. Необхідно звільнити займану пам'ять, щоб не заважати операційній системі нормально функціонувати. В С / С + + це необхідно робити явно з програми. Очевидно, що при такому підході існує дві небезпеки - або видалити об'єкт, який ще комусь необхідний (і якщо до нього дійсно відбудеться звертання, то виникне помилка), або не видаляти об'єкт, що став непотрібним, а це означає витік пам'яті, тобто програма починає споживати все більшу кількість оперативної пам'яті.

При розробці на Java програміст взагалі не думає про звільнення пам'яті. Віртуальна машина сама підраховує кількість посилань на кожен об'єкт, і якщо воно стає рівним нулю, то такий об'єкт позначається для обробки garbage collector. Таким чином, програміст повинен стежити лише за тим, щоб не залишалося посилань на непотрібні об'єкти. Складальник сміття - це фоновий потік виконання, який регулярно переглядає існуючі об'єкти і видаляє вже не потрібні. З програми ніяк не можна вплинути на роботу garbage collector, можна тільки явно ініціювати його черговий прохід з допомогою стандартної функції. Ясно, що це істотно спрощує розробку програм, особливо для починаючих програмістів.

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

Крім того, особливий наголос робився на легкість освоєння нової технології. Як вже було сказано, очікувалося (і ці очікування виправдалися, на підтвердження правильності обраного шляху!), що Java повинна отримати максимально широке застосування, навіть в тих компаніях, де ніколи до цього не займалися програмуванням на такому рівні (побутова техніка типу тостерів і кавоварок , створення ігор та інших програм для стільникових телефонів і т.д.). Був і цілий ряд інших міркувань. Продукти для звичайних користувачів, а не професійних програмістів, повинні бути особливо надійними. Internet став Всесвітньої Мережею, оскільки з'явилися непрофесійні користувачі, а можливість створювати аплети для них не менш приваблива. Їм потрібен простий інструмент для створення надійних додатків.

Нарешті, Internet-бум 90-х років набирав обертів і висував нові, більш жорсткі вимоги до термінів розробки. Багаторічні проекти, які були в минулому звичайною справою, перестали відповідати потребам замовників, нові системи треба було створювати максимум за рік, а то й за лічені місяці.

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

Наступне важливе властивість Java - безпека. Початкова націленість на розподілені додатки, і особливо рішення виконувати аплети на клієнтській машині, зробили питання захисту одним з найбільш пріоритетних. При роботі будь-якої віртуальної машини Java діє цілий комплекс заходів. Далі наводиться лише короткий опис деяких з них.

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

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

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

Сукупність описаних властивостей Java дозволяє стверджувати, що мова досить пристосований для розробки Internet і інтранет (внутрішні мережі корпорацій)-додатків.

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

Отже, підіб'ємо підсумки. Java-платформа володіє наступними перевагами:

  • переносимість, або кросплатформеність;
  • об'єктна орієнтованість, створена ефективна об'єктна модель;
  • звичний синтаксис С / С + +;
  • вбудована і прозора модель безпеки;
  • орієнтація на Internet-завдання, мережеві розподілені додатки;
  • динамічність, легкість розвитку і додавання нових можливостей;
  • простота освоєння.

Але не слід вважати, що більш легке освоєння означає, що вивчати мову не потрібно зовсім. Щоб писати дійсно хороші програми, створювати великі складні системи, необхідно чітке розуміння всіх базових концепцій Java і використовуваних бібліотек. Саме цьому і присвячений даний курс.

Основні версії та продукти Java

Відразу обмовимося, що під продуктами тут розуміються програмні рішення від компанії Sun, що є "зразками реалізації" (reference implementation).

Отже, вперше Java була оголошено 23 травня 1995 року. Основними продуктами, доступними на той момент у вигляді бета-версій, були:

  • Java language specification, JLS, специфікація мови Java (описує лексику, типи даних, основні конструкції і т.д.);
  • специфікація JVM;
  • Java Development Kit, JDK - засіб розробника, що складається в основному з утиліт, стандартних бібліотек класів і демонстраційних прикладів.

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

Специфікація JVM призначена в першу чергу для творців віртуальних машин, а тому практично не використовується Java-програмістами.

JDK довгий час було базовим засобом розробки додатків. Воно не містить ніяких текстових редакторів, а оперує тільки вже існуючими Java-файлами. Компілятор представлений утилітою javac (java compiler). Віртуальна машина реалізована програмою java. Для тестових запусків аплетів існує спеціальна утиліта appletviewer. Нарешті, для автоматичної генерації документації на основі вихідного коду додається засіб javadoc.

Перша версія містила всього 8 стандартних бібліотек:

  • java.lang - базові класи, необхідні для роботи будь-якої програми (назва - скорочення від language);
  • java.util - багато корисних допоміжних класів;
  • java.applet - класи для створення аплетів;
  • java.awt, java.awt.peer - бібліотека для створення графічного інтерфейсу користувача (GUI), називається Abstract Window Toolkit, AWT, докладно описується в лекції 11;
  • java.awt.image - додаткові класи для роботи з зображеннями;
  • java.io - робота з потоками даних (streams) і з файлами;
  • java.net - робота з мережею.

Таким чином, всі бібліотеки починаються з java, саме вони є стандартними. Всі інші (що починаються з com, org тощо) можуть змінюватися в будь-якій версії без підтримки сумісності.

Фінальна версія JDK 1.0 була випущена в січні 1996 року.

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

Друга цифра змінилася від 0 до 4 (остання на момент створення курсу). У кожній версії відбувалося істотне розширення стандартних бібліотек (212, 504, 1781, 2130 і 2738 - кількість класів та інтерфейсів з 1.0 по 1.4), а також додавалися деякі нові можливості в саму мову. Змінювалися і утиліти, що входять в JDK.

Нарешті, третя цифра означає розвиток однієї версії. У мові або бібліотеках нічого не змінюється, лише усуваються помилки, проводиться оптимізація, можуть змінюватися (додаватися) аргументи утиліт. Так, остання версія JDK 1.0 - 1.0.2.

Хоча з розвитком версії 1.х нічого не видаляється, звичайно, якісь функції або класи застарівають. Вони оголошуються deprecated, і хоча вони будуть підтримуватися до оголошення 2.0 (а про неї поки нічого не було чутно), користуватися ними не рекомендується.

Разом з першим успіхом JDK 1.0 приспіла і критика. Основні недоліки, виявлені розробниками, були наступними. По-перше, звичайно, продуктивність. Перша віртуальна машина працювала дуже повільно. Це пов'язано з тим, що JVM, по суті, являє собою інтерпретатор, який працює завжди повільніше, ніж виповнюється відкомпільований код. Проте успішна оптимізація, прибравша цей недолік, була ще попереду. Також відзначалися досить бідні можливості AWT, відсутність роботи з базами даних та інші.

У грудні 1996 року оголошується нова версія JDK 1.1, відразу викладається для вільного доступу бета-версія. У лютому 1997 року виходить фінальна версія. Що було додано у новому випуску Java?

Звичайно, особливу увагу було приділено продуктивності. Багато частин віртуальної машини були оптимізовані і переписані з використанням Assembler, а не C, як до цього. Крім того, з жовтня 1996 року Sun розвиває новий продукт - Just-In-Time компілятор, JIT. Його завдання - транслювати Java байт-код програми в "рідний" код операційної системи. Таким чином, час запуску програми збільшується, але зате виконання може прискорюватися в деяких випадках до 50 разів! З липня 1997 року з'являється реалізація під Windows і JIT стандартно входить в JDK з можливістю відключення.

Було додано багато нових важливих можливостей. JavaBeans-технологія, оголошена ще в 1996 році, дозволяє створювати візуальні компоненти, які легко інтегруються у візуальні засоби розробки. JDBC (Java DataBase Connectivity) забезпечує доступ до баз даних. RMI (Remote Method Invocation) дозволяє легко створювати розподілені додатки. Були вдосконалені підтримка національних мов і система безпеки.

За перші три тижні JDK 1.1 був завантажений понад 220.000 разів, менш ніж через рік - більше двох мільйонів разів. На даний момент версія 1.1 вважається повністю застарілою і її розвиток зупинився на 1.1.8. Однак через те, що найпоширеніший браузер MS IE до цих пір підтримує тільки цю версію, вона продовжує використовуватися для написання невеликих аплетів.

Крім того, з 11 березня 1997 року компанія Sun почала пропонувати Java Runtime Environment, JRE (середовище виконання Java). По суті справи, це мінімальна реалізація віртуальної машини, необхідна для виконання Java-додатків, без компілятора та інших засобів розробки. Якщо користувач хоче тільки запускати програми, це саме те, що йому потрібно.

Як видно, найголовнішим недоліком залишилася слабка підтримка графічного інтерфейсу користувача (GUI). У грудні 1996 року компанії Sun і Netscape оголошують нову бібліотеку IFC (Internet Foundation Classes), розроблену Netscape повністю на Java і призначену саме для створення складного віконного інтерфейсу. У квітні 1997 року оголошується, що компанії планують об'єднати технології AWT від Sun та IFC від Netscape для створення нового продукту Java Foundation Classes, JFC, до якого мають увійти:

  • вдосконалений віконний інтерфейс, який отримав особливу назву - Swing;
  • реалізація Drag-and-Drop;
  • підтримка 2D-графіки, більш зручна робота з зображеннями;
  • Accessibility API для користувачів з обмеженими можливостями

та інші функції. Компанія IBM також підтримала розробку нової технології. У липні 1997 року стала доступна перша версія JFC. Спочатку бібліотеки називалися, наприклад, com.sun.java.swing для компонентів Swing. У березні 1998 року вийшла фінальна версія цієї технології. За півроку продукт був викачаний більше 500.000 разів.

Вихід наступної версії Java 1.2 багато разів відкладався, але в результаті вона настільки перевершила попередню 1.1, що її і всі наступні версії почали називати платформою Java 2 (хоча номера, звісно, як і раніше відлічувалися як 1.х.х, див. вище опис правил нумерації). Перша бета-версія стала доступною в грудні 1997 року, а фінальна версія була випущена 8 грудня 1998 року, і за перші вісім місяців її скачали більше мільйона разів.

Список можливостей, що з'явилися дуже широкий, тому перерахуємо найбільш значимі з них:

  • істотно перероблена модель безпеки, введені поняття політики (policy) та дозволу (permission);
  • JFC став стандартною частиною JDK, причому бібліотеки стали називатися, наприклад, javax.swing для Swing (назва javax вказує, що до цього бібліотека вважалася розширенням Java);
  • повністю перероблена бібліотека колекцій (collection framework) - класів для зберігання набору об'єктів;
  • Java Plug-in був включений в JDK;
  • покращення в продуктивності, глобалізації (незалежності від особливостей різних платформ і країн), захист від "проблеми-2000".

З лютого 1999 року вихідний код самої JVM був відкритий для безкоштовного доступу всім бажаючим.

Сама ж суттєва зміна сталося 15 червня 1999 року, через півроку після виходу JDK 1.2. На конференції розробників JavaOne компанія Sun оголосила про поділ розвитку платформи Java 2 на три напрямки:

  • Java 2 Platform, Standard Edition (J2SE);
  • Java 2 Platform, Enterprise Edition (J2EE);
  • Java 2 Platform, Micro Edition (J2ME).

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

J2SE призначається для використання на робочих станціях і персональних комп'ютерах. Standard Edition - основа технології Java і прямий розвиток JDK (засіб розробника було перейменовано в j2sdk).

J2EE містить все необхідне для створення складних, високонадійних, розподілених серверних додатків. Умовно можна сказати, що Enterprise Edition - це набір потужних бібліотек (наприклад, Enterprise Java Beans, EJB) і приклад реалізації платформи (сервера додатків, Application Server), яка їх підтримує. Робота такої платформи завжди спирається на j2sdk.

J2ME є усіканням Standard Edition, щоб задовольняти жорстким апаратним вимогам невеликих пристроїв, таких як кишенькові комп'ютери і стільникові телефони.

Далі розвиток цих технологій відбувається різними темпами. Якщо J2SE вже була доступна більше півроку, то фінальна версія J2EE вийшла лише в грудні 1999 року. Остання версія j2sdk 1.2 на даний момент - 1.2.2.

Тим часом боротьба за продуктивність тривала, і Sun намагався ще більше оптимізувати віртуальну машину. У березні 1999 року оголошується новий продукт - високошвидкісна платформа (engine) Java HotSpot. Була оптимізована робота з потоками виконання, істотно перероблені алгоритми автоматичного збирача сміття (garbage collector) і багато чого іншого. Прискорення дійсно було дуже істотним, завжди помітне неозброєним поглядом за кілька хвилин роботи з Java-додатком.

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

Розвиток HotSpot тривало більше року, поки на початку травня 2000 високопродуктивна JVM не увійшла до складу нової версії J2SE. У цю версію було внесено ще безліч поліпшень і виправлень, але саме прогрес у швидкості роботи став ключовою зміною нового j2sdk 1.3 (остання підверсії 1.3.1).

Нарешті, остання на даний момент версія J2SE 1.4 вийшла в лютому 2002 року. Вона була розроблена для більш повної підтримки web-сервісів (web services). Тому основні зміни торкнулися роботи з XML (Extensible Markup Language). Інше революційне додавання - вираз assert, що дозволяє в «отладочному» режимі перевіряти вірність умов, що має серйозно спростити розробку складних додатків. Нарешті, були додані класи для роботи з регулярними виразами.

За перші п'ять місяців j2sdk 1.4 було завантажено більше двох мільйонів разів. У серпні 2002 року вже була запропонована версія 1.4.1, що залишається на даний момент найсучаснішою.

На закінчення для демонстрації рівня розвитку Standard Edition наведемо стандартні діаграми, що описують всі складові технології, з документації до версій 1.3 та 1.4.

Рисунок 1.-Складові технології версії 1.3.

Рисунок 2. -Складові технології версі1.4.

Висновок

У цій лекції ми розповіли про те, яка непроста ситуація склалася в корпорації Sun в епоху розвитку персональних комп'ютерів наприкінці 1990 року. Патрік Нотон у своєму листі зумів виявити справжні причини такого становища і позначити істинні цілі для створення успішного продукту. Завдяки цьому за підтримки Джеймса Гослінга розпочався проект Green. Одним з продуктів, створених в рамках цього проекту, стала абсолютно нова платформа OaK. Для її просування Sun заснувала дочірню компанію FirstPerson, але справжній успіх прийшов, коли платформу, перейменувавши в Java, зорієнтували на застосування в Internet.

Глобальна мережа з'явилася в квітні 1993 року з виходом першого браузера Mosaic 1.0 і завойовувала користувальницьку аудиторію з вражаючою швидкістю. Першим прикладом Java-додатків стали аплети, що запускаються за допомогою спеціально створеного браузера HotJava. Нарешті, після майже чотирирічної історії створення та розвитку, Java була офіційно представлена світу. Завдяки підписанню ліцензійної угоди з Netscape, ця подія стала воістину тріумфальною.

Були розглянуті різні варіанти застосування Java. Окремо було описано мову Java Script, яка, незважаючи на подібність у назві, має не так багато спільного з Java. Докладно розглянуті відмітні особливості Java. Описано базові продукти від Sun: JDK і JRE. Коротко висвітлена історія розвитку версій платформи Java, включаючи додаються технології і продукти.

загрузка...
Теми розділу
Сторінки, близькі за змістом