Главная » Файлы » Для учня/студента » Інформатика | [ Добавить материал ] |
[ · Скачать удаленно () ] | 31.07.2009, 00:51 |
Java технологія. Основні риси та перспективи застосування. Зміст. 1. Походження Java. 2. Безпечність. 3. Ефективність. а) прозорість інтерфейсів; б) легкість програмування; 4. Об’єктно-орієнтована спрямованість. 5. Стійкість до помилок. 6. Підтримка багатопоточності. 7. Незалежність від архітектури. 8. Переваги інтерпретованості в поєднанні з високою продуктивністю. 9. Розподіленість. 10. Доступність інструментарія. 11. Перспективи застосування 12. Резюме. 13. Джерела інформації. 2 2 3 Походження Java. Мова програмування Java зародилася в 1991р. в лабораторіях компанії Sun Microsystems inc. Як не дивно, поштовхом для створення Java стала зовсім не Internet. Головним мотивом була потреба в мові програмування, яка не залежала б від платформи ( тобто від архітектури ) і яку можна було б використовувати для створення програмного забезпечення, яке вбудовується в різноманітні побутові електронні прилади, такі як мобільні засоби зв’язку, пристрої дистанційного управління тощо. Розробка першої робочої версії зайняла 18 місяців і вона мала назву «Oak», але 1995 р. проект був перйменований на «Java». Безпечність. World Wide Web висунула Java на передній край програмування, і Java, в свою чергу, сильно вплинула і навіть змінила обличчя Internet, розширивши спектр об’єктів, які можуть розповсюджуватись у кіберпросторі. Програми нової форми - аплети - завантажуються з віддаленого сервера і можуть запускатися динамічно, тобто без участі користувача. До появи Java такий підхід був неприпустимий з міркувань безпеки та переносимості. В архітектурі аплетів зроблено ряд штучних обмежень, які роблять їх цілком безпечними. Перш за все, Java є інтерпретованою мовою і простір ресурсів Java-програми обмежений так званою віртуальною Java-машиною (VJM), яка може конторолювати поведінку програми і захищати систему від побічних ефектів, які можуть виникати з вини аплета. Крім того, в мові Java є додаткові обмеження, які не дозволять аплету стати «троянським конем». Зокрема, Java-аплет не може отримати доступ до локального жорсткого диску. При такій спробі генерується виключна ситуація. Ефективність. Оскільки аплети Java інтерпретуються, а не компілюються, то їх виконання на різних платформах значно полегшується. В цьому випадку достатньо створити для кожної платформи виконуючу Java-систему. Якщо існує така система для даної операційної системи, то будь-яка Java-програма може виконуватись в даному середовищі без додаткової компіляції на цій платформі. Проте Java не є інтерпретованою мовою в чистому розумінні. Програма на Java компілюється. Результатом роботи компілятора Java є байткод (bytecode). Байткод - це оптимізований набір команд, призначений для виконання уявним пристроєм - віртуальною Java-машиною. В такий спосіб витрати на інтерпретацію зводяться до мінімуму, оскільки байкод вже є оптимізованим, і досягається досить висока продуктивність Java-програм. Наведені вище особливості дають підставу розглядати Java не як ще одну мову програмування, а як окрему інформаційну технологію. Таким чином, інтерпретація - це найлегший шлях до перенесення програм, реалізований в Java технології. Незважаючи на те, що мова Java була розроблена в розрахунку на інтерпретацію, технічно немає нічого такого, що б перешкоджало компіляції байткоду в виконуваний код. До байткоду, який пересилається по мережі, застосовується динамічна компіляція, але це ніяк не впливає на переносимість та безпеку, оскільки роботу програми все ще контролює виконуюча система. Такий підхід застосовано в багатьох виконуючих системах Java, що забезпечує продуктивність на рівні оптимізованого коду С++. Об’єктно-орієнтована спрямованість. Від С++ Java успадкувала потужний механізм об’єктно-орієнтованого програмування. Оскільки Java розроблювався «на пустому місці», тобто не було потреби забезпечувати сумісність з попередніми версіями, розробники мали повну свободу мислення. В результаті був сформований ясний і прагматичний підхід до об’єктів. Вільно переймаючи ідеї, які реалізовувалися протягом останніх десятирічь, мові Java вдалося знайти рівновагу між парадигмою «все є об’єктом» і прагматичним підходом. Об’єктна модель Java проста і легко розширюється, в той час як просі типи, як цілі, зберігаються як дані, що не є об’єктами, що дозволяє значно підвищити швидкість при їх обробці. Стійкість до помилок. Багатоплатформеність середовища Web висуває надзвичайно високі вимоги до надійності програм. Як наслідок, при розробці Java приорітет був відданий можливості створення стійких до помилок програм. Java звільняє програміста від хвилювань з приводу багатьох поширених причин, які викликають помилки програмування. Як вже згадувалося, Java є строго типіованою мовою програмування. Ще виконуюча система Java бере на себе «прибирання сміття», тобто автоматично звільняє пам’ять, яка була розподілена динамічно. Звичайно, це дещо знижує ефективність коду, але запобігає типових помилок, коли програміст забуває звільнити виділену пам’ять, або, навпаки, звільняє пам’ять, яка ще використовується. Java підтримує об’єктно-орієнтовану обробку виключних ситуацій подібно до С++. Але на відміну від С++ в Java обробка виключних ситуацій є обов’язкувою. Тобто неможливо скомпілювати програму, яка відкриває файл, не обробивши можливі помилки типу «файл не знайдено», які виникають при цьому. Добре написана Java-програма може сама обробляти всі помилки часу виконання. Підтримка багатопоточності. Java розробляялася з орієнтацією на вимоги до створення інтерактивних програм, які працюють з мережею. З цією метою Java підтримує багатопоточне програмування, яке дозволяє легко розробляти програми, що викинують багато процесів одночасно. Виконання Java-програми засновано на елгантному, але в той самий час високоорганізованому рішенні багатопроцесової синхронізації, яке дозволяє вам створювати високоефективні інтерактивні системи. Незалежність від архітектури. Основним питанням для розробників Java стало питання довготривалості та переносимості. Одна з головних проблем, із якою зустрілися програмісти, полягала в відсутності гарантій того, що написана сьогодні програма завтра працюватиме з тим же успіхом, причому на тій самій машині. Оновлення операційної системи, модернізація процесора та зміна об’єму оперативної пам’яті можуть призвести до збою програми. Рощзробники Java, прагнули змінити цю ситуацію і прийняли декілька важких рішень відносно мови Java та процесу виконання Java-програми. Їх мета полягала в тому, щоб «одного разу написане працювало всюди, в любий час і завжди». Внаслідок цього Java є системою, яка легко розширюється за рахунок створення нових стандартних класів та бібліотек. Переваги інтерпретованості в поєднанні з високою продуктивністю. Як вже згадувалось, Java дозвляє створювати незалежні від платформи програми шляхом компіляції в проміжне представлення, яке називається байткодом. Багато попередніх спроб зпроб знати розв’язок проблеми незалежності від платформи були зроблені за рахунок продуктивності. Інтерпретуючі системи, подібні до BASIC, Perl, страждають на майже неподоланний дефіцит продуктивності. Це було враховано при створенні Java.. Незважаючи на те, що Java є інтерпретованою мовою, генерація байткодів була ретельно оптимізована в такий спосіб, щоб одержуваний байткод можна було легко перекладати в машинний код, який працює з дуже високою продуктивністю. Виконуючі системи такого роду не втрачають жодних переваг переносимого коду. Розподіленість. Мова Java призначена для створення програм, які працюють в розподіленому середовищі Internet на базі протоколів TCP/IP. Насправді доступ до ресурсів за допомогою URL відрізняється від доступу к файлу. Крім того в Java наявний засіб передачі повідомлень в межах внутрішнього адресного простору. Це дозволяє забеспечити віддалене виконання процедур. Ці інтерфкйси включені у пакет RMI (remote metod invocation). Цей засіб привносить високий рівень абстракції в програмування дл я середовища клієнт/сервер. Доступність інструментарію та ефективність розробок. Зазначена вище простота програмування на Java є причиною того, що розробки на Java коштуватимуть дешевше аналогічних на більш потужніх мовах програмування. Цьому ж сприяє і переносимість програм на Java, оскільки ліквідуються витрати пов’язані з адаптацією програми на конкретній платформі. До того ж інтегровані програми-оболонки для розробки Java програм коштують набагато дешевше ( 70-100$ ) ніж аналогічні продукти C++, Delphi ( ~1000$). А набір інструментарію для пакетної компіляції Java програм JDK (Java Development Kit) є взагалі freeware. Тому платформу Java можна рекомендувати як ідеальну для створення некомерційних програмних продуктів, зокрема для галузі освіти. Перспективи застосування. Програми на Java можуть знайти різне застосування в навчальному процесі: інтерактивні навчаючі програми (HTML в поєднанні з Java), програми-тести і особливо ділові ігри. Додаткові переваги можна отримати, якщо пистати ці програми у вигляді аплетів, які ініціалізуються з Web сервера внутрішньої мережі Intranet. В такий спосіб можна уникнути інсталяції програми на багатьох комп’ютерах - користувач просто запускає Web-броузер і загружає потрібну сторінку. Для тестових програм, написаних на Java з викориситанням архітектури клієнт/сервер можна підвищити ступінь конфіденційності. База даних тестових запитань знаходиться на сервері в каталозі з обмеженим доступом. Коли користувач загружає аплет, він автоматично підключається до програми-сервера, яка виконується на сервері і може видавати запитання з бази даних у відповідь на запит користувача. В такий спосіб унеможливлюється викрадення бази даних, за умови відсутності фізичного доступу до серверу у користувачів. public class Server implements Runnable { synchronized void addConnection(Socket s) { synchronized void set(String the_id, ClientConnection con) { synchronized void sendto(String dest, String body) { synchronized void broadcast(String exclude, String body) { synchronized void delete(String the_id) { synchronized void kill(ClientConnection c) { public void run() { public static void main(String args[]) { Цей невеликий клас реалізує програму-сервер. Точка вхолу програми - функція main. В програмі створюється головний потік, в якому створюється об’єкт стандартного класу ServerSocket. Цей об’єкт приєднується до певного порта і в циклі здійснюється перевірка на підключення клієнта до порта. В разі такого підключення створюється об’єкт типу ClientConnection, в якому реалізований потік по опитуванню сокета, до якого підключений клієнт, та обробка протокольних команд. Клас Server є універсальним і нічого не знає про повідомлення, якими обмінюються гравці (клієнти). В ньому реалізоване лише приєднання/від’єднання клієнтів, надсилання строки певному клієнту та функція broadcast яка, як зрозуміло з назви, надсилає повідомлення усім зареєстрованим клієнтам. class ClientConnection implements Runnable { public ClientConnection(Server srv, Socket s, int i) { new Thread(this).start(); public String toString() { public String getHost() { public String getId() { public boolean isBusy() { public void setBusy(boolean b) { public void close() { public void write(String s) { private String readline() { static private final int NAME = 1; static private Hashtable keys = new Hashtable(); private int lookup(String s) { public void run() { Клас ClientConnection реалізує обмін інформацією з конкретним клієнтом. В ньому зберігається об’єкт класу Socket, до якого приєднаний цей клієнт, та створюється потік, в якому здійснюється періодична спроба читати з сокета. Якщо ця спроба завершується успіхом, тобто надійшло повідомлення від клієнта, це повідомлення аналізується і здійснюється відповідна реакція. Для здіснення цієї реакції викликаються методи класу Server, об’єкт якого передається класу ClientConnection в якості параметра конструктора. Крім того в цьому класі є метод, який здійснює безпосереднє надсилання інформації до клієнта. Коли серверу потрібно надіслати інформацію конкретному клієнтові, він викликає цей метод. import java.util.*; public class Client extends Applet { public void init() { public void start() { } public void stop() { void add(String id, String hostname, String name) { void delete(String id) { void chat(String id, String s) { void quit(String id) { private void nameEntered(String s) { } public boolean action(Event evt, Object arg) { return true; Цей клас є розширенням класу Applet, отже є аплетом. В цьому класі створюється об’єкт класу ServerConnection, через якій здійснюється обмін інформацією з сервером. Графічний інтерфейс цього класу представляє 3 області: поле вводу, в яке спочатку вводиться ім’я користувача, а потім - повідомлення, адресовані іншим клієнтам, список клієнтів, в якому треба обирати адресата, та текстова область в якій відбивається текст діалога. Метод action реалізує обробку події вводу тексту в область вводу. Методи add, delete, chat, nameEntered, quit є реакцією на наступні події: підключення нового клієнта, зникнення клієнта, надходження повідомлення від клієнта, ідентифікація та вихід. Ці методи визиваються класом ServerConnection при надходженні відповідних повідомлень, або ж всередині аплета, якщо джерелом події є сам клієнт. клас ServerConnection: class ServerConnection implements Runnable { public ServerConnection(Scrabblet sc, String site) throws IOException { Socket server = new Socket(site, port); private String readline() { void setName(String s) { void delete() { void setTo(String to) { void send(String s) { void chat(String s) { void quit() { private Thread t; void start() { void stop() { private static final int ID = 1; private int lookup(String s) { public void run() { Цей клас є дзеркальним відображенням класу ClientConnection. Але він більш тісно переплетений з класом Client. В ньому реалізований потік, який опитує сокет, через який клієнт під’єднано до сервера, здійснює аналіз надходячих повідомлень та викликає потрібні методи класу Client. Крім того в ньому є методи, які викликаються класом Client для відсилання інформації на сервер. Резюме. Таким чином Java технологія є дуже перспективною для застосквання в розробках неокомерційного спрямування. Обмеженість інструментарію Java не проявляється в проектах невеликого обсягу і з лихвою компенсується простотою програмування розподілених програм, які працюють з мережею Internet/Intranet . Переносимість Java програм спрощує обмін навчальними програмами між різними навчальними закладими, відкрииває можливість сумісних розробок та створення стандартних навчальних програм, наприклад для шкіл. Крім того, дуже привабливою з точки зору ефективності, залишається ідея втілення в навчальних закладах мережевих комп’ютерів (Network Computers), які працюють на базі Java, замість звичних персональних комп’ютерів (Personal Computers). На останок можна згадати про те що Java добре підтримує національні абетки, оскільки розроблялася для інтернаціональної мережі Internet. Ця обставина теж є важливою рисою в умовах України.
Джерела інформації: | |
Просмотров: 395 | Загрузок: 96 | |