Вісім міфів про Java

Владислав Кравченко, Григорій Григоренко

Java повільно працює

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

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

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

По тестах на "скорострільність" Java вельми непогана, але як
Така ж ситуація складається з реальними додатками? На жаль, з
користувацькими додатками справи йдуть не так вже й
добре. Причина тому – повільна робота графічних
компонентів системи.

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

На Java складно програмувати

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

Мова програмування Java є повністю
об'єктно-орієнтованим. По синтаксису він схожий на Сі + +. При
цьому надмірний, що приводить до помилок функціонал Сі + + (такий,
як перевантаження операторів або множинне спадкоємство)
відкинутий.

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

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

Для сигналізації про помилки Java вдається до модної
концепції "виключень". Виняток – це якесь спеціальне
подія, яка сигналізує про помилку в програмі.
Більшість мов програмування (і API) для сигналізації
про помилку передають зухвалому результат виклику функції
("Погано" або "добре"). Код аналізу поверненого значення в
результаті виявляється перемішаним з кодом нормального
виконання програми, це утрудняє читання програм і їх
модифікацію.

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

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

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

Java працює скрізь однаково

"Створюєш один раз – використовуєш де завгодно" ("Write once –
run anywhere "). Друга частина цього гасла творців Java
містить твердження, що Java-програма працює скрізь
однаково. На жаль, насправді все не так просто.
Java-машини різних компаній на різних платформах НЕ
стовідсотково сумісні один з одним.

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

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

У MS JVM ви не побачите підтримки технологій RMI або CORBA,
зате тут можна використовувати об'єкти ActiveX – технологію,
специфічну тільки для платформи Windows і більш ніде не
існуючу. Microsoft розширила стандартну Java-бібліотеку
класів типами, які відображають деякі особливості роботи
платформи Windows.

Не можна також забувати і про різну швидкості роботи
Java-машин. Ця різниця може призвести до неприпустимих
затримок в роботі програми або інших проблем. Висновок з
вищесказаного простий: при створенні Java-програм слід
тестувати їх на широкому спектрі платформ і не користуватися
нестандартними розширеннями мови.

Java – це мова програмування

Існує думка, що Java – це тільки певна мова
програмування. Але це всього лише помилка. Так, Java це
ще й мову програмування. Це і цілий спектр інших
технологій.

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

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

Java – молодша сестра Сі + +

Чи справді мову програмування Java веде своє
походження від Сі + +? Скоріше ні, ніж так. Ідея Sun
полягала в тому, щоб спростити навчання Java, зробивши її
синтаксис схожим на той, що використовується в найбільш
поширеному мовою програмування. Це повинно було у
кінцевому підсумку стимулювати і спростити перехід на Java
Сі-програмістів.

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

Деякі новації були взяті з невідомих широкій публіці
мов і систем.

Наприклад, принцип інтерфейсу класів перенесений з мови
Objective C, розробленого компанією NeXT. Механізм обробки
виняткових ситуацій майже повністю запозичений з
Модуль-3. Засади внутрішньої реалізації такої важливої
складової мови Java, як "збірка сміття", почерпнуті
перш за все з Ліспу. Частина "нормальних" мов, таких, як
Ейфель, Модула-3, Оберон, також спочатку мала в своєму розпорядженні цим
механізмом.

Узагальнивши сказане вище, можна зробити висновок, що Java
увібрала в себе велику кількість ідей і підходів з різних
систем програмування і зокрема синтаксис мови Сі + +.

Мова Java придатний тільки для аплетів і Інтернету

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

Ідея вбудовуваних додатків в гіпертекстові документи
(HTML) не так вже й нова. Багато фірм намагалися просунути свої
технології на цей сектор ринку, але в даний час
конкурентів у Java тут небагато. На сьогодні це, мабуть,
JavaScript, ActiveX і технологія Flash. Дві останні, щоправда,
працюють тільки під управлінням Windows.

Що приваблює в Java програмістів? Потужна модель
безпеки, єдиний код для всіх платформ, широкі
можливості для використання готових бібліотек, простота
програмування. Насправді все не так райдужно, як
хотілося б. Модель безпеки, безумовно, не погана, але її
реалізації, виконані тими або іншими виробниками,
розрізняються. У результаті код, який прекрасно працює під
управлінням одного браузера, не працює під управлінням
іншого.

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

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

А якщо сюди додати ще і клієнтські додатки або навіть
аплети, то виходить повний комплект для автоматизації.

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

Java – ідеал, вона не потребує поліпшень

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

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

Існує більш потужна технологія, ніж asset. Це Design
By Contract, "програмування за контрактом", що дозволяє
спростити створення великих додатків, які використовують
раніше створений код. Java ж не підтримує і
"Програмування за контрактом".

Шаблони класів в Сі + + – це можливість генерації коду
"Під" вказаний користувачем клас (насправді
розробники Java цілком усвідомлено відмовилися від шаблонів,
вважаючи, що від них більше проблем, ніж користі. – Прим. ред.).
Колекція об'єктів, реалізована за допомогою шаблону, буде
компілюватися кожного разу для кожного типу об'єктів,
закладеного в цій колекції. Типова колекція об'єктів в Java
зберігає екземпляри класу Object, предка всіх Java-класів.

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

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

Java коштує купу грошей

Чи справді технологія Java є дорогою?
Все залежить від складності розроблюваного програмного
забезпечення. Скажімо, для невеликого додатку (від одного до
трьох людино-місяців) Java може не коштувати взагалі нічого.
Безумовно, абсолютно безкоштовною ця технологія не є.
Кваліфікований Java-програміст коштує грошей.

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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*