пользователей: 21241
предметов: 10456
вопросов: 177505
Конспект-online
зарегистрируйся или войди через vk.com чтобы оставить конспект.
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Реализация объектной модели в Object Pascal. Полиморфизм. Перегружаемые методы. Раннее и позднее связывание. Зоны видимости полей и методов.

 

Объекный тип (класс) представляет собой объединение данных и правил их преобразования. Переменные объектного типа называются экземплярами класса или просто объектами. Класс – это тип объекта; объект – это конкретный экземпляр класса.

 

Полиморфизм (многоформие)

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

Одно и то же имя может означать объекты разных типов, но, имея общего предка, все они имеют и общее подмножество операций, которые можно над ними выполнять

var

  A : TPoint;

  C : TCircle;

begin

A.Show;

C.Show;

end;

 

Раннее связывание

program primer1;                                           Результат работы программы:

type TA = class                                              TA

         procedure out;                           TB

        end;

     TB = class(TA)                                         В процессе компиляции будет

         procedure out;                           установлена связь объекта с нужным

        end;                                                        методом. Такое связывание объектов

var a:TA;                                                        называют ранним, а методы

    b:TB;                                                          статическими.

procedure TA.out;

 begin

  writeln('TA');

 end;

procedure TB.out;

 begin

  writeln('TB');

 end;

begin

 a.out;

 b.out;

 readln;

end.

 

Другой пример:

program primer2;                                            Результат работы программы:

type TA = class                                              TA

         procedure out;                           TA

         function outstr:string;               В данном случае метод TB.OutStr

        end;                                                        не работает. Еще на этапе компиляции

     TB = class(TA)                                         произошло связывание объектов и

       function outstr:string;                 методов.

       end;                                                         Метод TA.Out оказался накрепко связан

var   a:TA;                                                      с TA.OutStr. Несмотря на то, что он

      b:TB;                                                        унаследовался для объекта TB, он просто

procedure TA.out;                                         не знает о существовании TB.OutStr.

 begin

  writeln(outstr);

 end;

function TA.outstr:string;

 begin

  outstr:='TA';

 end;

function TB.outstr:string;

 begin

  outstr:='TB';

 end;

begin

 a.out;

 b.out;

 readln;

end.

Пример позднего связывания

program primer3;                                                       function TA.outstr:string;

type TA = class                                                         begin

         constructor Create;                                           outstr:='TA';

         procedure out;                                      end;

         function outstr:string;virtual;                constructor TB.Create;

        end;                                                                   begin

     TB = class(TA)                                                     end;

         constructor Create;                                           function TB.outstr:string;

         function outstr:string;virtual;                begin

        end;                                                                   outstr:='TB';

var a:TA;                                                                   end;

    b:TB;                                                                     begin

constructor TA.Create;                                              a := TA.Create;

 begin                                                                         b := TB.Create;

 end;                                                                          a.out;

procedure TA.out;                                                     b.out;

 begin                                                                         readln;

  writeln(outstr);                                                        end.

 end;                                      

Результат работы программы:

            TA

            TB

В данном примере родительский метод TA.Out узнал о существовании виртуального метода TB.OutStr и использовал именно его при обращении B.Out.

 Зоны видимости полей и методов

В языке Object Pascal введен механизм доступа к составным частям объекта, определяющий области, где ими можно пользоваться (т. е. области видимости). Поля и методы могут относиться к четырем группам, отличающимся областями сокрытия информации:

 

public — общие;

private — личные;

protected— защищенные;

published — опубликованные.

Поля, свойства и методы, находящиеся в секции public, не имеют ограничений на видимость. Они доступны из других функций и методов объектов как в данном модуле, так и во всех прочих, ссылающихся на него. Обычно методы данной секции образуют интерфейс между объектного обмена сообщениями в период выполнения программы (run-time).

 

Поля, свойства и методы, находящиеся в секции private, доступны только в методах класса и функциях, содержащихся в том же модуле, что и описываемый класс. Такая директива позволяет скрыть детали внутренней реализации класса от всех.

Раздел protected комбинирует функциональную нагрузку разделов private и public таким образом, что если вы хотите скрыть внутренние механизмы вашего объекта от конечного пользователя, этот пользователь не сможет в run-time использовать ни одно из объявлений объекта из его protected-области. При этом protected-объявления доступны у любого из наследников класса.

 

            Раздел published оказался необходимым в среде визуальной разработки программ Delphi. Именно published-объявления доступны через Object Inspector, будь это ссылки на свойства или обработчики событий. Во время исполнения приложения раздел объекта published полностью аналогичен public.




 

32.           


22.01.2015; 17:37
хиты: 33
рейтинг:0
Точные науки
информатика
Языки программирования
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2016. All Rights Reserved. помощь