Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Java технологія і основні риси та перспективи застосування

РефератДопомога в написанніДізнатися вартістьмоєї роботи

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

Java технологія і основні риси та перспективи застосування (реферат, курсова, диплом, контрольна)

Java технологія. Основні риси та перспективи застосування.

Зміст. |Походження Java. |2 | |Безпечність. |2 | |Ефективність. |3 | |а) прозорість інтерфейсів; | | |б) легкість програмування; | | |Об'єктно-орієнтована спрямованість. |4 | |Стійкість до помилок. |4 | |Підтримка багатопоточності. |5 | |Незалежність від архітектури. |5 | |Переваги інтерпретованості в поєднанні із високою продуктивністю. |6 | |Розподіленість. |6 | |Доступність інструментарія. |7 | |Перспективи застосування |7 | |Резюме. |20 | |Джерела інформації. |21 |.

.

Походження Java.

Мова програмування Java зародилася в 1991р. в лабораторіях компанії Sun Microsystems inc. як не чудово, поштовхом для створення Java стала зовсім не Internet. Головним мотивом був потреба в мові програмування, котра не залежала б від платформи (тобто від архітектури) й якої можна було б б використовувати для створення програмного забезпечення, яку вбудовується в різноманітні побутові електронні прилади, такі як мобільні засоби зв’язку, пристрої дистанційного управління тощо. Розробка першої робочої версії зайняла 18 місяців й вон мала назву «Oak», але й 1995 р. проект був перйменований на «Java».

Період становлення Java співпав за годиною із розквітом міжнародної інформаційної служби World Wide Web. Ця обставина відіграла вирішальну роль в иайбутньому Java, оскільки Web теж вимагала переносимих програм. як наслідок, були зміщені акценти в розробці Sun із побутової електроніки на програмування для Internet.

Безпечність.

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 інакше, а деякі зовсім відсутні. Ідеологічно ж Java побудована дещо інакше ніж З++. Розробники 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-програми несуть у собі значний обсяг інформації про типи години виконання (run-time type information), котра використовується для дозволу доступу до об'єктів под годину роботи програми. Це дозволяє забезпечити безпечну та оптимальну динамічну компонування. У такий спосіб досягається захищеність середовища виконання аплетів.

Доступність інструментарію та ефективність розробок.

Зазначена вище простота програмування на Java є причиною того, що розробки на Java коштуватимуть дешевше аналогічних на более потужніх мовах програмування. Цьому ж сприяє й переносимість програм на Java, оскільки ліквідуються витрати пов’язані із адаптацією програми на конкретній платформі. Доти ж інтегровані програми-оболонки для розробки Java програм коштують набагато дешевше (70−100 $) ніж аналогічні продукти З++, Delphi (~1000 $). А набір інструментарію для пакетної компіляції Java програм JDK (Java Development Kit) є взагалі freeware. Тому платформу Java можна рекомендувати як ідеальну для створення некомерційних програмних продуктів, зокрема для галузі освіти.

Перспективи застосування.

Програми на Java можуть знайти різне застосування в навчальному процесі: інтерактивні навчаючі програми (HTML в поєднанні із Java), програми-тести й особливо ділові ігри. Додаткові переваги можна отримати, якщо пистати ці програми у вигляді аплетів, котрі ініціалізуються із Web серверу внутрішньої мережі Intranet. У такий спосіб можна уникнути інсталяції програми на багатьох комп’ютерах — користувач просто запускає Web-броузер й загружає потрібну сторінку. Для тестових програм, написаних на Java із викориситанням архітектури клієнт/сервер можна підвищити ступінь конфіденційності. База даних тестових запитань знаходиться на сервері в каталозі із обмеженим доступом. Колі користувач загружає аплет, він автоматично підключається до програми-сервера, Яка виконується на сервері й може видавати запитання із бази даних у відповідь на запит користувача. У такий спосіб унеможливлюється викрадення бази даних, за умови відсутності фізичного доступу до серверу у користувачів.

Окреме запитання — навчальні ділові ігри. Під такою грою розумітимем гру, за участю кількох користувачів, в якій мається на увазі динамічний обмін інформацією між ними. Система безпеки Java накладає обмеження, внаслідок якого аплет може встановлювати з'єднання лише із хостом, із якого він був загружений й ані із яким понад. Алі це обмеження легко обходитися: на сервері виконується програма-сервер, із якою з'єднуються усі клієнти й через якої здійснюється обмін інформацією. Таким чином така програма винна матір архітектуру клієнт/сервер. У якості приклада наведу спрощену chatпрограму. У ній реалізовані базові засоби для створення ділової гри.

Серверна частина програми узята із книжки Нотон П. Шилдт Р. «Повний довідник по Java»: -Киев, «Діалектика», 1997 й є практично універсальною для програм такого класу. Можливе легке доопрацювання цієї програми в бік розширення кількості протокольних команд. Клієнтська частина був написана мною. Програму працює наступним чином: користувач запускає аплет з серверу, вводити свій ідентифікатор й бачить перелік ідентифікаторів користувачів, котрі під'єднані до серверу. Після чого користувач має змогу обмінюватись повідомленнями із іншими. Користувач одержує повідомлення в разі під'єднання чи від'єднання користувачів.

Програму складається із 4 класів: Server, ClientConnection, Client та ServerConnection. Перші 2 класи відносяться до серверної частини, другі 2 — до клієнтської.

Клас Server: import java.net.*; import java.io.*; import java.util.*;

public class Server implements Runnable { private int port = 6564; private Hashtable idcon = new Hashtable (); private int id = 0; static final String CRLF = «rn » ;

synchronized void addConnection (Socket p. s) {.

ClientConnection con = new ClientConnection (this, p. s, id); id++; }.

synchronized void set (String the_id, ClientConnection con) { idcon. remove (the_id); con. setBusy (false);

Enumeration e = idcon. keys (); while (e.hasMoreElements ()) {.

String id = (String)e.nextElement ();

ClientConnection other = (ClientConnection) idcon. get (id); if (!other.isBusy ()) con. write («add «+ other + CRLF);

} idcon. put (the_id, con); broadcast (the_id, «add «+ con); }.

synchronized void sendto (String dest, String body) {.

ClientConnection con = (ClientConnection)idcon.get (dest); if (con ≠ null) { con. write (body + CRLF);

} }.

synchronized void broadcast (String exclude, String body) {.

Enumeration e = idcon. keys (); while (e.hasMoreElements ()) {.

String id = (String)e.nextElement (); if (!exclude.equals (id)) {.

ClientConnection con = (ClientConnection) idcon. get (id); con. write (body + CRLF);

}.

} }.

synchronized void delete (String the_id) { broadcast (the_id, «delete «+ the_id); }.

synchronized void kill (ClientConnection з) { if (idcon.remove (c.getId ()) == з) { delete (c.getId ());

} }.

public void run () { try {.

ServerSocket acceptSocket = new ServerSocket (port);

System.out.println («Server listening on port «+ port); while (true) {.

Socket p. s = acceptSocket. accept (); addConnection (s);

}.

} catch (IOException e) {.

System.out.println («accept loop IOException: «+ e);

} }.

public static void main (String args[]) { new Thread (new Server ()).start (); try {.

Thread.currentThread ().join ();

} catch (InterruptedException e) {.

} } }.

Цей невеликий клас реалізує програму-сервер. Крапка вхолу програми — функція main. У програмі створюється головний потік, в якому створюється об'єкт стандартного класу ServerSocket. Цей об'єкт приєднується у порт й в циклі здійснюється перевірка на підключення клієнта у порт. У разі такого підключення створюється об'єкт типу ClientConnection, в якому реалізований потік по опитуванню сокета, до якого підключений клієнт, та обробка протокольних команд. Клас Server є універсальним й нічого не знає про повідомлення, якими обмінюються гравці (клієнти). У ньому реалізоване лише приєднання/від'єднання клієнтів, надсилання рядки певному клієнту та функція broadcast Яка, як зрозуміло із назви, надсилає повідомлення всім зареєстрованим клієнтам.

Клас ClientConnection: import java.net.*; import java.io.*; import java.util.*;

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;

public ClientConnection (Server srv, Socket p. s, int і) { try { server = srv; sock = p. s; in = new DataInputStream (s.getInputStream ()); out = s. getOutputStream (); host = s. getInetAddress ().getHostName (); id = «» + i;

// tell the new one who it is… write («id «+ id + CRLF);

new Thread (this).start ();

} catch (IOException e) {.

System.out.println («failed ClientConnection «+ e);

} }.

public String toString () { return id + «» + host + «» + name; }.

public String getHost () { return host; }.

public String getId () { return id; }.

public boolean isBusy () { return busy; }.

public void setBusy (boolean b) { busy = b; }.

public void close () { server. kill (this); try { sock. close (); // closes in and out too.

} catch (IOException e) {.

} }.

public void write (String p. s) { byte buf[] = new byte[s.length ()]; s. getBytes (0, buf. length, buf, 0); try { out. write (buf, 0, buf. length);

} catch (IOException e) { close ();

} }.

private String readline () { try { return in. readLine ();

} catch (IOException e) { return null;

} }.

static private final int NAME = 1; static private final int QUIT = 2; static private final int TO = 3; static private final int DELETE = 4;

static private Hashtable keys = new Hashtable (); static private String keystrings[] = {.

" «, «name », «quit », «to », «delete «}; static { for (int і = 0; і < keystrings. length; і++) keys. put (keystrings[i], new Integer (i)); }.

private int lookup (String p. s) {.

Integer і = (Integer) keys. get (s); return і == null? -1: i. intValue (); }.

public void run () {.

String s;

StringTokenizer st; out: while ((p.s = readline ()) ≠ null) { st = new StringTokenizer (s);

String keyword = st. nextToken (); switch (lookup (keyword)) { default:

System.out.println («bogus keyword: «+ keyword + «r »); break; case NAME: name = st. nextToken () +.

(st.hasMoreTokens ()? «» + st. nextToken (CRLF): «»);

System.out.println («[ «+ new Date () + «] «+ this + «r »); server. set (id, this); break; case QUIT: break out; case TO:

String dest = st. nextToken ();

String body = st. nextToken (CRLF); server. sendto (dest, body); break; case DELETE: busy = true; server. delete (id); break;

}.

} close (); } }.

Клас ClientConnection реалізує обмін інформацією із конкретним клієнтом. У ньому зберігається об'єкт класу Socket, до якого приєднаний цей клієнт, та створюється потік, в якому здійснюється періодична спроба читати із сокета. Якщо ця спроба завершується успіхом, тобто надійшло повідомлення від клієнта, це повідомлення аналізується й здійснюється відповідна реакція. Для здіснення цієї реакції викликаються методи класу Server, об'єкт якого передається класу ClientConnection в якості параметра конструктора. Крім цього у цьому класі є метод, який здійснює безпосереднє надсилання інформації до клієнта. Колі серверу потрібно надіслати інформацію конкретному клієнтові, він викликає цей метод. клас Client:

import java.util.*; import java.io.*; import java.net.*; import java.awt.*; import java.applet.*;

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;

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); }.

public void start () { try { showStatus («Connecting to «+ serverName); server = new ServerConnection (this, serverName); server. start (); showStatus («Connected: «+ serverName);

} catch (Exception e) { single = true;

} }.

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); }.

void delete (String id) { for (int і = 0; і < idList. countItems (); і++) {.

String p. s = idList. getItem (i); p. s = s. substring (s.indexOf («(«) + 1, s. indexOf («) »)); if (s.equals (id)) { idList. delItem (i); break;

}.

} if (idList.countItems () == 0) showStatus («Wait for other players to arrive. »); } private String getName (String id) { for (int і = 0; і < idList. countItems (); і++) {.

String p. s = idList. getItem (i);

String id1 = s. substring (s.indexOf («(«) + 1, s. indexOf («) »)); if (id1.equals (id)) { return s. substring (s.indexOf («») + 3, s. indexOf («@ »));

}.

} return null; }.

void chat (String id, String p. s) { dialogArea. appendText (id + ": «+ p. s+ „n “);//append showStatus (id + »: «+ p. s); }.

void quit (String id) { showStatus (id + «just quit. »); delete (id); }.

private void nameEntered (String p. s) { if (s.equals («»)) return;

System.out.println (s); name = p. s; if (!single).

{ server. setName (name); showStatus («Wait for other players to arrive. »);

} prompt. setText («You say: »); name_set = true;

}.

public boolean action (Event evt, Object arg) {.

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 ());

} else nameEntered ((String)arg); namefield. setText («»);

}.

return true; } }.

Цей клас є розширенням класу Applet, отже є аплетом. У цьому класі створюється об'єкт класу ServerConnection, через якій здійснюється обмін інформацією із сервером. Графічний інтерфейс цого класу представляє 3 області: полі введення, в яку спочатку вводитися ім'я користувача, а потім — повідомлення, адресовані іншим клієнтам, список клієнтів, в якому треба обирати адресата, та текстова область в якій відбивається текст діалога. Метод action реалізує обробку події введення тексту до області введення. Методи add, delete, chat, nameEntered, quit є реакцією на наступні події: підключення нового клієнта, зникнення клієнта, надходження повідомлення від клієнта, ідентифікація та вихід. Ці методи визиваються класом ServerConnection при надходженні відповідних повідомлень, чи ж всередині аплета, якщо джерелом події є сам клієнт.

клас ServerConnection: import java.io.*; import java.net.*; import java.util.*;

class ServerConnection implements Runnable { void sendTo (String p. s, String id).

{ if (id≠ null) out. println («to «+id+ «» +s);

} 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;

public ServerConnection (Scrabblet sc, String site) throws IOException {.

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;

Socket server = new Socket (site, port); in = new DataInputStream (server.getInputStream ()); out = new PrintStream (server.getOutputStream (), true); }.

private String readline () { try { return in. readLine ();

} catch (IOException e) { return null;

} }.

void setName (String p. s) { out. println («name «+ p. s); }.

void delete () { out. println («delete «+ id); }.

void setTo (String to) { toid = to; }.

void send (String p. s) { if (toid ≠ null) out. println («to «+ toid + «» + p. s); }.

void chat (String p. s) { send («chat «+ id + «» + p. s); }.

void quit () { send («quit «+ id); // tell other player out. println («quit »); stop (); }.

private Thread t;

void start () { t = new Thread (this); t. start (); }.

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[] = {.

" «, «id », «add », «delete », «chat » ,.

" quit «}; static { for (int і = 0; і < keystrings. length; і++) keys. put (keystrings[i], new Integer (i)); }.

private int lookup (String p. s) {.

Integer і = (Integer) keys. get (s); return і == null? -1: i. intValue (); }.

public void run () {.

String s;

StringTokenizer st; while ((p.s = readline ()) ≠ null) { st = new StringTokenizer (s);

String keyword = st. nextToken (); switch (lookup (keyword)) { default:

System.out.println («bogus keyword: «+ keyword + «r »); break; case ID: id = st. nextToken (); break; case ADD: {.

String id = st. nextToken ();

String hostname = st. nextToken ();

String name = st. nextToken (CRLF); client. add (id, hostname, name);

} break; case CHAT: {.

String from = st. nextToken (); client. chat (from, st. nextToken (CRLF));

} break; case QUIT: {.

String from = st. nextToken (); client. quit (from);

} break;

}.

} } }.

Цей клас є дзеркальним відображенням класу ClientConnection. Алі він более тісно переплетень із класом Client. У ньому реалізований потік, який опитує сокет, через який клієнт під'єднано до серверу, здійснює аналіз надходячих повідомлень та викликає потрібні методи класу Client. Крім цього у ньому є методи, котрі викликаються класом Client для відсилання інформації на сервер.

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

Резюме.

Таким чином Java технологія є дуже перспективною для застосквання в розробках неокомерційного спрямування. Обмеженість інструментарію Java не проявляється в проектах невеликого обсягу й із лихвою компенсується простотою програмування розподілених програм, котрі працюють із мережею Internet/Intranet. Переносимість Java програм спрощує обмін навчальними програмами між різними навчальними закладими, відкрииває можливість сумісних розробок та створення стандартних навчальних програм, наприклад для шкіл. Крім того, дуже привабливою із точки зору ефективності, залишається ідея втілення в навчальних заставах мережевих комп’ютерів (Network Computers), котрі працюють на базі Java, замість звичних персональних комп’ютерів (Personal Computers). На останок можна згадати про ті що Java добро підтримує національні абетки, оскільки розроблялася для інтернаціональної мережі Internet. Ця обставина теж є важливою рисою в умовах України.

Джерела інформації:

1. internet Специфікація мови програмування Java. 2. Нотон Патрік, Шилдт Герберт. Повний довідник по Java.: Пер. з анг.: — До.: Діалектика, 1997. 3. Страуструп Бьярн. Мова програмування З++.: Пер. з анг.: — До.: ДиаСофт, 1993. 4. Магічні зерна Sun. COMPUTER WORLD Київ, № 29−30 (19 серпня 1998) с. 10. 5. Ціни на програмні продукти. (По матеріалам Hot-line).

Показати весь текст
Заповнити форму поточною роботою