Java технологія. Основні риси та перспективи застосування. P>
Зміст.
| Походження Java. | 2 |
| Безпечність. | 2 |
| Ефективність. | 3 |
| а) прозорість інтерфейсів; | |
| б) легкість програмування; | |
| Об'єктно-орієнтована спрямованість. | 4 |
| Стійкість до помилок. | 4 |
| Підтримка багатопоточності. | 5 |
| Незалежність від архітектури. | 5 |
| Переваги інтерпретованості в поєднанні з високою продуктивністю. | 6 |
| Розподіленість. | 6 |
| Доступність інструментарія. | 7 |
| Перспективи застосування | 7 |
| Резюме. | 20 |
| Джерела інформації. | 21 | p>
. P>
Походження Java. P>
Мова програмування Java зародилася в 1991р. в лабораторіях компанії
Sun Microsystems inc. Як не дивно, поштовхом для створення Java сталазовсім не Internet. Головним мотивом була потреба в мові програмування, якане залежала б від платформи (тобто від архітектури) і яку можна було бвикористовувати для створення програмного забезпечення, яке вбудовується врізноманітні побутові електронні прилади, такі як мобільні засоби зв'язку,пристрої дистанційного управління тощо. Розробка першої робочої версіїзайняла 18 місяців і вона мала назву «Oak», але 1995 р.. проект бувперйменованій на «Java». p>
Період становлення Java співпав за часом з розквітом міжнародноїінформаційної служби World Wide Web. Ця обставина відіграла вирішальну рольв іайбутньому Java, оскільки Web теж вимагала переносимих програм. Якнаслідок, були зміщені акценти в розробці Sun з побутової електроніки напрограмування для Internet. p>
Безпечність. P>
World Wide Web висунула Java на передній край програмування, і Java,у свою чергу, сильно вплинула і навіть змінила обличчя Internet, розширившиспектр об'єктів, які можуть розповсюджуватись у кіберпросторі. Програминової форми - аплети - завантажуються з віддаленого сервера і можутьзапускатися динамічно, тобто без участі користувача. До появи Java такийпідхід був неприпустимий з міркувань безпеки та переносимості. Уархітектурі аплетів зроблено ряд штучних обмежень, які роблять їх цілкомбезпечними. Перш за все, Java є інтерпретованою мовою і простір ресурсів
Java-програми обмежений так званою віртуальною Java-машиною (VJM), яка можеконторолюваті поведінку програми і захищати систему від побічних ефектів,які можуть виникати з вини аплета. Крім того, в мові Java є додатковіобмеження, які не дозволять аплету стати «троянським конем». Зокрема, Java -аплет не може отримати доступ до локального жорсткого диску. При такійспробі генерується виключна ситуація. p>
Ефективність. P>
Оскільки аплети Java інтерпретуються, а не компілюються, то їхвиконання на різних платформах значно полегшується. В цьому випадкудостатньо створити для кожної платформи виконуючу Java-систему. Якщо існуєтака система для даної операційної системи, то будь-яка Java-програма можевиконуватись в даному середовищі без додаткової компіляції на ційплатформі. Проте Java не є інтерпретованою мовою в чистому розумінні.
Програма на Java компілюється. Результатом роботи компілятора Java єбайткод (bytecode). Байткод - це оптимізований набір команд, призначенийдля виконання уявним пристроєм - віртуальною Java-машиною. В такий спосібвитрати на інтерпретацію зводяться до мінімуму, оскільки байкод вже єоптімізованім, і досягається досить висока продуктивність Java-програм.
Наведені вище особливості дають підставу розглядати Java не як ще одну мовупрограмування, а як окрему інформаційну технологію. Таким чином,інтерпретація - це найлегший шлях до перенесення програм, реалізований в
Java технології. Незважаючи на те, що мова Java була розроблена врозрахунку на інтерпретацію, технічно немає нічого такого, що бперешкоджало компіляції байткод в виконуваний код. До байткод, якийпересилається по мережі, застосовується динамічна компіляція, але це ніякне впливає на переносимість та безпеку, оскільки роботу програми все щеконтролює виконуюча система. Такий підхід застосовано в багатьох виконуючихсистемах Java, що забезпечує продуктивність на рівні оптімізованого коду
З ++. p>
Мова Java є однією з наймолодших в сімействі мов програмування і буларозроблена з розрахунку на те, щоб професійний програміст міг легко їїопанувати та ефективно використовувати. За основу Java взятий синтаксис С + +
- Безсумнівно однієї з найбільш популярних мов програмування сучасності.
Проте, Java - це цілком самостійна мова програмування, і при її створенніне йшлося про будь-яку сумісність з С + +. Тому деякі механізми реалізовані в
Java інакше, а деякі зовсім відсутні. Ідеологічно ж Java побудована дещоінакше ніж С + +. Розробники Java грунтувалися на досвіді розробки програм на
С + + і прагнули позбутися можливостей, які зарекомендували себе непевними.
Так, в Java відсутня перегрузка операторів а також автоматичне приведеннянесумісних типів - конструкції, які при неуважно використанні є джереломважких для виявлення помилок. Взагалі, інтерфейси Java більш прості тапрозорі для розуміння. Написати на Java програму з графічним інтерфейсомзначно легше. Звичайно, простота інтерфейсів компенсується меншоюгнучкістю, бібліотека Java не така багата, як стандартні бібліотеки С/С + +.
Але згадаймо, що Java задуманий для використання на різних платформах ітому реалізує в собі найбільш стандартні можливості задля легшої адаптаціїпід конкретне середовище. p>
Об'єктно-орієнтована спрямованість. P>
Від С + + Java успадкувала потужний механізм об'єктно-орієнтованогопрограмування. Оскільки Java розроблювався «на пустому місці», тобто небуло потреби забезпечувати сумісність з попередніми версіями, розробникимали повну свободу мислення. В результаті був сформований ясний іпрагматичний підхід до об'єктів. Вільно переймаючи ідеї, якіреалізовувалися протягом останніх десятірічь, мові Java вдалося знайтирівновагу між парадигмою «все є об'єктом» і прагматичним підходом. Об'єктнамодель Java проста і легко розширюється, в той час як просі типи, як цілі,зберігаються як дані, що не є об'єктами, що дозволяє значно підвищитишвидкість при їх обробці. p>
Стійкість до помилок. P>
Багатоплатформеність середовища Web висуває надзвичайно високі вимогидо надійності програм. Як наслідок, при розробці Java приорітет буввідданий можливості створення стійких до помилок програм. Java звільняєпрограміста від хвилювань з приводу багатьох поширених причин, яківикликають помилки програмування. Як вже згадувалося, Java є строготіпіованою мовою програмування. Ще виконуюча система Java бере на себе
«Прибирання сміття», тобто автоматично звільняє пам'ять, яка буларозподілена динамічно. Звичайно, це дещо знижує ефективність коду, алезапобігає типових помилок, коли програміст забуває звільнити виділенупам'ять, або, навпаки, звільняє пам'ять, яка ще використовується. Javaпідтримує об'єктно-орієнтовану обробку виключних ситуацій подібно до С + +.
Але на відміну від С + + в Java обробка виключних ситуацій є обов'язкувою.
Тобто неможливо скомпілювати програму, яка відкриває файл, не обробившиможливі помилки типу «файл не знайдено», які виникають при цьому. Добренаписана Java-програма може сама обробляти всі помилки часу виконання. p>
Підтримка багатопоточності. P>
Java розробляялася з орієнтацією на вимоги до створення інтерактивнихпрограм, які працюють з мережею. З цією метою Java підтримує багатопоточнепрограмування, яке дозволяє легко розробляти програми, що вікінують багатопроцесів одночасно. Виконання Java-програми засновано на елгантному, але втой самий час вісокоорганізованому рішенні багатопроцесової синхронізації,яке дозволяє вам створювати високоефективні інтерактивні системи. p>
Незалежність від архітектури. P>
Основним питанням для розробників Java стало питання довготривалостіта переносимості. Одна з головних проблем, із якою зустрілися програмісти,полягала в відсутності гарантій того, що написана сьогодні програма завтрапрацюватиме з тим же успіхом, причому на тій самій машині. Оновленняопераційної системи, модернізація процесора та зміна об'єму оперативноїпам'яті можуть призвести до збою програми. Рощзробнікі Java, прагнулизмінити цю ситуацію і прийняли декілька важких рішень відносно мови Java тапроцесу виконання Java-програми. Їх мета полягала в тому, щоб «одного разунаписане працювало всюди, в любий час і завжди ». Внаслідок цього Java єсистемою, яка легко розширюється за рахунок створення нових стандартнихкласів та бібліотек. p>
Переваги інтерпретованості в поєднанні з високою продуктивністю. P>
Як вже згадувалось, Java дозвляє створювати незалежні від платформипрограми шляхом компіляції в проміжне представлення, яке називаєтьсябайткод. Багато попередніх спроб зпроб знати розв'язок проблеминезалежності від платформи були зроблені за рахунок продуктивності.
Інтерпретуючі системи, подібні до BASIC, Perl, страждають на майженеподоланний дефіцит продуктивності. Це було враховано при створенні Java ..
Незважаючи на те, що Java є інтерпретованою мовою, генерація байткодів буларетельно оптимізована в такий спосіб, щоб одержуваний байткод можна булолегко перекладати в машинний код, який працює з дуже високоюпродуктивністю. Виконуючі системи такого роду не втрачають жодних перевагпереносимого коду. p>
Розподіленість. P>
Мова Java призначена для створення програм, які працюють врозподіленому середовищі Internet на базі протоколів TCP/IP. Насправдідоступ до ресурсів за допомогою URL відрізняється від доступу до файлу. Крімтого в Java наявний засіб передачі повідомлень в межах внутрішньогоадресного простору. Це дозволяє забеспечити віддалене виконання процедур.
Ці інтерфкйсі включені у пакет RMI (remote metod invocation). Цей засібпривносить високий рівень абстракції в програмування дл я середовищаклієнт/сервер. p>
Java-програми несуть у собі значний обсяг інформації про типи часувиконання (run-time type information), яка використовується для дозволудоступу до об'єктів під час роботи програми. Це дозволяє забезпечитибезпечну та оптимальну динамічну компонування. В такий спосіб досягаєтьсязахищеність середовища виконання аплетів. p>
Доступність інструментарію та ефективність розробок. P>
Зазначена вище простота програмування на Java є причиною того, щорозробки на Java коштуватимуть дешевше аналогічних на більш потужніх мовахпрограмування. Цьому ж сприяє і переносимість програм на Java, оскількиліквідуються витрати пов'язані з адаптацією програми на конкретнійплатформі. До того ж інтегровані програми-оболонки для розробки Javaпрограм коштують набагато дешевше (70-100 $) ніж аналогічні продукти C + +,
Delphi (~ 1000 $). А набір інструментарію для пакетної компіляції Javaпрограм JDK (Java Development Kit) є взагалі freeware. Тому платформу Javaможна рекомендувати як ідеальну для створення некомерційних програмнихпродуктів, зокрема для галузі освіти. p>
Перспективи застосування. P>
Програми на Java можуть знайти різне застосування в навчальному процесі:інтерактивні навчаючі програми (HTML в поєднанні з Java), програми-тести іособливо ділові ігри. Додаткові переваги можна отримати, якщо пістаті ціпрограми у вигляді аплетів, які ініціалізуються з Web сервера внутрішньоїмережі Intranet. У такий спосіб можна уникнути інсталяції програми набагатьох комп'ютерах - користувач просто запускає Web-броузер і загружаєпотрібну сторінку. Для тестових програм, написаних на Java з вікорісітаннямархітектури клієнт/сервер можна підвищити ступінь конфіденційності. Базаданих тестових запитань знаходиться на сервері в каталозі з обмеженимдоступом. Коли користувач загружає аплет, він автоматично підключається допрограми-сервера, яка виконується на сервері і може видавати запитання збази даних у відповідь на запит користувача. В такий спосібунеможлівлюється викрадення бази даних, за умови відсутності фізичногодоступу до серверу у користувачів. p>
Окреме питання - навчальні ділові ігри. Під такою грою розумітімемгру, за участю кількох користувачів, в якій мається на увазі динамічнийобмін інформацією між ними. Система безпеки Java накладає обмеження,внаслідок якого аплет може встановлювати з'єднання лише з хостом, з якоговін був завантажений і ні з яким більше. Але це обмеження легко обходиться:на сервері виконується програма-сервер, з якою з'єднуються усі клієнти ічерез яку здійснюється обмін інформацією. Таким чином така програма повиннамати архітектуру клієнт/сервер. В якості приклада наведу спрощену chat -програму. В ній реалізовані базові засоби для створення ділової гри. P>
Серверна частина програми взята з книги Нотон П. Шилдт Г. «Повнийдовідник по Java »:-Київ,« Діалектика », 1997 і є практично універсальноюдля програм такого класу. Можливе легке доопрацювання цієї програми в бікрозширення кількості протокольних команд. Клієнтська частина була написанамною. Програма працює наступним чином: користувач запускає аплет ізсервера, вводить свій ідентифікатор і бачить перелік ідентифікаторівкористувачів, які під'єднані до сервера. Після чого користувач має змогуобмінюватись повідомленнями з іншими. Користувач одержує повідомлення вразі під'єднання або від'єднання користувачів. p>
Програма складається з 4 класів: Server, ClientConnection, Client та
ServerConnection. Перші 2 класи відносяться до серверної частини, другі 2 --до клієнтської. p>
Клас Server:import java.net .*;import java.io. *;import java.util .*; p>
public class Server implements Runnable (private int port = 6564; private Hashtable idcon = new Hashtable (); private int id = 0; static final String CRLF = "rn"; p>
synchronized void addConnection (Socket s) ( p>
ClientConnection con = new ClientConnection (this, s, id); id + +;
) p>
synchronized void set (String the_id, ClientConnection con) (idcon.remove (the_id); con.setBusy (false); p>
Enumeration e = idcon.keys (); while (e.hasMoreElements ()) ( p>
String id = (String) e.nextElement (); p>
ClientConnection other = (ClientConnection) idcon.get (id); if (! other.isBusy ()) con.write ( "add" + other + CRLF); p>
) idcon.put (the_id, con); broadcast (the_id, "add" + con);
) p>
synchronized void sendto (String dest, String body) ( p>
ClientConnection con = (ClientConnection) idcon.get (dest); if (con! = null) (con.write (body + CRLF); p>
)
) p>
synchronized void broadcast (String exclude, String body) ( p>
Enumeration e = idcon.keys (); while (e.hasMoreElements ()) ( p>
String id = (String) e.nextElement (); if (! exclude.equals (id)) ( p>
ClientConnection con = (ClientConnection) idcon.get (id) ; con.write (body + CRLF); p>
) p>
)
) p>
synchronized void delete (String the_id) (broadcast (the_id, " delete "+ the_id);
) p>
synchronized void kill (ClientConnection c) (if (idcon.remove (c.getId ()) == c) (delete (c.getId ()) ; p>
)
) p>
public void run () (try ( p>
ServerSocket acceptSocket = new ServerSocket (port); p>
System.out.println ( "Server listening on port" + port); while (true) ( p>
Socket s = acceptSocket.accept (); addConnection (s); p>
) p>
) catch (IOException e) ( p>
System.out.println ( "accept loop IOException:" + e); p>
)
) p>
public static void main (String args []) (new Thread (new Server ()). start (); try ( p>
Thread.currentThread (). join (); p>
) catch (InterruptedException e) ( p>
)
)
) p>
Цей невеликий клас реалізує програму-сервер. Точка вхолу програми - функціяmain. В програмі створюється головний потік, в якому створюється об'єктстандартного класу ServerSocket. Цей об'єкт приєднується до певного порту ів циклі здійснюється перевірка на підключення клієнта до порту. У разітакого підключення створюється об'єкт типу ClientConnection, в якомуреалізований потік по опитування сокета, до якого підключений клієнт, таобробка протокольних команд. Клас Server є універсальним і нічого не знаєпро повідомлення, якими обмінюються гравці (клієнти). В ньому реалізованелише приєднання/від 'єднання клієнтів, надсилання строки певному клієнту тафункція broadcast яка, як зрозуміло з назви, надсилає повідомлення усімзареєстрованим клієнтам. p>
Клас ClientConnection:import java.net .*;import java.io. *;import java.util .*; p>
class ClientConnection implements Runnable (private Socket sock; private DataInputStream in; private OutputStream out; private String host; private Server server; private static final int bufsize = 8192; private byte buffer [] = new byte [bufsize]; private static final String CRLF = "rn"; private String name = null; private String id; private boolean busy = false; p>
public ClientConnection (Server srv, Socket s , int i) (try (server = srv; sock = s; in = new DataInputStream (s.getInputStream ()); out = s.getOutputStream (); host = s.getInetAddress (). getHostName (); id = " "+ i; p>
// tell the new one who it is ... write ( "id" + id + CRLF); p>
new Thread (this). start (); p>
) catch (IOException e) ( p>
System . out.println ( "failed ClientConnection" + e); p>
)
) p>
public String toString () (return id + "" + host + "" + name ;
) p>
public String getHost () (return host;
) p>
public String getId () (return id;
) p> < p> public boolean isBusy () (return busy;
) p>
public void setBusy (boolean b) (busy = b;
) p>
public void close () (server.kill (this); try (sock.close ();// closes in and out too. p>
) catch (IOException e) ( p>
)
) p>
public void write (String s) (byte buf [] = new byte [s.length ()]; s.getBytes (0, buf.length, buf, 0); try (out.write (buf, 0, buf.length); p>
) catch (IOException e) (close (); p>
)
) p>
private String readline () (try (return in.readLine (); p>
) catch (IOException e) (return null; p>
)
) p>
static private final int NAME = 1; static private final int QUIT = 2; static private final int TO = 3; static private final int DELETE = 4; p>
static private Hashtable keys = new Hashtable (); static private String keystrings [] = ( p>
"", "name", "quit", "to", "delete"
); static (for (int i = 0; i ) p> private int lookup (String s) ( p>
Integer i = (Integer) keys.get (s); return i == null? -1: I.intValue ();
) p>
public void run () ( p>
String s; p>
StringTokenizer st;out: while ((s = readline ())! = null) (st = new StringTokenizer (s); p>
String keyword = st.nextToken (); switch (lookup (keyword)) (default: p>
System.out.println ( "bogus keyword:" + keyword + "r"); break; case NAME: name = st.nextToken () + p>
(st.hasMoreTokens ()? "" + st.nextToken (CRLF): ""); p>
System.out.println ( "[" + new Date () + "]" + this + "r"); server.set (id, this); break; case QUIT: break out; case TO: p>
String dest = st.nextToken (); p>
String body = st.nextToken ( CRLF); server.sendto (dest, body); break; case DELETE: busy = true; server.delete (id); break; p>
) p>
) close ();
)
) p>
Клас ClientConnectionреалізує обмін інформацією з конкретним клієнтом. Уньому зберігається об'єкт класу Socket, до якого приєднаний цей клієнт, тастворюється потік, в якому здійснюється періодична спроба читати з сокета.
Якщо ця спроба завершується успіхом, тобто надійшло повідомлення відклієнта, це повідомлення аналізується і здійснюється відповідна реакція.
Для здіснення цієї реакції викликаються методи класу Server, об'єкт якогопередається класу ClientConnection в якості параметра конструктора. Крімтого в цьому класі є метод, який здійснює безпосереднє надсиланняінформації до клієнта. Коли серверу потрібно надіслати інформаціюконкретному клієнтові, він викликає цей метод.клас Client: p>
import java.util .*;import java.io. *;import java.net .*;import java.awt .*;import java.applet .*; p>
public class Client extends Applet (private ServerConnection server; private String serverName; private boolean single = false; private boolean seen_pass = false; private boolean name_set = false; private String name; private String others_name; private Panel topPanel; private Label prompt; private TextField namefield; private Button done; private TextField chatfield; private List idList; private TextArea dialogArea; p>
public void init () (setLayout (new BorderLayout ( )); serverName = getCodeBase (). getHost (); if (serverName.equals ("")) serverName = "localhost"; prompt = new Label ( "Enter id:"); namefield = new TextField (30); topPanel = new Panel (); topPanel.setBackground (new Color (255, 255, 200)); topPanel.add (prompt); topPanel.add (namefield); add ( "North", topPanel); idList = new List (10 , false); add ( "West", idList); dialogArea = new TextArea (); dialogArea.setEditable (false); add ( "Center", dialogArea);
) p>
public void start () (try (showStatus ( "Connecting to" + serverName); server = new ServerConnection (this, serverName); server.start (); showStatus ( "Connected:" + serverName); p>
) catch (Exception e) (single = true; p>
)
) p>
public void stop () (if (! single) server.quit ();
)
void add (String id, String hostname, String name) (delete (id);// in case it is already there. idList.addItem ( "(" + id + ")" + name + "@" + hostname);
) p>
void delete (String id) (for (int i = 0; i < idList.countItems (); i + +) ( p>
String s = idList.getItem (i); s = s.substring (s.indexOf ("(") + 1, s.indexOf ( ")" )); if (s.equals (id)) (idList.delItem (i); break; p>
) p>
) if (idList.countItems () == 0) showStatus ( "Wait for other players to arrive .");< br>) private String getName (String id) (for (int i = 0; i String s = idList.getItem (i); p>
String id1 = s.substring (s.indexOf ("(") + 1, s.indexOf (")")); if (id1.equals ( id)) (return s.substring (s.indexOf ( "") + 3, s.indexOf ("@")); p>
) p>
) return null;
) p>
void chat (String id, String s) (dialogArea.appendText (id + ":" + s + "n ");// append showStatus (id +": "+ s); < br>) p>
void quit (String id) (showStatus (id + "just quit."); delete (id);
) p>
private void nameEntered (String s ) (if (s.equals ("")) return; p>
System.out.println (s); name = s; if (! single) p>
(server.setName (name); showStatus ( "Wait for other players to arrive ."); p>
) prompt.setText (" You say: "); name_set = true; p>
) p>
public boolean action (Event evt, Object arg) ( p>
System.out.println ( "a"); if (evt.id == Event.ACTION_EVENT) if (evt.target == namefield) (if (name_set) (dialogArea.appendText (name + ":" + namefield.getText () + "n"); if (! single) server.sendTo ((String) arg, idList.getSelectedItem () ); p>
) else nameEntered ((String) arg); namefield.setText (""); p>
) p>
return true;
) < br>) p>
Цей клас є розширенням класу Applet, отже є аплет. У цьому класістворюється об'єкт класу ServerConnection, через якій здійснюється обмінінформацією з сервером. Графічний інтерфейс цього класу представляє 3області: поле вводу, в яке спочатку вводиться ім'я користувача, а потім --повідомлення, адресовані іншим клієнтам, список клієнтів, в якому требаобирати адресата, та текстова область в якій відбивається текст діалога.
Метод action реалізує обробку події вводу тексту в область вводу. Методиadd, delete, chat, nameEntered, quit є реакцією на наступні події:підключення нового клієнта, зникнення клієнта, надходження повідомлення відклієнта, ідентифікація та вихід. Ці методи визивають класом
ServerConnection при надходженні відповідних повідомлень, або ж всерединіАплету, якщо джерелом події є сам клієнт. p>
клас ServerConnection:import java.io. *;import java.net .*;import java.util .*; p>
class ServerConnection implements Runnable (void sendTo (String s, String id) p>
(if (id! = null) out.println ( "to" + id + "" + s); p>
) private static final int port = 6564; private static final String CRLF = "rn"; private DataInputStream in; private PrintStream out; private String id, toid = null; private Client client; p>
public ServerConnection (Scrabblet sc, String site) throws IOException ( p>
Socket server = new Socket (site, port); in = new DataInputStream (server.getInputStream ( )); out = new PrintStream (server.getOutputStream (), true);
)public ServerConnection (Client c, String site) throws IOException (client = c; p>
Socket server = new Socket (site, port); in = new DataInputStream (server.getInputStream ()); out = new PrintStream (server.getOutputStream (), true);
) p>
private String readline () (try (return in.readLine (); p>
) catch (IOException e) ( return null; p>
)
) p>
void setName (String s) (out.println ( "name" + s);
) p>
void delete () (out.println ( "delete" + id);
) p>
void setTo (String to) (toid = to;
) p>
void send (String s) (if (toid! = null) out.println ( "to" + toid + "" + s);
) p>
void chat (String s) (send ( "chat" + id + "" + s);
) p>
void quit () (send ( "quit" + id);// tell other player out.println ( "quit"); stop ();
) p>
private Thread t; p >
void start () (t = new Thread (this); t.start ();
) p>
void stop () (t.stop ();
)
private static final int ID = 1; private static final int ADD = 2; private static final int DELETE = 3; private static final int CHAT = 4; private static final int QUIT = 5; private static Hashtable keys = new Hashtable (); private static String keystrings [] = ( p>
"", "id", "add", "delete", "chat", p>
"quit"
); static (for (int i = 0; i ) p> private int lookup (String s) ( p>
Integer i = (Integer) keys.get (s); return i == null? -1: I.intValue ();
) p>
public void run () ( p>
String s; p>
StringTokenizer st; while ((s = readline ())! = null) (st = new StringTokenizer (s); p>
String keyword = st.nextToken (); switch (lookup (keyword)) (default: p>
System.out.println ( "bogus keyword:" + keyword + "r"); break; case ID: id = st.nextToken (); break; case ADD: ( p>
String id = st . nextToken (); p>
String hostname = st.nextToken (); p>
String name = st.nextToken (CRLF); client.add (id, hostname, name);
) break; case CHAT: ( p>
String from = st.nextToken (); client.chat (from, st.nextToken (CRLF )); p>
) break; case QUIT: ( p>
String from = st.nextToken (); client.quit (from); p>
) break; p>
) p>
)
)
) p>
Цей клас є дзеркальним відображенням класу ClientConnection. Але він більштісно переплетений з класом Client. В ньому реалізований потік, який опитуєсокет, через який клієнт під'єднано до сервера, здійснює аналіз надходячиповідомлень та викликає потрібні методи класу Client. Крім того в ньому єметоди, які викликаються класом Client для відсилання інформації на сервер. p>
Ця програма легко може бути модифікована в напрямку розширеннякількості протокольних команд та ускладнення клієнта за рахунок додаванняспецифічних реакцій на нові команди. В класі ClientConnection може бутиускладнена реакція на під'єднання клієнта. Наприклад, клієнту можевидаватися інформація про початкові умови гри. Таким чином наведенапрограма може служити скелетом для створення більш складних. Можна дещоурізати класи Client та ServerConnection, залишивши в них лише базовіфункції з тим, щоб потім розширювати їх шляхом механізму об'єктногоуспадкування. p>
Резюме. P>
Таким чином Java технологія є дуже перспективною для застосквання врозробках неокомерційного спрямування. Обмеженість інструментарію Java непроявляється в проектах невеликого обсягу і з лихвою компенсуєтьсяпростотою програмування розподілених програм, які працюють з мережею
Internet/Intranet. Переносимість Java програм спрощує обмін навчальнимипрограмами між різними навчальними закладами, відкрііває можливістьсумісних розробок та створення стандартних навчальних програм, наприкладдля шкіл. Крім того, дуже привабливою з точки зору ефективності,залишається ідея втілення в навчальних закладах мережевих комп'ютерів
(Network Computers), які працюють на базі Java, замість звичнихперсональних комп'ютерів (Personal Computers). На останок можна згадати проте що Java добре підтримує національні абетки, оскільки розроблялася дляінтернаціональної мережі Internet. Ця обставина теж є важливою рисою вумовах України. p>
Джерела інформації: p>
1. http://www.sun.com/ Специфікація мови програмування Java.
2. Нотон Патрік, Шилдт Герберт. Повний довідник по Java.: Пер. з англ.: -
К.: Диалектика, 1997.
3. Страуструп Б'ярне. Мова програмування С + +.: Пер. з англ.: - К.:
ДиаСофт, 1993.
4. Магічні зерна Sun. COMPUTER WORLD Киев, № 29-30 (19 серпня 1998) с.10.
5. Ціни на програмні продукти. (По матеріалам Hot-line). P>