Владимир Цишевский - Java как центр архипелага
- Название:Java как центр архипелага
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:1996
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Владимир Цишевский - Java как центр архипелага краткое содержание
Java как центр архипелага - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
будет осуществляться через сервер WWW, последний станет узким
местом, а решения Интранет рискуют лишиться такого важнейшего
достоинства, как масштабируемость. Значит, необходима прямая
связь между клиентскими системами, написанными на языке Java, и
произвольными сервисами (рис. 6).
Рис. 6. Прямая связь между Java-клиентами и корпоративными сер-
верами.
Как реализовать такую связь?
В общем виде ответ очевиден - нужны средства для полноценной
интеграции Java в распределенную об®ектную среду. На серверной
стороне компания Sun Microsystems имеет соответствующую техно-
логию - NEO (NEtworked Objects, сетевые об®екты). Технология
NEO удовлетворяет спецификациям COъBA (Common Object ъequest
Broker Architecture), являющимся промышленным стандартом. При
реализации корпоративных информационных систем с использованием
NEO наиболее естественным представляется использование треху-
ровневой архитектуры с серверами приложений, построенными на
об®ектных принципах, на втором уровне и с базовыми и унаследо-
ванными серверами на третьем уровне (рис. 7).
Рис. 7. Трехуровневая архитектура корпоративной информационной
системы.
К сожелению, столь общий ответ никак не помогает осуществлять
прямую связь между Java-клиентом и NEO-сервером. Конечно, можно
воспользоваться стандартными средствами программирования в се-
тевой среде (а Java допускает использование библиотек, написан-
ных на C/C++, равно как и вставку машинных кодов), но если это
было бы единственной возможностью, Java рисковала остаться на
уровне "оживлялок" для MS-Windows. В конце марта 1996 года ком-
пания SunSoft об®явила о появлении нового продукта с именем
Joe, как раз и предназначенного для существенного облегчения
встраивания Java-клиентов в информационные системы Интранет,
построенные в трехуровневой архитектуре с использованием среды
NEO (рис. 8).
Рис. 8. Распределение ролей между Java, Joe и NEO.
Таким образом, сложилась полная и изумительно красивая картина
организации современных Интранет-систем. В данной статье мы
уделим основное внимание технологии Java. Далее будет кратко
рассмотрены возможности, предоставляемые системой Joe.
4. Java - язык и технология
* 4.1. Язык Java
При описании языка Java будет предполагаться, что читатель, хо-
тя бы в общих чертах, знаком с языком C++.
4.1.1. Об®ектная модель языка Java
Когда говорят об об®ектно-ориентированном языке программирова-
ния, предполагают поддержку трех механизмов:
- инкапсуляция
- наследование
- полиморфизм.
Инкапсуляция и наследование в языке Java реализуются с помощью
понятия класса.
4.1.1.1. Классы
Понятие класса в языках Java и C++ очень близки. Класс является
шаблоном для создания об®ектов; он может содержать данные и ме-
тоды. Приведем пример класса, описывающего точки в двумерном
пространстве (здесь и далее номера строк используются для пос-
ледующих пояснений и не являются частью Java-программ).
1 class Point extends Object {
2 private double x;
3 private double y;
4 Point (double x, double y) {
5 this.x = x;
6 this.y = y;
7 }
8 Point () {
9 this (0.0, 0.0);
10 }
11 public void setX (double x) {
12 this.x = x;
13 }
14 public void setY (double y) {
15 this.y = y;
16 }
. . .
17 }
В языке Java нельзя отрывать определение метода (функции) от
описания заголовка. Синтаксическая конструкция class полностью
включает в себя всю информацию о классе. В частности, реализа-
ции методов обязаны содержаться внутри этой конструкции.
Для обозначения наследования используется ключевое слово
extends (строка 1). Класс Object - это корень дерева наследова-
ния. В Java не бывает классов-"сирот": у всех классов, кроме
Object, есть предшественник. Подробнее наследование и предопре-
деленные классы будут рассмотрены далее.
Режимы доступа к элементам класса (private, protected, public)
те же, что и в C++, за одним важным исключением. Если режим
доступа опущен, предполагается, что соответствующий элемент
доступен в пределах пакета (см. далее).
В строке 9 приведен пример явного вызова одного конструктора из
другого.
Прочие приведенные выше строки не нуждаются в пояснениях кроме
одной - отсутствующей. В языке Java не бывает деструкторов.
Причина в том, что управление памятью автоматизировано (в фоно-
вом режиме работает сборщик мусора). Для высвобождения прочих
ресурсов, ассоциированных с об®ектом, служит специальный метод
finalize. Этот метод вызывается сборщиком мусора в момент ути-
лизации памяти, занимавшейся об®ектом.
Ключевое слово this (см., например, строки 5 и 9) используется
для ссылки на самого себя. Аналогичную роль по отношению к ро-
дительскому классу играет слово super:
1 class ThreePoint extends Point {
2 protected double z;
3 ThreePoint () {
4 super ();
5 z = 0.0;
6 }
7 ThreePoint (double x, double y, double z) {
8 super (x, y);
9 this.z = z;
10 }
11 }
В строках 4 и 8 вызываются конструкторы родительского класса.
Приведенные примеры показывают, что в языке Java, как и C++,
методы могут быть перегруженными, то есть под одним именем мо-
гут фигурировать разные методы с разным набором параметров.
Как и C++, с помщью ключевого слова static можно определить
данные и методы, которые являются общими для всех об®ектов
класса. (Отметим попутно, что функций, не принадлежащих какому-
либо классу, в языке Java не бывает.) Следующий пример содержит
фрагменты стандартного пакета java.lang.
1 public final
2 class Character extends Object {
3 public static final int MAX_ъADIX = 36;
4 static char downCase[];
5 static {
6 char down[] = new char[256];
7 for (int i = 0 ; i < 256 ; i++) {
8 down[i] = (char) i;
9 }
10 for (int lower = 'a' ; lower <= 'z' ; lower++) {
11 int upper = (lower + ('A' - 'a'));
12 down[upper] = (char)lower;
13 }
14 for (int lower = 0xE0; lower <= 0xFE; lower++) {
15 if (lower != 0xF7) { // multiply and divide
16 int upper = (lower + ('A' - 'a'));
17 down[upper] = (char)lower;
18 }
19 }
20 downCase = down;
21 }
22 public static boolean isLowerCase(char ch) {
23 return (upCase[ch] != ch);
24 }
25 }
Прокомментируем этот пример с точки зрения отличий Java от C++.
Строки с 5 по 21 представляют собой инициализацию статических
данных класса, которая осуществляется в момент загрузки класса
в Java-машину. По сути этот код играет роль конструктора класса
Character.
В строках 1 и 3 встречается ключевое слово final. В строке 1
это слово обозначает запрет на наследование от класса
Character. В строке 3 его смысл аналогичен описателю const в
C++.
Если слово final использовано в заголовке метода, то данный ме-
Читать дальшеИнтервал:
Закладка: