.RU

Реферат по предмету: Информатика


Министерство образования Республики Беларусь


Белорусский Государственный Университет








Реферат по предмету:

Информатика


Выполнила

студентка 1-го курса

Экономического факультета

Группы Экономическая теория

Макарчук Надежда Андреевна


Научный руководитель

Кожич П. П.


Минск 2007
Содержание



Содержание 2

Введение 3

Компоненты Java- технологии 4

Виртуальная Java-машина 4

Происхождение Java-языка 6

Основные преимущества Java-технологии 7

Безопасность 7

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

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

Устойчивость к ошибкам 11

Поддержка многопоточности 12

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

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

Распределенность 15

Доступность инструментария и эффективность разработок 16

^ Перспективы развития 17

Класс Server 17

Класс Client Connection: 19

Класс Client: 22

Класс Server Connection: 24

Интересный факт из истории создания Java-технологии, или удар по «пакету Windows» 28

Вывод 32
Введение

Каждый современный деловой человек использует около 10 микроконтроллеров. Они есть в сотовых и обычных телефонах, пейджерах, электронных записных книжках, телевизорах и многих других привычных устройствах. Ожидается, что к концу десятилетия на один дом будет приходиться от 50 до 100 интеллектуальных микросхем. Многие фирмы по производству бытовой техники уже встраивают микроконтроллеры в такие привычные и удобные устройства, как стиральные машины и холодильники. Вероятно, появятся миллионы интеллектуальных телефонов, телекомпьютеров и других аналогичных приборов. Для этой армии устройств потребуются микропроцессоры, способные работать в небольшой компьютерной сети и оптимизированные для выполнения небольших программ. Разработке таких микроконтроллеров может способствовать ставшая популярной в последнее время технология Java.

Эта технология разрабатывалась фирмой Sun Microsystems для передачи по сети очень компактных программ с последующим выполнением их на удаленных компьютерах или других устройствах. Простые, безопасные и компактные программы Java работают на всех платформах, где реализованы так называемые виртуальные Java-машины (кросс-системы для выполнения Java-программ). Для выполнения Java-программы на новой платформе достаточно разработать для нее виртуальную машину. Следует отметить, что за полтора года существования Java написаны ее кросс-системы для всех самых распространенных платформ. Поэтому Java-машина облегчает перенесение программного обеспечения на другие типы процессоров, а также позволяет легко реализовывать

распределенные вычисления.

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


^ Компоненты Java- технологии Виртуальная Java-машина

Любой процессор Java должен соответствовать спецификации виртуальной Java-машины, которая является основным механизмом управления программами, написанными на языке Java. Эта спецификация полностью определяет систему команд Java, типы данных, обрабатываемых Java-машиной и ее регистры. Поскольку большинство команд Java умещается в один байт, то их часто называют байт-кодом.

Байт-коды языка Java разрабатывались для обеспечения компактности программ, которая достигается с помощью минимального количества регистров и максимального использования указателей. Средняя команда на языке Java имеет длину всего 1,8 байта, в то время как команды классических RISC-процессоров - около четырех байт. Java-машина имеет стековую архитектуру, поскольку операнды передаются через регистр процессора "стек операндов". Это позволяет уменьшить длину команды, так как она занимает всего один байт, сопровождаемый (если необходимо) номером операнда - 0, 1, 2, 3 и так далее.

^ Java-машина обрабатывает следующие типы данных:
byte - байты,

short - двухбайтные целые числа,

integer - четырехбайтные целые числа,

long - восьмибайтные целые числа,

float - четырехбайтные вещественные числа,

double - восьмибайтные вещественные числа,

char - двухбайтные символы,

object - четырехбайтные ссылки на объекты,

returnAddress - четырехбайтные адреса возврата из метода.

^ Она имеет следующие регистры:
pc - счетчик команд, указывающий на код операции, которая будет выполняться следующей,

vars - регистр для доступа к локальным переменным текущего метода,

optop - указатель на стек операндов (так как основная часть операций выполняются именно через стек),

frame - указатель на структуру окружения времени выполнения.


Окружение времени выполнения используется для обработки исключительных ситуаций, динамической загрузки метода и возврата из него. Для обработки исключительных ситуаций Java-машина просматривает вызовы методов в обратном порядке и передает управление первому найденному методу обработки исключительных ситуаций. Для обеспечения динамической загрузки окружение времени содержит ссылку на таблицу методов текущего объекта. Возврат же из метода выполняется с помощью восстановления структуры предыдущего метода.


До недавнего времени виртуальные Java-машины были действительно виртуальными, то есть Java-программы интерпретировались или компилировались на универсальных компьютерах. В случае интерпретации (рисунок 1, способ 1) выполнение программы сильно замедляется, так как универсальный процессор тратит время на преобразование Java-программ в свой собственный код. В случае же компилирования "на лету" (Just In Time - JIT) (рисунок 1, способ 2,), размер программы увеличивается в три или более раз. Если компьютер имеет ограниченный объем памяти, то исполнение Java-программ может привести к серьезным проблемам.





Рисунок 1. Три способа выполнения байт-кода Java.


Но положение изменилось, когда в октябре 1996 г. фирма Sun Microelectronics выпустила первый Java-процессор - PicoJava I. Архитектура JavaChip_, разработанная Sun Microelectronics, позволяет проектировать процессоры, оптимизированные для быстрого выполнения Java-программ в небольшом объеме памяти. Процессор PicoJava I отвечает всем требованиям, указанным в спецификации виртуальной Java-машины. Поскольку Java-программы на новом процессоре можно выполнять без предварительной обработки, то это позволяет избежать интерпретации или компиляции Java-программ (рисунок 1, способ 3).


^ Происхождение Java-языка

Язык программирования Java зародился в 1991 году в лабораториях компании Sun Microsystems. Как ни странно, толчком для создания Java стал совсем не Интернет. Главным мотивом была потребность в языке программирования, который не зависел бы от платформы и который можно было бы реконструировать для создания программного обеспечения, которое встраивается в электронное оборудование различного строения, такое, как мобильные телефоны, пейджеры, электронные книжки и другое. Разработка первой рабочей версии заняла 18 месяцев и имела название Oak, но в 1995 году проект был переименован на Java.

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

^ Основные преимущества Java-технологии Безопасность

World Wide Web выдвинула Java на первый план в программировании, и Java, в свою очередь, сильно повлияла и даже изменила облик Internet, расширив спектр объектов, которые могут распространяться в киберпространстве. Программы новой формы загружаются с отдаленного сервера и могут запускаться динамично, без участия пользователя. До появления Java такой подход был недопустим с точки зрения безопасности и переносимости. В архитектуре апплетов сделан ряд единичных ограничений, которые делают их целиком безопасными. Прежде всего, Java имеет интерпретированный язык, и пространство ресурсов Java-программ ограничено так называемой виртуальной Java-машиной, которая может контролировать поведение программы и защищать систему от побочных эффектов, которые могут возникать по вине процессора. Кроме того, в языке 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 удалось найти равновесие между парадигмой «все является объектом» и прагматичным подходом. Объектная модель Java просто и легко расширяется, в то время как остальные типы остаются как данные, которые не являются объектами, что позволяет значительно увеличить скорость при их обработке.

^ Устойчивость к ошибкам

Многоплатформенность среды Java выдвигает необычно высокие требования к надежности программ. Как следствие, при разработке 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 method invocation). Этот уклон дает высокий уровень абстракции в программировании для среды клиент/сервер.

Java-программы несут в себе значительный обзор информации о типах времени исполнения (run-time type information), которое используется для разрешения доступа к объектам во время работы программы. Это позволяет обеспечить безопасную и оптимальную компоновку. При таком способе достигается безопасность среды исполнения программы.

^ Доступность инструментария и эффективность разработок

Отмеченная выше простота программирования на Java является причиной того, что разработки на Java будут стоить дешевле аналогичных на более сложных языках программирования. Этому же способствует и переносимость программ на Java, поскольку ликвидируются затраты, связанные с адаптацией программ на конкретных платформах. К тому же интегрированные программы оболочки для разработки Java программ стоят намного дешевле (70-100 долларов), чем аналогичные продукты С++,Ъ (примерно 1000 долларов). А набор инструментария для пакетной компиляции Java программ JDK (Java Development Kit) является к тому же freeware. Поэтому платформу Java можно рекомендовать как идеальную для создания некоммерческих программных продуктов.
^ Перспективы развития

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

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

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

Программа состоит из четырех классов: Server, ClientConnection, Client и ServerConnection. Первые два класса относятся к серверной части, вторые – к клиентской.

^ Класс 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 = "\r\n";


synchronized void addConnection(Socket s) {

ClientConnection con = new ClientConnection(this, 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 c) {

if (idcon.remove(c.getId()) == c) {

delete(c.getId());

}

}


public void run() {

try {

ServerSocket acceptSocket = new ServerSocket(port);

System.out.println("Server listening on port " + port);

while (true) {

Socket 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, которая согласно названию передает сообщения всем зарегистрированным клиентам.

^ Класс Client Connection:
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 = "\r\n";

private String name = null;

private String id;

private boolean busy = false;


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;

// 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 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 i = 0; i < keystrings.length; i++)

keys.put(keystrings[i], new Integer(i));

}


private int lookup(String s) {

Integer i = (Integer) keys.get(s);

return i == null ? -1 : i.intValue();

}


public void run() {

String s;

StringTokenizer st;

out:

while ((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 i = 0; i < idList.countItems(); i++) {

String s = idList.getItem(i);

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 i = 0; i < idList.countItems(); i++) {

String 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 s) {

dialogArea.appendText(id + ": " + s+ "\n");//append

showStatus(id + ": " + s);

}

void quit(String id) {

showStatus(id + " just quit.");

delete(id);

}


private void nameEntered(String s) {

if (s.equals(""))

return;

System.out.println(s);

name = 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, через который осуществляется обмен информацией с сервером. Графический интерфейс такого класса представляет три области: поле ввода, в которое сначала вводится имя пользователя, а потом – сообщения, адресованные другим клиентам, список клиентов, в котором нужно выбирать адресата, и текстовая область, в которой печатается текст диалога. Метод action реализует обработку событий ввода текста в область ввода. Методы add, delete, chat, nameEntered, quit являются реакцией на следующие события: подключение нового клиента, исчезновение клиента, отправки сообщения от клиента, идентификация и выход. Эти методы вызываются классом ServerConnection при отправлении соответствующих сообщений, или же в середине апплета, если источником событий является сам клиент.

^ Класс Server Connection:
import java.io.*;

import java.net.*;

import java.util.*;

class ServerConnection implements Runnable {

void sendTo(String s, String id)

{

if( id!= null )

out.println("to "+id+" "+s);

}

private static final int port = 6564;

private static final String CRLF = "\r\n";

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 s) {

out.println("name " + s);

}

void delete() {

out.println("delete " + id);

}

void setTo(String to) {

toid = to;

}

void send(String s) {

if (toid != null)

out.println("to " + toid + " " + s);

}

void chat(String s) {

send("chat " + id + " " + 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 i = 0; i < keystrings.length; i++)

keys.put(keystrings[i], new Integer(i));

}

private int lookup(String s) {

Integer i = (Integer) keys.get(s);

return i == null ? -1 : i.intValue();

}

public void run() {

String s;

StringTokenizer st;

while ((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-технологии, или удар по «пакету Windows»
Достаточно богатая история взаимоотношений Билла Гейтса с различными контролирующими органами говорит о том, что, по большому счету, еще никому не удавалось реально регулировать рынок продукции программного обеспечения. С 1995 года Microsoft, выпустив операционную систему Windows 95, сумела оставить далеко позади конкурирующий продукт от IBM - OS/2. Тем самым было окончательно закреплено лидерство корпорации Билла Гейтса на рынке оперативных систем для персональных компьютеров. Почувствовав вкус победы, Microsoft решила завоевывать новые области, используя в качестве плацдарма для этого популярность Windows.

Первым шагом стало продвижение корпорацией через Windows собственной службы доступа в сеть Интернет Microsoft Network (MSN). Пользователям, установившим систему Windows, предлагалось осуществлять доступ во Всемирную паутину через MSN. Ведущий Интернет-провайдер США America-on-line (AOL) стал протестовать против подобного продвижения конкурирующего сервиса, но безрезультатно. Правда, MSN так и не смогла отодвинуть на второй план AOL, но прием включения в пакет Windows различных программ руководству Microsoft понравился.

Стоит отметить, что к тому моменту в мире происходило сильное развитие Интернета, а корпорация Билла Гейтса поначалу не уделяла внимание этому направлению. Особое раздражение у Microsoft вызывал веб-браузер (программа просмотра интернет-страниц) Netscape Communication, значительно обгонявший по популярности конкурирующую разработку Microsoft Internet Explorer (MIE). Чтобы переломить ситуацию, Microsoft выпустила в 1997 году обновленную версию Windows 95 - OSR 2, в которую уже включен MIE. Расчет был прост: пользователь вместе с установкой Windows сразу получит веб-браузер. Следовательно, для большинства людей смысла в установке Netscape не будет. Попытки Netscape запретить через суд интеграцию Windows и MIE были безуспешны (правда, в прошлом году новый владелец Netscape - AOL - все-таки сумел добиться от Microsoft выплаты компенсации за «плохое поведение»).

Тем временем популярность MIE начинает расти на глазах, и к 1999 году пользователей этого браузера стало уже больше пользователей Netscape. Netscape пробует изменить свою стратегию разработки, что приводит к длительному отсутствию новых версий программы, и в итоге на Netscape как на веб-браузере была поставлена точка (правда, исходные коды этой программы были переданы компьютерной общественности, и дело Netscape продолжают поддерживать энтузиасты, выпуская браузер Mozilla). Microsoft же продолжила включение в пакет Windows различных программ - мультимедийного проигрывателя Windows media player (WMP) и программы для общения через Интернет Windows messenger. На очереди стоят собственная поисковая система от Microsoft и сервис по продаже музыки через Интернет.

Продвигая MIE, корпорация Microsoft освоила еще один способ усиления собственного монополизма. Сборщики компьютеров, желая устанавливать на машины Windows, весьма заинтересованы в сотрудничестве с софтверным гигантом. Microsoft же стала извлекать из этого выгоду, поделив их на «хороших», которым предоставляются скидки, и «плохих» (устанавливающих вместе с Windows продукты конкурентов Microsoft - например, Netscape), к которым применялись санкции.

Естественно, подобная деятельность корпорации Билла Гейтса не могла не вызывать раздражения у ее конкурентов. Корпорация SUN Microsystems попыталась найти техническое решение, способное нанести удар по «пакету Windows». Она разработала технологию JAVA: если какая-либо программа была бы написана по этой технологии, то она могла бы работать под любой оперативной системой (как под Windows, так и под другими), в которой есть так называемая виртуальная java-машина. Тем самым получили бы стимул для развития операционные системы конкурентов Microsoft. Однако корпорация Билла Гейтса в 1997 году сумела расправиться с SUN: она стала включать в Windows свою java-машину, которая несовместима с обычной, чем и разрушила главную идею технологии JAVA.

Недовольство, которое подобные действия вызвали у Netscape и Sun, стало толчком для начала антимонопольного расследования деятельности корпорации Билла Гейтса. Причем обвинения против софтверного гиганта выдвинули как министерство юстиции США, так и прокуроры 18 американских штатов. Обвинители сумели-таки прийти к выводу, что Microsoft незаконно использует свое монопольное положение. Поэтому в целях дальнейшего развития индустрии программного обеспечения, посчитали они, Microsoft необходимо разделить на две части: одна компания будет заниматься операционными системами, другая - программными продуктами. Кроме того, они потребовали убрать из состава Windows браузер MIE. В июле 2000 года судья Томас Джексон поддержал оба предложения.

Microsoft подала апелляцию, и в июне 2001 года дело было направлено на новое рассмотрение. К тому моменту власти США уже гораздо более благосклонно стали относиться к детищу Билла Гейтса, поскольку Microsoft была одним из спонсоров предвыборной кампании Джорджа Буша. Так что неудивительно, что министерство юстиции и корпорация пошли на переговоры, результатом которых стало мировое соглашение, в котором от прежних обвинений не осталось и следа. Microsoft всего лишь запретили «шантажировать» производителей компьютеров, а также обязали раскрыть секретную техническую информацию о Windows, отсутствие которой мешает конкурентам Microsoft выпускать программы под эту операционную систему. В ноябре 2002 года судья Колин Коллар-Котелли утвердил такое соглашение.

Поначалу прокуроры девяти штатов отказались одобрить соглашение, продолжая настаивать если не на разделении Microsoft, то хотя бы на разделении MIE и Windows. Но к настоящему моменту из этих штатов лишь Массачусетс в гордом одиночестве продолжает «добиваться справедливости».

Тем временем монополию Microsoft решила разрушить Еврокомиссия. Европейский антимонопольный комитет часто вмешивается в дела американских компаний, работающих на европейском рынке, и таким образом запретил уже не одно слияние. Microsoft же власти Европы признали виновной в ведении нечестной конкуренции, обязали выплатить (полмиллиарда долларов за незаконное использование своего монопольного положения) рекордный штраф, выпустить версию Windows без мультимедийного проигрывателя WMP в дополнение к обычной и раскрыть еще больше «секретной технической информации» о Windows.

Психологически важным из всех пунктов наказания является необходимость выпустить два варианта Windows, ведь представители Microsoft всегда строили свою защиту на том, что проигрыватель и MIE настолько интегрированы с Windows, что их невозможно разделить. Но поскольку включать WMP в Windows все равно никто не запрещает, реальных последствий для рынка у этого решения, естественно, не будет.

Таким образом, можно констатировать, что максимальное наказание за свой монополизм Microsoft может получить лишь в виде полумиллиардного штрафа. Для корпорации, глава которой является самым богатым человеком мира, эти деньги не столь велики (хотя, конечно, и над их сохранением работают юристы корпорации). Принципиально другое: ни американские, ни европейские чиновники так и не смогли разрушить очевидную монополию на рынке программного обеспечения. Если Microsoft удастся, к тому же, и обжаловать вынесенный приговор, то она выйдет практически сухой из воды. А это значит, что конкуренты Microsoft будут продолжать играть исключительно вторую скрипку в оркестре Билла Гейтса.


Вывод

Таким образом, Java-технология является очень перспективной в разработках некоммерческого использования. Ограниченность инструментария Java не проявляется в проектах небольшого объема и с лихвой компенсируется простотой программирования различных программ, которые работают в сети Internet/Intranet. Переносимость Java программ вызывает необходимость обмена обучающими программами между различными образовательными учреждениями, открывает возможность совместных разработок и создания стандартных обучающих программ, например, для школ. Кроме того, очень привлекательной с точки зрения эффективности остается идея внедрения в образовательные учреждения сетевых компьютеров (Network Computers), которые работают на базе Java), вместо привычных персональных компьютеров (Personal Computers).


referati-uchebnoe-posobie-volgograd-2005-udk-93-008-470571-07-bbk-63-2-ya-73.html
referativnaya-obrabotka-osushestvlena-aspirantkoj-mehmata-mgu-2004-g-nrubcovoj.html
referativnaya-rabota-po-teme-you-are-only-a-teenager-once.html
referativnie-raboti.html
referativnij-doklad.html
referativnij-sbornik-stranica-11.html
  • esse.bystrickaya.ru/rabochaya-uchebnaya-programma-specialnost-1-79-01-07-stomatologiya-obshee-kolichestvo-uchebnih-chasov-stranica-5.html
  • bukva.bystrickaya.ru/radiotehnika-i-kosmos-chast-4.html
  • universitet.bystrickaya.ru/ssientific-life-soderzhanie-1-44-200-9-voprosi-teorii.html
  • education.bystrickaya.ru/1-obshaya-harakteristika-shkoli.html
  • school.bystrickaya.ru/formirovanie-sistemi-logisticheskogo-menedzhmenta-kompanij-chast-2.html
  • lecture.bystrickaya.ru/5razvitie-civilizacii-novejshego-vremeni-i-specifika-nravstvennih-processov-etika-i-moral.html
  • uchitel.bystrickaya.ru/rasskaz-skazka.html
  • paragraf.bystrickaya.ru/zadnyaya-podveska-avtomobilej-kamaz.html
  • studies.bystrickaya.ru/istoriya-razvitiya-i-vidayushiesya-konstruktori-rossijskogo-oruzhiya-chast-2.html
  • bystrickaya.ru/velikoustyuzhskaya-chern.html
  • universitet.bystrickaya.ru/tema-9-upravlenie-nauchnimi-proektami-metodika-sostavleniya-zayavki-na-grant.html
  • bukva.bystrickaya.ru/sovremennaya-model-evolyucii-vselennoj.html
  • bukva.bystrickaya.ru/religiya-ateizm-byulleten-novih-postuplenij-knig-v-nauchnuyu-biblioteku-kubgu-mart-2006-g.html
  • literature.bystrickaya.ru/chto-proishodit-posle-zaversheniya-treninga-k49-trening-vnutrennej-motivacii-spb-rech-2005-76-s.html
  • writing.bystrickaya.ru/hudozhnik-d-agapitov-lejnster-m-l42-kolonialnaya-sluzhba-povesti-rasskazi-per-s-angl-m-lejnster-stranica-19.html
  • thescience.bystrickaya.ru/informacionno-analiticheskaya-karta-pasport-obsheobrazovatelnogo-uchrezhdeniya-razdel-i.html
  • education.bystrickaya.ru/32-antikorrupcionnaya-programma-antikorrupcionnaya-programma-3-transparensi-kazahstan-samie-bolshie-korrupcionnie.html
  • shkola.bystrickaya.ru/tema-12-alternativnie-tipi-organizacii-nauki-nevidimij-kolledzh-respublika-uchenih-obshestvo-znaniya.html
  • kolledzh.bystrickaya.ru/akt-vtoroj-vilyam-shekspir-vo-vremya-dejstviya-komedii-bogatij-domovladelec-torgovogo-goroda-stradforda-na-ejvone.html
  • kolledzh.bystrickaya.ru/analiz-i-ocenivanie-gosudarstvennih-programm-i-otraslevih-politik-obyazatelnaya-uchebnaya-disciplina-dlya-3-go-kursa-fakulteta-gimu-gu-vshe-3-i-4-modul-200708-uch-god.html
  • bystrickaya.ru/vdoskonalennya-sistemi-materalno-tehnchnogo-postachannya-procesu-tehnchnogo-obslugovuvannya-na-osnov-analzu-nadjnost-parku-ps-avakompan.html
  • literature.bystrickaya.ru/brending-v-turizme.html
  • occupation.bystrickaya.ru/modelirovanie-ekonomicheskih-sistem-2.html
  • notebook.bystrickaya.ru/k-koncu-goda-deti-dolzhni-umet-dopolnitelnaya-obrazovatelnaya-programma-vospitanie-i-obuchenie-detej-v-klasse.html
  • upbringing.bystrickaya.ru/lesohozyajstvennij-reglament-stranica-11.html
  • shpora.bystrickaya.ru/zadachi-dannogo-obzora-3-klimatologicheskaya-nauka-snizhenie-vibrosov-i-peregovornij-process-5-stranica-3.html
  • pisat.bystrickaya.ru/tema-11-metod-nominalnih-grupp-upravlencheskoe-konsultirovanie.html
  • uchit.bystrickaya.ru/transportnaya-infrastruktura-otchet-o-provedenii-pervogo-etapa-nauchno-issledovatelskoj-raboti-po-dogovoru-60069s.html
  • tasks.bystrickaya.ru/3-na-bortu-letuchego-gollandca-strugackij-izvne.html
  • shpora.bystrickaya.ru/vserossijskij-uroven-analiz-raboti-shkoli-za-2010-2011-uchebnij-god.html
  • lecture.bystrickaya.ru/akcizi-problemi-opredeleniya-nalogoplatelshika-obekta-nalogooblozheniya-nalogovoj-bazi-poryadka-i-srokov-uplati-chast-3.html
  • testyi.bystrickaya.ru/aksenova-darya-sergeevna-samarskij-gosudarstvennij-universitet-magistrant-kafedri-teorii-i-tehnologii-socialnoj-raboti.html
  • report.bystrickaya.ru/ivpo-gematologicheskim-metodam-issledovaniya-soderzhanie-programmi-obshie-rekomendacii-po-organizacii-provedeniya-internaturi-17.html
  • university.bystrickaya.ru/gorodskaya-nauchno-prakticheskaya-konferenciya-shkolnikov-mou-srednyaya-obrazovatelnaya-shkola-19-s-uglublennim-izucheniem-ekonomiki.html
  • grade.bystrickaya.ru/metodicheskie-ukazaniya-k-laboratornim-rabotam-osobennosti-ustrojstva-i-raboti-gelij-neonovogo-lazera-2007-g.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.