- •Аннотация
- •Лекция 1. Что такое Java? История создания.
- •1. Что такое Java?
- •2. История создания Java
- •2.1. Сложности внутри Sun Microsystems
- •2.2. Проект Green
- •2.3. Компания FirstPerson
- •2.4. World Wide Web
- •2.5. Возрождение Oak
- •2.6. Java выходит в свет
- •3. История развития Java
- •3.1. Браузеры
- •3.2. Сетевые компьютеры
- •3.3. Платформа Java
- •4. Заключение
- •5. Контрольные вопросы
- •Аннотация
- •1. Основы объектно-ориентированного программирования
- •1.1. Методология процедурно-ориентированного программирования
- •1.2. Методология объектно-ориентированного программирования
- •1.3. Объекты
- •1.3.1. Состояние.
- •1.3.2. Поведение
- •1.3.3. Уникальность
- •1.4. Классы
- •1.4.1. Инкапсуляция
- •1.4.2. Полиморфизм
- •1.5. Типы отношений между классами
- •1.5.1. Агрегация
- •1.5.2. Ассоциация
- •1.5.3. Наследование
- •1.5.4. Метаклассы
- •1.6. Достоинства ООП
- •1.7. Недостатки ООП
- •1.8. Заключение
- •1.9. Контрольные вопросы
- •Аннотация
- •Лекция 3. Лексика языка
- •1. Лексика языка
- •1.1. Кодировка
- •1.2. Анализ программы
- •1.2.1. Пробелы
- •1.2.2. Комментарии
- •1.2.3. Лексемы
- •1.3. Виды лексем
- •1.3.1. Идентификаторы
- •1.3.2. Ключевые слова
- •1.3.3. Литералы
- •1.3.3.1. Целочисленные литералы
- •1.3.3.2. Дробные литералы
- •1.3.3.3. Логические литералы
- •1.3.3.4. Символьные литералы
- •1.3.3.5. Строковые литералы
- •1.3.3.6. Null литерал
- •1.3.3.7. Разделители
- •1.3.3.8. Операторы
- •1.3.3.9. Заключение
- •1.4. Дополнение: Работа с операторами
- •1.4.1. Операторы присваивания и сравнения
- •1.4.2. Арифметические операции
- •1.4.3. Логические операторы
- •1.4.4. Битовые операции
- •1.5. Заключение
- •1.6. Контрольные вопросы
- •Аннотация
- •Лекция 4. Типы данных
- •1. Введение
- •2. Переменные
- •3. Примитивные и ссылочные типы данных
- •3.1. Примитивные типы
- •3.2. Целочисленные типы
- •4. Дробные типы
- •5. Булевский тип
- •6. Ссылочные типы
- •6.1. Объекты и правила работы с ними
- •6.2. Класс Object
- •6.3. Класс String
- •6.4. Класс Class
- •7. Заключение
- •8. Заключение
- •9. Контрольные вопросы
- •Аннотация
- •Лекция 5. Имена. Пакеты
- •1. Введение
- •2. Имена
- •2.1. Простые и составные имена. Элементы.
- •2.2. Имена и идентификаторы
- •2.3. Область видимости (введение)
- •3. Пакеты
- •3.1. Элементы пакета
- •3.2. Платформенная поддержка пакетов
- •3.3. Модуль компиляции
- •3.3.1. Объявление пакета
- •3.3.2. Импорт-выражения
- •3.3.3. Объявление верхнего уровня
- •3.4. Уникальность имен пакетов
- •4. Область видимости имен
- •4.1. "Затеняющее" объявление (Shadowing)
- •4.2. "Заслоняющее" объявление (Obscuring)
- •5. Соглашения по именованию
- •6. Заключение
- •7. Контрольные вопросы
- •Аннотация
- •Лекция 6. Объявление классов
- •1. Введение
- •2. Модификаторы доступа
- •2.1. Предназначение модификаторов доступа
- •2.2. Разграничение доступа в Java
- •3. Объявление классов
- •3.1. Заголовок класса
- •3.2. Тело класса
- •3.3. Объявление полей
- •3.4. Объявление методов
- •3.5. Объявление конструкторов
- •3.6. Инициализаторы
- •4. Дополнительные свойства классов
- •4.1. Метод main
- •4.2. Параметры методов
- •4.3. Перегруженные методы
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 7. Преобразование типов
- •1. Введение
- •2. Виды приведений
- •2.1. Тождественное преобразование
- •2.2. Преобразование примитивных типов (расширение и сужение)
- •2.3. Преобразование ссылочных типов (расширение и сужение)
- •2.4. Преобразование к строке
- •2.5. Запрещенные преобразования
- •3. Применение приведений
- •3.1. Присвоение значений
- •3.2. Вызов метода
- •3.3. Явное приведение
- •3.4. Оператор конкатенации строк
- •3.5. Числовое расширение
- •3.5.1. Унарное числовое расширение
- •3.5.2. Бинарное числовое расширение
- •4. Тип переменной и тип ее значения
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •1. Введение
- •2. Статические элементы
- •3. Ключевые слова this и super
- •4. Ключевое слово abstract
- •5. Интерфейсы
- •5.1. Объявление интерфейсов
- •5.2. Реализация интерфейса
- •5.3. Применение интерфейсов
- •6. Полиморфизм
- •6.1. Поля
- •6.2. Методы
- •6.3. Полиморфизм и объекты
- •7. Заключение
- •8. Контрольные вопросы
- •Аннотация
- •Лекция 9. Массивы
- •1. Введение
- •2. Массивы, как тип данных в Java
- •2.1. Объявление массивов
- •2.2. Инициализация массивов
- •2.3. Многомерные массивы
- •2.4. Класс массива
- •3. Преобразование типов для массивов
- •3.1. Ошибка ArrayStoreException
- •3.2. Переменные типа массив, и их значения
- •4. Клонирование
- •4.1. Клонирование массивов
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 10. Операторы и структура кода
- •1. Управление ходом программы
- •2. Нормальное и прерванное выполнение операторов
- •3. Блоки и локальные переменные
- •4. Пустой оператор
- •5. Метки
- •6. Оператор if
- •7. Оператор switch
- •8. Управление циклами
- •8.1. Цикл while
- •8.2. Цикл do
- •8.3. Цикл for
- •9. Операторы break и continue
- •9.1. Оператор continue
- •9.2. Оператор break
- •10. Именованные блоки
- •11. Оператор return
- •12. Оператор synchronized
- •13.1. Причины возникновения ошибок
- •13.2. Обработка исключительных ситуаций
- •13.2.1. Конструкция try-catch
- •13.2.2. Конструкция try-catch-finally
- •13.3. Использование оператора throw
- •13.4. Обрабатываемые и необрабатываемые исключения
- •13.5. Создание пользовательских классов исключений
- •13.6. Переопределение методов и исключения
- •13.7. Особые случаи
- •14. Заключение
- •15. Контрольные вопросы
- •Аннотация
- •Лекция 11. Пакет java.awt
- •1. Введение
- •2. Апплеты
- •2.1. Тег HTML <Applet>
- •2.2. Передача параметров
- •2.3. Контекст апплета
- •2.4. Отладочная печать
- •2.5. Порядок инициализации апплета
- •2.6. Перерисовка
- •2.7. Задание размеров графических изображений
- •2.8. Простые методы класса Graphics
- •2.9. Цвет
- •2.9.1. Методы класса Color
- •2.10. Шрифты
- •2.10.1. Использование шрифтов
- •2.10.2. Позиционирование и шрифты: FontMetrics
- •2.10.3. Использование FontMetrics
- •2.10.4. Центрирование текста
- •3. Базовые классы
- •4. Основные компоненты
- •5. Менеджеры компоновки
- •6. Окна
- •7. Меню
- •8. Обработка событий
- •8.1. Рисование "каракулей" в Java
- •8.2. Рисование "каракулей" с использованием встроенных классов
- •9. Заключение
- •10. Контрольные вопросы
- •Аннотация
- •Лекция 12. Потоки выполнения. Синхронизация
- •1. Введение
- •2. Многопоточная архитектура
- •3. Базовые классы для работы с потоками
- •3.1. Класс Thread
- •3.2. Интерфейс Runnable
- •3.3. Работа с приоритетами
- •3.4. Демон-потоки
- •4. Синхронизация
- •4.1. Хранение переменных в памяти
- •4.2. Модификатор volatile
- •4.3. Блокировки
- •5. Методы wait(), notify(), notifyAll() класса Object
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 13. Пакет java.lang.
- •1. Введение
- •2. Object
- •3. Class
- •4. Wrapper Classes
- •4.1. Integer
- •4.2. Character
- •4.3. Boolean
- •4.4. Void
- •5. Math
- •6. Строки
- •6.1. String
- •6.2. StringBuffer
- •7. Системные классы
- •7.1. ClassLoader
- •7.2. SecurityManager - менеджер безопасности
- •7.3. System
- •7.4. Runtime
- •7.5. Process
- •8. Потоки исполнения
- •8.1. Runnable
- •8.2. Thread
- •8.3. ThreadGroup
- •9. Исключения
- •10. Заключение
- •11. Контрольные вопросы
- •Аннотация
- •Лекция 14. Пакет java.util
- •1. Введение
- •2. Работа с датами и временем
- •2.1. Класс Date
- •2.2. Классы Calendar и GregorianCalendar
- •2.3. Класс TimeZone
- •2.4. Класс SimpleTimeZone
- •3. Интерфейс Observer и класс Observable
- •4. Коллекции
- •4.1. Интерфейсы
- •4.1.1. Интерфейс Collection
- •4.1.2. Интерфейс Set
- •4.1.3. Интерфейс List
- •4.1.4. Интерфейс Map
- •4.1.5. Интерфейс SortedSet
- •4.1.6. Интерфейс SortedMap
- •4.1.7. Интерфейс Iterator
- •4.2. Aбстрактные классы используемые при работе с коллекциями.
- •4.3. Конкретные классы коллекций
- •4.4. Класс Collections
- •5. Класс Properties
- •6. Интерфейс Comparator
- •7. Класс Arrays
- •8. Класс StringTokenizer
- •9. Класс BitSet
- •10. Класс Random
- •11. Локализация
- •11.1. Класс Locale
- •11.2. Класс ResourceBundle
- •12. Заключение
- •13. Контрольные вопросы
- •Аннотация
- •Лекция 15. Пакет java.io
- •1. Система ввода/вывода. Потоки данных (stream)
- •1.1. Классы InputStream и OutputStream
- •1.2. Классы-реализации потоков данных
- •1.2.1. Классы ByteArrayInputStream и ByteArrayOutputStream
- •1.2.2. Классы FileInputStream и FileOutputStream
- •1.2.3. PipedInputStream и PipedOutputStream
- •1.2.4. StringBufferInputStream
- •1.2.5. SequenceInputStream
- •1.3. Классы FilterInputStreeam и FilterOutputStream. Их наследники.
- •1.3.1. BufferedInputStream и BufferedOutputStream
- •1.3.2. LineNumberInputStream
- •1.3.3. PushBackInputStream
- •1.3.4. PrintStream
- •1.3.5. DataInputStream и DataOutputStream
- •2. Serialization
- •2.1. Версии классов
- •3. Классы Reader и Writer. Их наследники.
- •4. Класс StreamTokenizer
- •5. Работа с файловой системой.
- •5.1. Класс File
- •5.2. Класс RandomAccessFile
- •6. Заключение
- •7. Контрольные вопросы
- •Аннотация
- •Лекция 16. Введение в сетевые протоколы
- •1. Основы модели OSI
- •2. Physical layer (layer 1)
- •3. Data layer (layer 2)
- •3.1. LLC sublayer.
- •3.2. MAC sublayer.
- •4. Network layer (layer 3)
- •4.1. Class A
- •4.2. Class B
- •4.3. Class CClass DClass E
- •5. Transport layer (layer 4)
- •6. Session layer (layer 5)
- •7. Presentation layer (layer 6)
- •8. Application layer (layer 7)
- •9. Утилиты для работы с сетью
- •9.1. IPCONFIG (IFCONFIG)
- •9.3. Ping
- •9.4. Traceroute
- •9.5. Route
- •9.6. Netstat
- •9.7. Задания для практического занятия
- •10. Пакет java.net
- •11. Заключение
- •12. Контрольные вопросы
Стр. 10 из 37 |
Network layer (layer 3) |
Рассмотрим устройства, используемые для построения сетей в разных топологиях.
При использовании топологии построения сети шина ("bus") все компьютеры посылают фреймы на физический уровень, а дальше по среде передачи данных (например, кабелю) другим компьютерам. Т.е. все устройства, подсоединенные к одной среде, получают все пакеты, которые проходят по сети. Специальных устройств для построения такой сети не используется.
При построении сети на основе топологии Token Ring используется другой принцип. Физически сеть представляет собой замкнутое кольцо. В отличие от сети, работающей на основе Ethernet, здесь используется передача данных по очереди. Т.е. вычисляется, сколько времени может передавать данные одна станция, по истечении этого времени данные начинает передавать другая рабочая станция и т.д.
При построении сети на основе технологии "звезда" нужно использовать кроме сетевых карт в компьютере дополнительное сетевое оборудование в центре, куда подключаются все "лучи звезды". Типичным примером является концентратор (hub). Подключение происходит с помощью кабеля "витая пара". Все компьютеры подключаются к концентратору. Используемая технология Ethernet позволяет снизить количество коллизий с помощью CSMA/CD. Подключенный компьютер посылает данные. Коммутатор транслирует этот фрейм на все порты. Дальше получатель проверяет, кому был послан фрейм и если MAC получателя совпадает с MAC-адресом, то пакет принимается, если нет - отбрасывается. Недостатком концентратора является то, что пользователи сети могут "прослушивать" чужой трафик (в том числе перехватить пароль, если он передается в открытом виде). Также общая максимальная скорость делится на всех подключенных в концентратор. И если скорость передачи данных используется 10 Мбит/с, то в среднем на каждого конкретного пользователя приходится около 2 Мбит/с.
Более дорогим, но и более производительным решением, является использование коммутатора(switch). Коммутатор в отличие от концентратора имеет таблицу MAC-address - Port. Он смотрит у всех фреймов адреса отправителя и получателя. Далее при прохождении фрейма коммутатор просматривает адрес получателя, и если он знает, какому порту соответствует адрес получателя, то он посылает его на этот порт. Если адрес получателя коммутатору не известен, то он отправляет фрейм на все порты, кроме того, с которого этот пакет пришел. Таким образом, получается, что если два компьютера обмениваются данными между собой, то они не забивают своими пакетами другие порты и соответственно их пакеты практически невозможно "подслушать".
4. Network layer (layer 3)
В предыдущей главе мы рассмотрели второй уровень в модели OSI. Одним из ограничений 2?го уровня является использование "плоской" модель адресации. При попытке построить большую сеть, используя для идентификации компьютеров MAC-адреса, мы получим огромное количество broadcast-трафика. Протокол, который поддерживается сетевым уровнем, использует иерархическую структуру для уникальной идентификации компьютеров.
Для примера представим себе телефонную сеть. Она также имеет иерархическую адресацию. Например, в номере +7-095-101-12-34 первая цифра обозначает код страны, далее идет код области/города(095), а затем указывается сам телефон (101-12-34). Последний номер также является составным. 101 - это код станции, куда подключен телефон, а 12-34 определяет местоположение телефона. Благодаря такой иерархической
Программирование на Java
Rendered by www.RenderX.com
Class A |
Стр. 11 из 37 |
структуре мы можем определить расположение требуемого абонента с наименьшими затратами. Иерархическая адресация для сети также должна позволять передавать данные между разрозненными и удаленными сетями. На сетевом уровне существует несколько протоколов, которые позволяют передавать данные между сетями - IP, IPX. Наиболее распространенным протоколом на сегодняшний день является IP. IPX же практически не используется в публичных сетях, но его можно найти в частных, закрытых сетях.
Устройства, работающие на 3-м уровне, называют роутерами (router). Они соединяют удаленные сети, объединяют территориальные сети (LAN) в глобальные (WAN). Роутер получает пакет с локального устройства или компьютера (в дальнейшем будем просто называть LAN) и смотрит заголовок 3го уровня. На основании полученной информации с 3го уровня роутер принимает решение, что делать с пакетом. Основная задача роутера - выбор пути, по которому нужно передать пакет. Т.к. у нас может существовать множество связей между двумя сетями - еще одна задача роутера выбрать наиболее оптимальный путь для прохождения пакета. Выбор роутером следующего узла сети (следующего hop'а) для доставки его получателю называется "routing the packet". Выбор "next hop", по которому роутер перешлет пакет, может зависеть от многих факторов - загрузки сети, наименьшего пути до получателя, стоимости трафика по различным маршрутам и т.д.
Адресация на сетевом уровне дает возможность роутеру определить путь для доставки пакета получателю через глобальные сети. Было разработано и сейчас существует несколько протоколов сетевого уровня. Один из основных и наиболее распространенный - протокол IP. Рассмотрим более реализацию этого протокола.
При прохождении данных с верхних уровней на нижние на сетевом уровне к ним добавляется дополнительные данные сетевого уровня. В заголовке IP-пакета содержится необходимая для дальнейшей передачи информация - адрес отправителя, адрес получателя(кроме адресов там также содержится служебная информация). Рассмотрим более подробно понятие IP-адрес. IP-адрес представляется 32-х битным бинарным числом, разбитым на 4 части по восемь бит каждая. Логически его разбивают на две части - network и host. Компьютеры с одинаковой частью network IP-адреса в сети могут легко передавать данные между собой, но если они имеют различные network-ID, то даже если они находятся в одном физическом сегменте, обычно они не могут "увидеть" друг друга.
Сетевая часть IP-адреса показывает принадлежность сетевого адреса - какой сети принадлежит адрес. Хост (host) идентифицирует сетевое устройство в этой сети. Т.к. сетевой адрес состоит из 4-х октетов, один, два или три первых октета могут использоваться для определения сетевого адреса. Подобным образом до 3-х октетов может быть использовано для определения host-части. Существует вообще пять классов IP-адресов. Три из них используются в открытых сетях по всему миру (class A, class B, class C).
Class A |
N |
H |
H |
H |
Class B |
N |
N |
H |
H |
Class C |
N |
N |
N |
H |
4.1. Class A
В классе А используется для определения принадлежности адреса к сети первый октет, остальные для определения адреса хоста. Если перевести бинарное число сетевой части в десятичное - то мы получим что адрес сети класса А может быть в диапазоне 0-126(127й
Программирование на Java
Rendered by www.RenderX.com
Стр. 12 из 37 |
Network layer (layer 3) |
адрес зарезервирован для специального использования). Остальные свободные три октета используются для задания адреса хоста в данной сети. В одной сети может быть использовано до 2^24 адресов (за исключением двух) - получается 16 777 214 возможно использовать в одной сети класса А.
Диапазон адресов 10.0.0.0-10.255.255.255 не используется в публичных сетях. Эти адреса специально зарезервированы для использованя в локальных сетях и не обрабатываются глобальными маршрутизаторами.
4.2. Class B
Всети класса B используются первые два октета для определения сети, последние два октета - для определения адреса хоста. Диапазон сети класса B может быть с 128 до 191 (исходя из первых двух октетов). В каждой сети класса B может быть не более 65534 адресов - 216 (за исключением двух адресов).
Вэтой подсети зарезервированными для локального использования являются следующие адреса: 172.16.0.0-172.31.0.0.
4.3. Class CClass DClass E
Диапазон сети класса C определяется первыми тремя октетами. И в десятичном виде эта сеть может начинаться с 192 по 223. Для определения адреса хоста используется последний октет. Таким образом, в сети класса C может быть использовано 28(без двух адресов) или 254 адреса
Зарезервированными для локального использования являются следующие адреса: 192.168.0.0-192.168.255.255.
Этот класс используется для multicast-группы. Диапазон адресов – 224.0.0.0-239.255.255.255.
Этот класс адресов зарезервирован для будущего использования. Диапазон адресов –
240.0.0.0-247.255.255.255.
Два адреса в каждой подсети являются зарезервированными. IP-адрес, оканчивающийся на бинарный ноль, используют для обозначения сетевого адреса. Например для сети класса А адрес сети - 112.0.0.0, и этой сети принадлежит сетевой адрес - 112.2.3.4. Адрес сети используется роутерами для определения маршрута. Второй зарезервированный адрес - броадкаст-адрес (broadcast). Этот адрес используется, когда источник хочет послать данные всем устройствам в сети. В отличии от адреса сети - в адресе броадкаста используется бинарная единица(в октетах, отвечающих за часть хоста). Например, для сети 171.10.0.0 последние 16 бит адреса используется для обозначения хоста, и броадкастадрес будет выглядеть как 171.10.255.255. И все устройства в сети 171.10.0.0 получат данные, которые были посланы по адресу 171.10.255.255.
Выше мы рассмотрели разбиение на классы сетей. Но не всегда имеет смысл использовать например сеть класса С когда в ней реально будут использоваться только половина адресов. Для более рационального распределения адресов используются подсети. Адрес подсети включает в себя сетевую часть сети класса A,B или C и т.н. subnet field и часть хоста. Для subnet field выделяется значение из октетов, принадлежащих хосту (т.е. для адреса подсети может быть использовано до 3-х октетов из сети класса А, до 2х из сети класса B, и 1 для C соответственно). Создавая адрес подсети, несколько бит из части
Программирование на Java
Rendered by www.RenderX.com