Главная страница
Навигация по странице:

  • Листинг

  • реферат Простые операторы. Характеристика форм.docx. Лр операторы и выражения Delphi


    Скачать 1.3 Mb.
    НазваниеЛр операторы и выражения Delphi
    Дата17.04.2023
    Размер1.3 Mb.
    Формат файлаdoc
    Имя файлареферат Простые операторы. Характеристика форм.docx.doc
    ТипПрограмма
    #1067638
    страница14 из 26
    1   ...   10   11   12   13   14   15   16   17   ...   26

    Особенности объявления методов


    Хотя по своей сути метод является процедурой или функцией, в объектно-ориентированном программировании в него вкладывается значительно более глубокий смысл. Концепция ООП предполагает возможность класса наследовать методы своего предшественника, а при необходимости и переопределять их поведение. Для обеспечения этой, очень сложной задачи в Delphi методы разделяются на три категории:

    • статические (директива static);

    • динамические (директива virtual);

    • виртуальные (директива dynamic).

    По умолчанию, любой вновь описанный метод, становится статическим. Такое название метод заслужил из-за того, что во время компиляции статическому методу выдается постоянный адрес, такой способ называется статическим связыванием (static binding). У метода с постоянным адресом есть две особенности: высокая скорость вызова (что не может не радовать) и абсолютная невозможность изменить поведение этого метода в дочерних классах (что является отрицательной стороной статического связывания). Одним словом, объявляя статический метод, мы должны понимать, что наносим удар по полиморфизму (наследник класса утратит возможность переопределить этот метод).

    В отличие от своего статического собрата виртуальные и динамические методы исповедуют идеи позднего связывания (late binding). Это означает, что адреса таких методов не "высечены в граните", а могут изменяться. Так адреса виртуальных методов класса заносятся в таблицу виртуальных методов этого класса, а адреса динамических методов — в специальный список методов этого класса. Благодаря технологии позднего связывания доступ к виртуальным и динамическим методам осуществляется несколько медленнее, но зато они допускают переопределение своего поведения у классов-потомков.

    Поля класса и методы класса


    Одно из правил объектно-ориентированного программирования предполагает, что обращение к полям и методам, описанным в классе, невозможно до тех пор, пока из класса не будет создан объект — экземпляр класса. С точки зрения программы Delphi это означает, что начало работы со свойствами и методами объекта должно предваряться вызовом его конструктора Create().

    Однако из правил существуют исключения. В состав класса могут входить особые поля и методы, которые остаются доступными даже в отсутствие экземпляра объекта. Такие поля и методы называют соответственно полями класса (class fields) и методами класса (class methods).

    По своей сути поле класса представляет собой обычную переменную, для ее объявления следует воспользоваться ключевыми словами class var или просто var.

    Метод класса представляет собой процедуру или функцию с первым словом в заголовке class, например class procedure или class function.

    Благодаря полю класса и методу класса мы можем внести очередное усовершенствование класса двигателя TEngine (листинг 3.13).


    Листинг 3.13. Объявление поля класса и метода класса TEngine




    TEngine=class private

    fEnabled :boolean; fAutomobile:TAutomobile;

    public

    class var fMax_HorsePower : word; //переменная класса

    class function GetMax_HorsePower : word; //метод класса

    ...

    end;

    {реализация функции класса}

    class function TEngine.GetMax_HorsePower: word;

    begin

    Result:=fMax_HorsePower;

    end;
    Как и утверждалось ранее, для обращения к полям и методам класса совсем не обязательно создавать объект, вполне допустимо воспользоваться строками кода из листинга 3.14.


    Листинг 3.14. Обращение к полю класса и методу класса TEngine




    var X:Word;

    begin

    with TEngine do begin

    fMax_HorsePower:=250; X:=GetMax_HorsePower;

    end; end;

    1   ...   10   11   12   13   14   15   16   17   ...   26


    написать администратору сайта