Полиморфизм.pptx
- Количество слайдов: 8
Объектно-ориентированное программирование: полиморфизм Македонский Павел 38 группа
Полиформизм Полиморфизм (polymorphism) (от греческого polymorphos) - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектноориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных.
В более общем смысле, концепцией полиморфизма является идея "один интерфейс, множество методов". Это означает, что можно создать общий интерфейс для группы близких по смыслу действий. Преимуществом полиморфизма является то, что он помогает мнижать сложность программ, разрешая использование того же интерфейса для задания единого класса действий. Выбор же конкретного действия, в зависимости от ситуации, возлагается на компилятор. Вам, как программисту, не нужно делать этот выбор самому. Нужно только помнить и использовать общий интерфейс. Пример из предыдущего абзаца показывает, как, имея три имени для функции определения абсолютной величины числа вместо одного, обычная задача становится более сложной, чем это действительно необходимо.
Рассмотрим внимательно следующий пример. Пусть у нас имеются некое обобщенное поле для хранения данных — класс TFieid и три его потомка — для хранения строк, целых и вещественных чисел: type (*) function TString. Fieid. Get. Data; TField = class begin function Get. Data: string; virtual; abstract; Result : = FData end; TString. Fieid = class(TField) function TInteger. Field. Get. Data; FData : string; begin function Get. Data: string; override; Result : = Int. To. Str(FData); end; TInteger. Field = class(TField) function TExtended. Field. Get. Data; FData : Integer; begin function Get. Data: string; override; Result: = Float. To. Str. F(FData, end; ff. Fixed, 7, 2); TExtended. Field = class(TField) end ; FData : Extended; procedure Show. Data(AField : function Get. Data: string; override; TField); end; (*) begin Forml. Label!. Caption : = AField. Get. Data; end;
В этом примере классы содержат разнотипные поля данных FData и только-то и "умеют", что сообщить о значении этих данных текстовой строкой (при помощи метода Get. Data). Внешняя по отношению к ним процедура Show. Data получает объект в виде параметра и показывает эту строку.
Правила контроля соответствия типов (typecasting) языка Object Pascal гласят, что объекту как указателю на экземпляр объектного типа может быть присвоен адрес любого экземпляра любого из дочерних типов. В процедуре show. Data параметр описан как TFieid — это значит, что в нее можно передавать объекты классов и TString. Field, и TInteger. Field, и TExtended. Field, и любого другого потомка класса TFieid. Но какой (точнее, чей) метод Get. Data при этом будет вызван? Тот, который соответствует классу фактически переданного объекта. Этот принцип называется полиморфизмом, и он, пожалуй, представляет собой наиболее важный козырь ООП.
Основные, "родовые" черты (методы) нужно описать в классе-предке и затем перекрывать их в классахпотомках. В нашем примере программисту, пишущему процедуру вроде show. Data, важно лишь, что любой объект, переданный в нее, является потомком TFieid и он умеет сообщить о значении своих данных (выполнив метод Get. Data). Если, к примеру, такую процедуру скомпилировать и поместить в динамическую библиотеку, то эту библиотеку можно будет раз и навсегда использовать без изменений, хотя будут появляться и новые, неизвестные в момент ее создания классы-потомки TFieid.
Наглядный пример использования полиморфизма дает среда Delphi. В ней имеется класс TComponent, на уровне которого сосредоточены определенные "правила" взаимодействия компонентов со средой разработки и с другими компонентами. Следуя этим правилам, можно порождать от класса TComponent свои компоненты, настраивая Delphi на решение специальных задач.
Полиморфизм.pptx