русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Платформа Java


Дата додавання: 2014-05-29; переглядів: 1184.


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

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

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

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

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

Основні особливості:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- кроссплатформеність;

- об'єктна орієнтованість, створена ефективна об'єктна модель;

- звичний синтаксис С/С++;

- убудована й прозора модель безпеки;

- орієнтація на Internet-Задачі, мережні розподілені додатки;

- динамічність, легкість розвитку й додавання нових можливостей;

- простота освоєння.


 


<== попередня лекція | наступна лекція ==>
Тема 1 Поняття платформи Java. Поняття JDK. Встановлення JDK | Тема 2 Лексика мови Java. Оператори й структура коду


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн