Владимир Цишевский - Java как центр архипелага
- Название:Java как центр архипелага
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:1996
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Владимир Цишевский - Java как центр архипелага краткое содержание
Java как центр архипелага - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
сов, в каждом из которых переопределен метод handleEvent.
Оба этих крайних подхода небезупречны. Первый способствует на-
писанию монолитных программ, второй приводит к очень большому
числу классов.
В реальной жизни используется компромиссная идеология -
handleEvent переопределяется для составных об®ектов, об®единяю-
щих несколько элементов интерфейса и отвечающих за ясно опреде-
ленную часть работы приложения (например, разного рода диало-
ги).
Кроме того, возможны и другие модели обработки событий, направ-
ленные на лучшее отделенин логики программы от ее интерфейса. В
качестве одного из примеров реализации альтернативной модели
можно указать пакет "The Command Class for AWT objects", кото-
рый написал Jan Newmarch, jan@ise.canberra.edu.au.
4.3.5. Методы класса Component, связанные с обработкой событий
Ниже перечислены методы класса Component, связанные с обработ-
кой событий.
- postEvent(). Этот метод, как правило, вызывается автоматичес-
ки при наступлении соответствующего события.
- Обрабатываются события при помощи метода handleEvent(). По
умолчанию этот метод, в зависимости от типа события, вызывает
один из специализированных обработчиков событий, таких как
- - action()
- - keyUp()
- - mouseDown()
- - gotFocus()
и т.д.
Метод handleEvent() может быть переопределен. В этом случае,
как правило, вся обработка соответствующего события будет про-
исходить именно в этом методе, однако, если handleEvent() возв-
ращает false, то вызывается handleEvent() для контейнера, со-
держащего данную компоненту.
События в AWT представляются с помощью об®ектов класса Event, в
котором определены следующие переменные:
public Object target; // инициатор события
public long when; // время, когда событие произошло
public int id; // тип события(KEY_PъESS, MOUSE_DOWN...)
public int x; // координаты
public int y; // курсора
public int key; // код клавиши
public int modifiers;// код модификатора (control, shift ...)
public Object arg; // вспомогательные данные
public Event evt; // поле для соединения событий в списки
Приведем типичный пример обработки событий, когда все они обра-
батываются на верхнем уровне (в данном случае на уровне апле-
та).
class MyApplet extends Applet {
. . .
public boolean action( Event evt, Object arg) {
. . .
if ((ev.target instanceof Button) && arg.equals ("OK")) {
// Выполнить соответствующие действия
. . .
return true;
} else {
// Другие случаи
. . .
}
. . .
return false;
}
. . .
}
В этом примере, если инициатор события имеет тип Button с име-
нем "OK", то выполняются соответствующие действия и возвращает-
ся значение true, то есть событие дальше не передается.
Другой способ обработать событие заключается в создании специа-
лизированной компоненты. Пример.
class OKButton extends Button {
. . .
public boolean action (Event e, Object arg) {
// Выполнить соответствующие действия
. . .
return true;
}
}
Мы видим, насколько глубоко продумана в проекте Java связь с
операционным окружением. Удалось достичь удачного сочетания бо-
гатства возможностей с переносимостью.
5. Joe - технология связывания Java-программ
с об®ектными бизнес-приложениями
Выше, в разделе "Java, Joe и NEO", мы писали о том, что новый
продукт компании SunSoft - Joe - призван осуществлять связь
между клиентскими компонентами, написанными на языке Java, и
об®ектными серверами приложений, созданными в среде NEO. При
этом Joe берет на себя все (или почти все) технические пробле-
мы, связанные с работой в распределенной об®ектной среде, обес-
печивая в то же время для Java-программ полноценное взаимодей-
ствие с произвольными об®ектными сервисами.
В предыдущих выпусках Jet Info была опубликована шутливая "Эво-
люция программиста". Мы добавим к ней еще два раздела. Первый
из приводимых ниже примеров написан на языке Java и можеи ис-
пользоваться в составе обычных, локально работающих аплетов.
1 import java.awt.Font;
2 import java.awt.Color;
3 public class JAVAhello extends java.applet.Applet {
4 Font f = new Font ("Timesъoman", Font.BOLD, 36);
5 public void init () {
6 resize (150, 25);
7 }
8 public void paint (Graphics g) {
9 g.setFont (f);
10 g.setColor (Color.blue);
11 g.drawString ("Hello, World!", 50, 25);
12 }
13 }
Теперь модифицируем программу для Joe, чтобы обеспечить возмож-
ность работы в среде клиент/сервер.
1 import sunw.services.*;
2 import java.awt.Graphics;
3 import java.awt.Font;
4 import java.awt.Color;
5 public class JOEhello extends sunw.services.JOEApplet {
6 sunw.corba.Objectъef obj;
7 Hello.HelloWorldъef hiThere;
8 Font f = new Font("Timesъoman", Font.BOLD, 36);
9 public void init () {
10 super.init ();
11 resize (150, 25);
12 obj = find ("HelloWorldServer");
13 hiThere = Hello.HelloWorldStub.narrow (obj);
14 }
15 public void paint (Graphics g) {
16 g.setFont (f);
17 g.setColor (Color.red);
// Получим строку из удаленного об®екта, реализованного на C++,
// и выведем ее.
18 g.drawString (hiThere.sayHello (), 50, 25);
19 }
20 }
Поясним смысл новых строк, появившихся во втором варианте прог-
раммы.
В строке 1 импортируется описание предоставляемых об®ектных
сервисов.
В строке 5 об®является, что класс Hello будет наследником
JOEApplet.
В строке 6 декларируется обобщенная (не типизированная) ссылка
на NEO-об®ект. Она будет использована для сохранения результата
поиска об®екта по имени.
В строке 7 описана типизированная ссылка на NEO-об®ект, которая
будет использоваться для манипулирования удаленным об®ектом (в
частности, для вызова методов) средствами языка Java.
В строке 12 мы получаем от службы имен NEO ссылку на нужный нам
серверный об®ект.
В строке 13 выполняется операция приведения обобщенной ссылки к
типизированному виду.
Наконец, в строке 18 выполняется вызов метода удаленного об®ек-
та, написанного, вообще говоря, не на языке Java (например, на
C++). Впрочем, вид этого оператора не зависит ни от удаленнос-
ти, ни от языка реализации об®екта.
Процесс разработки программ в среде Joe довольно прост. Он сос-
тоит из следующих этапов:
- Трансляция интерфейса к NEO-об®ектам, написанного на языке
IDL (Interface Definition Language), в класс на язык Java. Этот
этап поддержан входящим в состав Joe компилятором IDL - Java.
Результат трансляции содержит суррогатные методы, которые во
взаимодействии с брокером об®ектов обеспечивают взаимодействие
с удаленными об®ектами, не отличающееся от локального случая. В
свою очередь, брокер об®ектов, входящий в состав Joe, прозрач-
ным для клиентской стороны образом загружается в WWW-навигатор
вместе с Java-аплетами.
- Написание клиентского кода на языке Java с использованием
сгенерированного интерфейса и средств Joe для взаимодействия с
удаленными об®ектами.
Дальше Java-программа компилируется и выполняется обычным обра-
зом.
Подчеркнем, что описанная об®ектная среда обеспечивает полно-
ценное, двустороннее взаимодействие между клиентом и сервером.
В частности, удаленные серверные об®екты могут вызывать методы
в об®ектах-клиентах. Для обеспечения этой возможности в составе
Читать дальшеИнтервал:
Закладка: