Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Вопрос 13 Полиморфизм как концепция ООП.

Читайте также:
  1. Amp; 3. «Внутренний» реализм и «когерентная» концепция истины.
  2. B. Концепция маркетинга.
  3. Вопрос 16. 16. Трансмиссионный механизм денежно-кредитной политики в кейнсианской и монетаристской концепциях.
  4. Глава 5 «КОНЦЕПЦИЯ ЕЖА», ИЛИ ТРИ ПЕРЕСЕКАЮЩИХСЯ КРУГА
  5. Естественно-правовая концепция правопонимания.( 17—18 вв)
  6. Знанецкий Ф. Функция социологии как науки о культуре // Человек и общество: Хрестоматия / Под ред. С.А.Макеева. – К., 1999. – С. 159–179. Концепция общества как культурной системы

Полиморфизм – это концепция ООП. В общем случае это означает возможность принимать множество форм. В программировании же это означает, возможность метода, реализованного для объекта указанного класса, вызываться автоматически, используя одну переменную для доступа к объектам разных классов посредствам механизма динамического связывания.

Рассмотрим пример. Предположим, что необходимо создать программу, которая позволила бы создать геометрические фигуры (круг, треугольник, прямоугольник).

Вначале постараемся определить классы, которые понадобятся в программе. Для этого перефразируем предложения, выделяя существительные: Чертеж состоит из набора фи­гур ( Shape ). Фигура может быть окружностью ( Circle ), прямоугольником ( Rectangle ), треу­гольником ( Triangle ) и т. д. Соответственно, нужно реализовать класс Shapeи несколько подклассов. В данном случае достаточно ограничиться тремя подклассами: Circle, Rectangle и Triangle, как показано на рисунке.

 

По мере того как необходимо добавлять фигуры к чертежу, в программе создаются соответствующие объекты Shape(в данном случае Circles, Rectangles и Triangles ). Свой­ства каждого объекта Shapeсохраняются внутри него. Для хранения объектов необходимо создать соответствующий массив.

Как же разные объекты могут быть размещены в одном массиве, если все его эле­менты должны иметь один тип? Поскольку Circle, Squareи Triangle— потомки Shape, любой из объектов этих трех типов может быть помещен в переменную типа Shape. Чтобы нарисовать объект, можно было бы написать метод в отдельном классе DrawingMachineи назвать его MakeDrawing. Этот метод перебирал бы объекты в мас­сиве, просматривал значения их переменных экземпляра и определял позицию, размер и форму объекта. Такой подход был бы неудобен, поскольку параметры и алгоритмы рисования объектов различны. Например, окружности нужен радиус и координаты цен­тра, прямоугольнику — высота и ширина, а более замысловатым формам может пона­добиться и большее число параметров.

Здесь и стоит обратиться к полиморфизму. Полиморфизм позволяет реализовать следующую методику: вместо того, чтобы раз­бираться извне, как следует рисовать каждый объект, стоит позволить объекту самому поддерживать свой алгоритм рисования. Каждый объект будет инкапсулированным па­кетом, содержащим данные и действия, необходимые для его отображения. Назовем метод, выводящий объект на экран, DrawYourself. Он нужен объекту любой формы, поэтому его необходимо объявить в классе Shape. Однако, неизвестна реализация DrawYourselfдля Shape. Поэтому DrawYourselfнужно объявить abstractв классе Shape, а затем вклю­чить его реализацию в каждом из трех подклассов.

Напомним, что абстрактный метод одновременно виртуален, и если переопределить DrawYourselfв каждом классе, производном от Shape, сработает механизм динамичес­кого связывания. Это означает, что для рисования объектов достаточно просто вызы­вать метод DrawYourselfкаждого из них. Механизм динамического связывания опреде­лит, Какого типа объект хранится в каждом элементе массива, и автоматически вызовет соответствующий метод DrawYourself.

Следует отметить, что DrawYourselfобъявлен abstractв классе Shape и пе­реопределен в каждом из трех подклассов. Подклассы просты и не содержат информа­ции о положении или размерах. Они просто выводят фигуру на экран.

Несмотря на то для переменной вызывается один и тот же метод DrawYourself из переменной myShape, благодаря механизму динамического связывания в каждой из них исполняется своя реализация метода DrawYourself. При вызове myShape.DrawYourself() программисту не приходится задумываться, какой объект хранится в myShape, и о других деталях. Полиморфизм позволяет рисо­вать чертеж на высоком уровне абстракции.


Дата добавления: 2015-10-23; просмотров: 104 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Перегрузка методов. Вызов методов с одинаковым именем и разными аргументами| Вопрос 14 Потеря и восстановление информации о типе. Операторы is и as.

mybiblioteka.su - 2015-2024 год. (0.006 сек.)