- •Открытые информационные системы: анализ и тенденции
- •Введение
- •Глава 1. Локальные компьютерные сети.
- •1.1. Открытые системы
- •1.2. Архитектура клиент-сервер
- •1.3. Тенденции развития архитектуры клиент-сервер
- •1.4. Построение локальных компьютерных сетей
- •Топология
- •Кабельная система
- •Тонкий Ethernet
- •Сетевые адаптеры
- •1.5. Основы проектирования сетей
- •Проводка и топология
- •Объединение локальных сетей
- •Коммутаторы
- •Виртуальные локальные сети
- •Централизованные и распределенные сети
- •Контрольные вопросы
- •Глава 2. Глобальные компьютерные сети
- •2.1. Классификация глобальных сетей
- •2.2. Каналы связи глобальных сетей
- •2.3. Два подхода к телекоммуникациям
- •2.4. Две среды, образующие топологию скп
- •2.5. Две архитектуры скп
- •2.6. Коммуникация и маршрутизация в скп
- •Контрольные вопросы
- •Глава 3. Сети internet
- •3.1. Система доменов Internet
- •3.2. Стандартная функциональная модель сетевого обеспечения
- •Основные понятия сети Internet
- •Глава 4. Сетевые операционные системы
- •4.1. Серверы NetWare
- •4.2. Серверы unix
- •4.3. Системы для интеграции сетевых приложений
- •Контрольные вопросы
- •Глава 5. Протоколы глобальных сетей
- •5.1. Протоколы семейства psdn (х.25)
- •5.2. Основные протоколы, используемые в сети Internet
- •Контрольные вопросы
- •Глава 6. Протоколы tcp/ip
- •6.3. Классификация сетей по ip-адресам
- •6.4. Структура связей протокольных модулей в сети tcp/ip
- •6.4.1. Взаимозависимость протоколов семейства тср/ip
- •Потоки данных
- •Мультиплексор
- •Протоколы tcp/ip для подключения к линиям связи, отличным от Ethernet
- •6.5.1. Тср/ip по последовательным линиям
- •Тср/ip по спутниковой связи
- •Контрольные вопросы
- •Глава 7. Прикладные программы и протоколы
- •2. Протокол nfs.
- •4. Протокол и система X-Window.
- •5. Система Ping.
- •6. Протокол и система telnet.
- •7. Протоколы и системы факс-службы и электронной почты.
- •Контрольные вопросы
- •Глава 8. Программные приложения и
- •8.1 Универсальный локатор информационных ресурсов (url)
- •8.2. Система gopher
- •8.2.1. Локальные и уделенные Gopher – клиенты
- •8.3. Система wais
- •8.4 Средства организации телеконференций в сети Internet
- •8.5. Информационно-поисковые системы Internet
- •8.5.1. Система archie
- •8.5.2. Система trickle
- •8.5.4. Система х.500
- •8.5.5. Система Finger
- •8.5.6. Система netfind
- •Глава 9. Гипертекстовые технологии и системы
- •9.1 Всемирная паутина - world – wide web (www)
- •9.2. Гипертекст и гипертекстовые системы
- •Фрагмент 1 Фрагмент 2
- •Подсеть 1 Подсеть 2
- •9.3 Классификация гипертекстовых систем
- •9.4 Базовые принципы создания гтс
- •9.5. Язык гипертекстовых систем (html)
- •9.6. Гипертекстовая система Hyper-g
- •Контрольные вопросы
- •Глава 10. Системы интранет
- •Контрольные вопросы
- •Глава 11. Технология java
- •11.1. Инкапсуляция
- •11.2. Полиморфизм
- •11.3. Перспективы, связанные с использованием языка Java
- •Контрольные вопросы
- •Глава 12. Современные технологии и перспективы развития сети internet
- •12.1. Vrml - технология
- •12.2. Технология передачи стереоизображений
- •Контрольные вопросы
- •Заключение
- •Заключение
- •Список литературы
- •Учебное издание
- •Редактор т.А. Щепкина
- •394026 Воронеж, Московский проспект, 14.
11.2. Полиморфизм
Термин полиморфизм образован от двух греческих слов: поли - много и морфе - форма. Полиморфизм позволяет создавать классы, которые будут вести себя по-разному в зависимости от того, подобъектом какого субкласса они являются. Иногда это называют наследованием наоборот.
Таким образом, наследование и полиморфизм связывает классы. Под статическим связыванием класса подразумевается техника наследования или агрегация, так как в этом случае поведение класса однозначно определено на момент компиляции и обеспечивается статический контроль типов. Динамическое связывание - это техника создания класса, поведение которого на момент компиляции не определено, поэтому используется динамический контроль типов.
Используя эти термины, можно определить ООП как программирование, ориентированное на использование классов в качестве основного механизма абстракции данных, причем классы могут иметь как динамическое, так и статическое связывание. Такое определение акцентирует внимание на понятии класса, при этом вопросы наследования и полиморфизма более тесно интегрируются с концепцией классов.
В С++ динамическое связывание классов осуществляется за счет виртуальных функций, а в Java - с помощью подменяющих методов.
Полиморфизм в Java.
Динамическое связывание в Java практически полностью соответствует аналогичному механизму в С++, за исключением того, что в Java не требуется явно объявлять функцию как виртуальную (в Java даже отсутствует такое ключевое слово). Это делает использование динамического связывания более простым и естественным. Сигнатуру метода определяют количество и тип формальных параметров, и тип возвращаемого значения.
Кроме того, в сигнатуру косвенно (по специальным правилам) входят модификатор доступа метода и список необрабатываемых исключительных ситуаций.
abstract class Shape {
void draw(int x, int y);
}
class Line {
void draw(int x, int y) {...}
}
class circle {
void draw(int x, int y) {...}
}
class Palette {
Shape getPalette() {
return new Line();
// return new Circle();
}
}
Shape shape = new Palette().getPalette();
shape.draw(x, y); // будет нарисована линия
Единственным поводом для создания такой конструкции может быть желание иметь в двух связанных классах доступные из глобальной области невиртуальные методы с одинаковыми сигнатурами. Однако такая гибкость, скорее, может запутать код и зачастую свидетельствует о плохо разработанном проекте.
Суммируя результаты сравнительного анализа языков С++ и Java, можно сделать однозначный вывод о преимуществе Java перед С++ в области объектно-ориентированного программирования.
По сравнению с С++ Java демонстрирует значительно более гибкую и мощную систему инкапсуляции информации. Вложенные и локальные классы в С++ оказываются малополезными и могут использоваться только как средство разграничения области видимости. В Java классы верхнего уровня, вложенные, локальные и анонимные реализованы в полной мере и увязаны с новыми правилами определения области действий и времени жизни объектов, что делает технику вложенных классов одной из основных во многих приложениях, например для библиотеки классов оконно-графического интерфейса (Java AWT 1.1).
Наследование - это та область, где Java не оставляет никаких шансов С++. Последний обладает сложной, неадекватной, трудной для понимания системой наследования. Конструкции языка Java обязывают разработчика к более строгому программированию, что, в свою очередь, улучшает надежность и понимаемость кода.
Возможности динамического связывания одинаково хорошо представлены как в С++, так и в Java. Однако синтаксическая избыточность С++ в этом вопросе позволяет отдать предпочтение Java и на этот раз.