Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

Не все объектно-ориентированные языки программирования содер­жат языковые конструкции для описания множественного наследования.

В языке Java множественное наследование имеет ограниченную под­держку через интерфейсы и будет рассмотрено в лекции 8.

Полиморфизм

Полиморфизм является одним из фундаментальных понятий в объ­ектно-ориентированном программировании наряду с наследованием и инкапсуляцией. Слово "полиморфизм" греческого происхождения и оз­начает "имеющий много форм". Чтобы понять, что оно означает приме­нительно к объектно-ориентированному программированию, рассмот­рим пример.

Предположим, мы хотим создать векторный графический редактор, в котором нам нужно описать в виде классов набор графических прими­тивов - Point, Line, Circle, Box и т.д. У каждого из этих классов определим метод draw для отображения соответствующего примитива на экране.

Очевидно, придется написать код, который при необходимости ото­бразить рисунок будет последовательно перебирать все примитивы, на момент отрисовки находящиеся на экране, и вызывать метод draw у каж­дого из них. Человек, незнакомый с полиморфизмом, вероятнее всего, создаст несколько массивов (отдельный массив для каждого типа прими­тивов) и напишет код, который последовательно переберет элементы из каждого массива и вызовет у каждого элемента метод draw. В результате получится примерно следующий код:

//создание пустого массива, который может содержать //объекты Pointe максимальным объемом 1000 Point[] р = new Point[1000];

Line[] I   = new Line[ 1000]; Circlef] c= new Circle[1000]; Box[]b = new Box[1000];

//предположим, в этом месте происходит заполнение

// всех массивов соответствующими объектами

1ог(Ы \ = 0;\< р.\епдт;\++) { //цикл с перебором всех ячеек массива.

//вызов метода draw() в случае,

// если ячейка не пустая.

1т(р[1]!=пШ1) p.draw();

}

тогО'т I = 0; |" < 1.1епдтх1;1++) { 1т(1[1]!=пи11) 1.с1гауу();

}

1ог(\Ш \-0;\< с.1епд№;1++) { №(с[1]!=пи11) c.draw();

}

1ог(\п\. I = 0; 1 < Ь.1епдтп;!++) { |т(Ь[ф=пи11) b.draw();

}

Недостатком написанного выше кода является дублирование практи­чески идентичного кода для отображения каждого типа примитивов. Также неудобно то, что при дальнейшей модернизации нашего графического ре­дактора и добавлении возможности рисовать новые типы графических примитивов, например Text, Star и т