Распределенные системы обработки информации
Недашковский Вячеслав Михайлович
Лекции 2006
Литература
1. Язык программирования Java
1.1. История и предпосылки
1.2. Сопоставление с C++
1.3. Архитектура Java
1.4. Синтаксис Java
1.5. Простые типы в Java
1.6. Классы и объекты в Java.
1.7. Переменные, именованные константы, массивы, перечисления в Java.
1.8. Наследование и о классе Class.
1.9. Интерфейсы и обратные вызовы в Java.
1.10. Вложенные классы и интерфейсы.
1.11. Цикл for-each, аргументы переменной длины, настраиваемые типы в Java.
1.12. Многопоточность в Java: создание потоков.
1.13. Многопоточность в Java: синхронизация
1.14. Ввод-вывод в Java: общие сведения.
1.15. Форматированный ввод-вывод в Java (J2SE 1.5)
1.16. О программировании графики в Java.
1.17. Реализация технологии клиент-сервер на Java.
1.18. Апплеты в Java.
1.19. Технология RMI в Java.
1.20. Об интерфейсе JDBC.
1.21. Общие сведения о технологии CORBA.
2. Общие положения теории РСОИ
2.1. Понятие о РСОИ
2.2. Примеры РСОИ.
2.3. Нефункциональные требования к РСОИ
2.4. Прозрачность в РСОИ
2.5. Удаленный вызов процедуры: общие сведения
2.6. Передача параметров при удаленном вызове процедур.
2.7. Организация распределенных объектов
2.8. Передача параметров при обращении к удаленным объектам.
2.9. Серверы объектов.
2.10. Перенос кода в РСОИ
2.11. Модель клиент-сервер
2.12. Общие сведение об именовании объектов и службе именования
2.13. Общие сведения о синхронизации в РСОИ
2.14. Жизненный цикл распределенных объектов
3. Технология J2EE
3.1. Общие сведения
3.2. Архитектура J2EE
3.3. EJB – Enterprise Java Beans
1. Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. Язык программирования Java, 3-е изд. пер. с. англ. –М: изд. дом «Вильямс», 2002.
2. Таренбаум Э. Распределенные системы. Принципы и парадигмы. –СПб: Питер, 2003 – 877с.
3. Эммерих В. Конструирование распределенных объектов. Методы и средства программирования интероперабельных объектов в архитектурах OMG/CORBA, Microsoft/Com и Java/RMI.
4. Изимбал А. А., Анишина М.Л. Технология создания распределенных систем для профессионалов – СПб:
Цель курса: привести основные сведения о языке Java а также общие сведения о РС, и технологиях создания РС; дать первичные навыки программирования на языке Java.
1991г. Группа инжинеров SUN занялась разработкой языка, который можно было бы использовать в бытовых устройствах. Идея – создать язык, который бы не зависил ни от машины, ни от процессора. За основу был взять синтаксис С++. Язык не был востребован. Решили написать браузер с использованием этой технологии. 1 версия языка появилась в 1996 году. 1998 году вышла версия языка Java 1.2 – полноценный язык. Язык платформенно независим. Недостаток – быстродействие. Программы выполняются под виртуальной машиной. Компиляция программ происходит в т.н. байткод, которые потом интерпретируется средой исполнения. В среде исполнения, в свою очередь, присутствует менеджер безопасности. Оcобености:
1. Мобильный код – одна программа, много вычислительных платформ.
2. Безопасный код – встроенная в язык защита от несанкционированного доступа к ресурсам компьютера.
3. Устойчивый код - обнаружение ошибок возможно на ранних стадиях проектирования. Больше нет ошибок управления памятью.
Java написан на основе C++ – синтаксис очень похож.
C++ | Java |
Разедление на объявления и определения | нет |
Const | нет, есть final |
>> - нет разницы между логическим и арифметическим сдвигом | >> - арифметический >>> - логический |
0, 1 | false, true |
строки как таковые отсутствуют | ReadOnly, в памяти под новую строку формируется место, старая исчезает из области видимости |
goto | нет goto, зато есть break <метка> |
1.2 Архитектура Java
Промежуточный код – байт код – виртуальной машины Java. Управляемый код не может содержать указателей. Обязательно должен присутствовать сборщик мусора.
Простейшая программа:
class Hello { public static void main(String[] args) {
System.out.println(“Hello world!”); }}
Модификаторы и функция main нужны, чтобы класс был приложением. String[] – массив. Так как в метод main не передается адрес объекта, то он объявлен с модификатором static, а адрес объекта не передается, так как до вызова никакого объекта не создавалось, то передавать нечего.
class Fib {/** Вывод на экран последовательности чисел Фибоначчи, меньших 50 */ public static void main(String[] args) { int l = 1, ni = 1; System.out.println(l); while (ni < l) { System.out.println(ni); ni = l+ni; // новое значение ni l = ni-l; /* новое значение l */ } }} Простые типы в Java
Обозначение типа | Размер (bit) | Примечание |
byte | 8 | знаковый |
short | 16 | знаковый |
int | 32 | знаковый |
long | 64 | знаковый |
float | 32 | знаковый |
double | 64 | знаковый |
char | 16 | Unicode |
Программа на языке Java – совокупность классов. Объявление класса:
{public, final|abstract} class ClassName
{
[constructors]
[variables]
[methods]
public static void main(String[] args) { … }
}
public – класс виден всем остальным классам (если не указан, класс виден только в своем пакете), final – от класса нельзя породить потомков, abstract – нельзя создать экземпляр класса. Функция main не обязательна, это точка входа в программу.
Классы организуются в пакеты (аналог пространств имен). В одном файле может быть только один public-класс.
Создание объекта:
new ClassName(параметры конструктора). Возвращает ссылку на объект.
Класс может содержать объявления конструкторов:
public ClassName(параметры...) { ... }
Если ни один конструктор не определен, неявно определяется конструктор без параметров, которые устанавливает все поля в значения по умолчанию (числа – в нуль, логические – в ложь, ссылки – в null).
В первой строке конструктора можно вызвать другой конструктор:
public MyClass(String a) { … }
public MyClass() { this(“default”); … }
Определение методов:
{public|private|protected} {тип возвр. значения | void} ИмяМетода(параметры метода) { тело метода }
public – метод доступен всем классам, private – только данному классу, protected – только данному классу и его наследникам, без указания спецификатора – метод доступен в пределах пакета.
Определение поля:
{public|private|protected} тип имя [= значение];
Инициализационный блок используется для установки начальных значений:
[static] { операторы присваивания... }
Статический инициализационный блок может инициализировать только статические переменные.
Порядок инициализации объекта:
1. Все поля инициализируются значениями по умолчанию.
2. Срабатывают инициализаторы полей и инициализационные блоки в порядке их следования в коде.
3. Если в первой строке конструктора вызывается другой конструктор, он выполняется.
4. Выполняется конструктор.
5. В классе можно определить метод finalize(), который будет выполняться при сборке мусора.
1.5 Переменные, именованные константы, массивы, перечисления в Java
Переменные – простых типов и ссылочные. Простые непосредственно содержат значение, ссылочные – ссылку на объект. Ссылочным переменным можно присвоить null.
Простые типы: int, short, long, byte, float, double, char, boolean. Беззнаковых типов нет. Размерность типов не зависит от платформы. Char всегда 2 байта.
Для простых типов есть их объектные аналоги: Integer, Character и т.п.
Константы обозначаются ключевым словом final (например, final double MAX = 5; - требуется явная инициализация при объявлении).
Массив – объект, содержащий ссылки на другие объекты.
MyType[] array = new MyType[5];
array[3] = new MyType();
int size = array.length; // 5
int[] iarr = { 1, 2, 3 };
Изначально всем элементам массива присваиваются значения по умолчанию.
Класс java.util.Arrays содержит статические методы для работы с массивами: сравнение, сортировка, поиск и т.п.
Перечисление – тип объекта, который может принимать ограниченное множество значений. Раньше для этого использовались классы, унаследованные от интерфейса Enumeration (методы hasMoreElements() и nextElement()). В Java 5 появился enum, как в C++.
public enum MyEnum { FIRST, SECOND, THIRD };
Enum – это полноценный класс, его значения – экземпляры класса. Каждому значению можно сопоставить параметры конструктора: