Yava технология.Основные черты и персрективи приложения


Содержание.

Происхождение Java.

Беспечность.

Эффективность.

а) выразительность интерфейсов; бы) легкость программирования;

Объектно-ориентированная направленность.

Стойкость к ошибкам.

Поддержка багатопоточности.

Независимость путем архитектуры.

Преимущества интерпретированной в сочетании из высокой производительностью.

Розподиленисть.

Доступность инструментария.

Перспективы применения

Резюме.

Источники информации.

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$ ) чем аналогичные продукты C, Delphi ( ~1000$). А ассортимент инструментария воеже пакетной компиляции Java программ JDK (Java Development Kit) глотать весь freeware. Поэтому платформу Java дозволительно внушать равновеликий идеальную воеже создания некоммерческих программных продуктов, в частности воеже отрасли образования.

Перспективы применения.

Программы для Java могут встречать разное прибавление в учебном процессе: интерактивные учащие программы (HTML в сочетании из Java), программы-тесты и особенно деловые игры. Дополнительные преимущества дозволительно получить, буде пистати эти программы в виде апплетов, которые будут инициализироваться из Web сервера внутренней бремя Intranet. Таким способом дозволительно избежать инсталляций программы для многих компьютерах - пользователь неизысканный запускает web-броузер и загружает нужную страницу. Для тестовых программ, написанных для Java из викориситанням архитектуры клиент/сервер дозволительно повысить разряд конфиденциальности. База данных тестовых вопросов находится для сервере в каталоге с ограниченным доступом. Когда пользователь загружает апплет, он автоматически подключается к программе-сервера, которая выполняется для сервере и может выдавать вопрос из базы данных в ответ для иск пользователя. Таким способом делается невозможным похищение базы данные, бытность условии отсутствия физического доступа к серверу у пользователей.

Отдельный вопрос - учебные деловые игры. Под такой игрой розумитимем игру, бытность участии нескольких пользователей, в которой имеется в виду динамический мена информацией между ними. Система безопасности Java налагает ограничение, в результате которого апплет может устанавливать сливание всего из хостом, из которого он был загружен и ни с которым больше. Но это ограничение необязательно обходится: для сервере выполняется программа-сервер, с которой соединяются классу. Возможна легкая доработка этой программы в край расширения количества протокольных команд. Клиентская осколки была написана мной. Программа работает следующим образом: пользователь запускает апплет из сервера, вводит особенный идентификатор и видит реестр идентификаторов пользователей, которые подсоединены к серверу. После чего пользователь имеет помогать обмениваться сообщениями с другими. Пользователь получает весть в случае подсоединения либо отсоединения пользователей.

Программа состоит из 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; частный Hashtable idcon = небывалый Hashtable(); частный int id = 0; статический заключительная Строка CRLF = "rn"; синхронизированный пустота addConnection(Гнездо s){ ClientConnection con = небывалый ClientConnection(это, s, id); id ; синхронизированный беспочвенный набор(Строка the_id, ClientConnection con){ idcon.remove(the_id); con.setBusy(ложь);

Перечисление e = idcon.keys(); пока (e.hasMoreElements()) {

Строка id = (Строка)e.nextElement(); ClientConnection другой = (ClientConnection) idcon.get(id); если (!other.isBusy()) con.write("добавьте " другой CRLF); idcon.put(the_id, con); передача(the_id, "добавляют " con); синхронизированный пустота sendto(Строка dest, тело Строки){ ClientConnection con = (ClientConnection)idcon.get(dest); если (con != беспочвенный указатель) { con.write(тело CRLF); синхронизированная пустая передача(Строка исключают, тело Строки){

Перечисление e = idcon.keys(); пока (e.hasMoreElements()) {

Строка id = (Строка)e.nextElement(); если (!exclude.equals(id)) { ClientConnection con = (ClientConnection) idcon.get(id); con.write(тело CRLF); синхронизированное мелочь удаление(Строка the_id){ передача(the_id, "удаление " the_id); синхронизированное мелочь убийство(ClientConnection c){ если (idcon.remove(c.getId()) == c) { удаление(c.getId()); общественный беспочвенный пробег() { попытка { ServerSocket acceptSocket = небывалый ServerSocket(порт); System.out.println("Сервер, слушающий для порту " порт); пока (истинный) {

Гнездо s = acceptSocket.accept(); addConnection(s); } поимка (IOException e) { System.out.println("примите петля IOException: " e); общественная статическая главная(Строка args[]) пустота{ новый Нить(новый Сервер()) .start(); попытка { 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[] = небывалый байт[bufsize]; частный статический заключительная Строка CRLF = "rn"; частное имя Строки = беспочвенный указатель; частный Строка id; частный логический занятой = ложь; общественный ClientConnection(Серверный srv, Гнездо s, int i){ попытка { сервер = srv; носок = s; в = небывалый DataInputStream(s.getInputStream()); = s.getOutputStream(); хозяин = s.getInetAddress().getHostName(); id = "" i; // говорят новый, кем это является...

запись("id " id CRLF); новый Нить(это) .start(); } поимка (IOException e) { System.out.println("неудавшийся ClientConnection " e); общественный Строка toString() { верните id " " собственник " " имя; общественный Строка getHost() { возврат хозяин; общественный Строка getId() { верните id; общественный логический isBusy() { вернитесь занятым; общественный беспочвенный setBusy(логический b){ занятой = b; общественный беспочвенный близко() { server.kill(это); попытка { sock.close(); // приближается и беспричинно же.

} поимка (IOException e) { общественная пустая запись(Строка s){ байт buf[] = небывалый байт[s.length()]; s.getBytes(0, buf.length, buf, 0); попытка { out.write(buf, 0, buf.length); } поимка (IOException e) { близко(); частный Строка readline() { попытка { верните in.readLine(); } поимка (IOException e) { верните беспочвенный указатель; статическое частное заключительное int ИМЯ = 1; статический приватный заключительный int ОСВОБОЖДЕНИЕ = 2; статический приватный заключительный int = 3; статическое частное заключительное int УДАЛЕНИЕ = 4; частные Hashtable ключи статики = небывалый Hashtable(); статический приватный Строка keystrings[] = { "", "имя", "освобождение",, "удаление" }; статика { для (int i = 0; i

Целое численность i = (Целое число) keys.get(s); верните i == беспочвенный указатель ? -1 : i.intValue(); общественный беспочвенный пробег() {

Строка s; -й StringTokenizer; пока ((s = readline()) != беспочвенный указатель) { -й = небывалый StringTokenizer(s);

Ключевое речь строки = st.nextToken(); выключатель (поиск(ключевое слово)) { типовое значение: System.out.println("подделанное ключевое слово: " ключевое речь "r"); перерыв;

ИМЯ случая: имя = st.nextToken() (st.hasMoreTokens() ? " " st.nextToken(CRLF): ""); System.out.println("[" новая Дата() "] " это "r"); server.set(id, это); перерыв;

ОСВОБОЖДЕНИЕ случая: разразитесь; случай:

Строка dest = st.nextToken();

Тело строки = st.nextToken(CRLF); server.sendto(dest, тело); перерыв; 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 = ложь; частное имя Строки; частный Строка others_name; частный Групповой topPanel; частный Ярлык незамедлительно; частный TextField namefield; частная сделанная Кнопка; частный TextField chatfield; частный Список idList; частный TextArea dialogArea; общественный беспочвенный init() { setLayout( небывалый BorderLayout() ); serverName = getCodeBase().getHost(); буде (serverName.equals("")) serverName = "localhost"; незамедлительно = небывалый Ярлык("Введите id:"); namefield = небывалый TextField(30); topPanel = новая Группа(); topPanel.setBackground(новый Цвет(255, 255, 200)); topPanel.add(незамедлительно); topPanel.add(namefield); добавьте("Север", topPanel); idList = небывалый Список(10, ложь); добавьте("На запад", idList ); dialogArea = небывалый TextArea(); dialogArea.setEditable( лганье ); добавьте("Центр", dialogArea ); общественное мелочь начало() { попытка { showStatus("Соединение " serverName); сервер = небывалый ServerConnection(это, serverName); server.start(); showStatus("Соединено: " serverName); } поимка (Исключение e) { единственный = истинный; общественная пустая остановка() { буде (!единственный) server.quit(); пустой добавляют(Строка id, имя хоста Строки, имя Строки){ удаление(id); // в случае, буде это глотать уже там.

idList.addItem("(" id ") " имя хоста имени "@" ); пустое удаление(Строка id){ для (int i = 0; i

Строка s = idList.getItem(i); s = s.substring(s.indexOf("(") 1, s.indexOf(")")); если (s.equals(id)) { idList.delItem(i); перерыв; если (idList.countItems() == 0) showStatus("Дождитесь других игроков воеже прибытия."); частный Строка getName(Строка id){ для (int i = 0; i

Строка s = idList.getItem(i);

Строка id1 = s.substring(s.indexOf("(") 1, s.indexOf(")")); буде (id1.equals(id)) { верните s.substring(s.indexOf(" ") 3, s.indexOf("@")); верните беспочвенный указатель; пустой чат(Строка id, Строка s){ dialogArea.appendText(id ": " s "n");//append showStatus(id ": " s); пустое освобождение(Строка id){ showStatus(id " всего освобождение."); удаление(id); частный беспочвенный nameEntered(Строка s) { если (s.equals("")) возврат; System.out.println(s); имя = s; если( !единственный ) server.setName(имя); showStatus("Дождитесь других игроков воеже прибытия."); prompt.setText("Говорите вы:"); name_set = истинный; общественное логическое действие(Событие evt, Объектный аргумент){ System.out.println(""); если(evt.id == Событие.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.*; импортируйте java.net.*; импортируйте java.util.*; класс ServerConnection осуществляет Runnable { пустой sendTo(Строка s, Строка id) если( id!= беспочвенный указатель ) out.println(" " id " " s); частный статический заключительный int порт = 6564; частный статический заключительная Строка CRLF = "rn"; частный DataInputStream в; частный PrintStream; частный Строка id, toid = беспочвенный указатель; частный Клиентский клиент; общественный ServerConnection(Scrabblet sc, сайт Строки) бросает IOException {

Сервер гнезда = новизна Гнездо(сайт, порт); в = небывалый DataInputStream(server.getInputStream()); = небывалый PrintStream(server.getOutputStream(), истинный); общественный ServerConnection( Клиентский c,String сайт) бросает IOException { клиент = c; Сервер гнезда = новизна Гнездо(сайт, порт); в = небывалый DataInputStream(server.getInputStream()); = небывалый PrintStream(server.getOutputStream(), истинный); частный Строка readline() { попытка { верните in.readLine(); } поимка (IOException e) { верните беспочвенный указатель; пустой setName(Строка s){ out.println("имя " s); пустое удаление() { out.println("удаление " id); пустой setTo(Строка){ toid = ; пустой посылают(Строка s){ если (toid != беспочвенный указатель) out.println(" " toid " " s); пустой чат(Строка s){ пошлите("чат " id " " s); пустое освобождение() { пошлите("освобождение " id); // говорят другого игрока out.println("освобождение"); остановка(); частный Нить t; пустое начало() { t = новая Нить(это); t.start(); пустая остановка() { t.stop(); частный статический заключительный int ID = 1; частный статический заключительный int ДОБАВЛЯЮТ = 2; частное статическое заключительное int УДАЛЕНИЕ = 3; частный статический заключительный int ЧАТ = 4; частное статическое заключительное int ОСВОБОЖДЕНИЕ = 5; частные статические ключи Hashtable = небывалый Hashtable(); приватный статическая Строка keystrings[] = { "", "id", "добавляют", "delete","chat", "освобождение" }; статика { для (int i = 0; i

Целое численность i = (Целое число) keys.get(s); верните i == беспочвенный указатель ? -1 : i.intValue(); общественный беспочвенный пробег() {

Строка s; -й StringTokenizer; пока ((s = readline()) != беспочвенный указатель) { -й = небывалый StringTokenizer(s);

Ключевое речь строки = st.nextToken(); выключатель (поиск(ключевое слово)) { типовое значение: System.out.println("подделанное ключевое слово: " ключевое речь "r"); перерыв; случай ID: id = st.nextToken(); перерыв; случай ДОБАВЛЯЮТ: {

Строка id = st.nextToken();

Имя хоста строки = 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. Это происшествие тоже является важной чертой в условиях Украины.

Источники информации: http://www.sun.com/ Спецификация языка программирования Java.

Нотон