Коренным образом меняется ситуация в случае позднего связывания. Рассмотрим случай, когда одно из окон перекрывает другое. Если "верхнее" окно будет передвинуто или закрыто, то нижнее следует перерисовать для восстановления ранее перекрытой части. Так как меню перерисовывается иначе, чем, например, окно редактора, то каждый объект в оконной иерархии должен знать, как перерисовать себя. Таким образом, в каждом классе будет своя функция-метод, связанная с объектом, которая знает, как перерисовать данный объект на экране. Механизм полиморфизма позволяет называть этот метод одним и тем же именем в различных классах объектов. Кроме того, он позволяет полиморфно вызывать метод, реализуя его контекстную привязку к объекту. Следовательно, нет необходимости анализировать, к какому типу окна он относится, как это требуется при раннем связывании. Происшедшее событие просто инициирует команду "Перерисовать", и объекты корректно перерисовывают себя на экране. Таким образом, если пакет содержит семь типов окон, то в нем будет семь различных правил перерисовки, но все они будут называться одинаково: "Перерисовка".
Это множественность форм, которые может принимать правило с одним и тем же именем, называется полиморфизмом, от греческого polymorphos - многообразный.
Полиморфизм – исключительно мощный метод обобщения однотипных задач для многих разных объектов. Он повышает степень абстрагирования при создании программного обеспечения, т.к. программист заботится только о том, чтобы указать правильное действие, а не о том, как его выполнить. Это возможно благодаря позднему связыванию.
Полиморфизм является одним из фундаментальных свойств ОПП. Суть его заключается в том, что одни и те же имена (например, объявление переменных или методов) могут соответствовать различным классам объектов.
Поэтому объект, объявленный с таким именем, будет по-разному реагировать на некоторое множество допустимых событий, в зависимости от класса объекта, который это имя представляет в текущий момент.
Класс в ООП подразумевает собой некоторое описание, определяющее множество объектов, связанных общностью структуры и поведения. В большинстве случаев класс можно понимать как новый тип данных (за исключением понятий наследования и иерархичности).
С++ класс, определяемый посредством ключевых слов struct, union или class, включает в себя функции (называемые методами) и данные (называемые элементами данных), создавая новый тип объектов.
Компоненты класса имеют ограничения на доступ. Эти ограничения определяются ключевыми словами "private:", "protected:", "public:".
Для ключевого слова class "по умолчанию" все компоненты будут private. Это означает, что они (их имена) будут недоступны для использования вне компонентов класса. Ограничение доступа "по умолчанию" для некоторого компонента можно изменить, записав перед ним атрибут модификации доступа - ключевое слово public или protected и двоеточие. Таким образом, упрощенную форму описания класса можно записать в виде:
Class имя класса {
данные и функции с атрибутом private (по умолчанию)
protected:
данные и функции с атрибутом protected
public:
данные и функции с атрибутом public
} объекты этого класса через запятую;
Пусть необходимо создать класс объектов точка (point) на экране дисплея. Точка на экране определяется координатами Х и У, имеет цвет, например С, и функцию (метод), отображающую ее на экране. Тогда, согласно определению, создадим формальное описание класса Point:
class Point {
int X,Y,C;
public:
void show (void); //void - пустое значение, используемое в качестве
//типа возвращаемого значения и в качестве списка передаваемых
//параметров
{ putpixel(X,Y,C); }}; //putpixel - стандартная функция отображения
//точки на экране с координатами Х,У и цветом, заданным в С.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.