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

  • Листинг

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


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

    ЛР 3. Объекты и классы


    Основной структурной единицей всей концепции ООП выступает класс. Класс— это программное описание будущего объекта, включающее в себя определение полей, методов и свойств. Объявление класса начинается с ключевого слова type, включает имя и признак класса class (листинг 3.1).


    Листинг 3.1 Синтаксическая конструкция объявления класса




    type

    Имя_класса= class [abstract | sealed] (класс-предок)

    //поля и методы

    end;
    При объявлении класса можно воспользоваться одним из ключевых слов: abstract и sealed. Класс, отмеченный словом abstract, называют абстрактным. Основная особенность абстрактного класса заключается в том, что непосредственно на его основе невозможно создать самостоятельный объект или, как говорят программисты, экземпляр класса. Назначение абстрактного класса заключается в другом — он определяет концепцию построения всех своих наследников. Еще одно ключевое слово sealed запрещает классу иметь наследников.
    По умолчанию новый класс создается на основе базового для всей иерархии классов визуальной библиотеки компонентов класса TObject. Но никто не запрещает нам, немного "порывшись" в дереве классов VCL или FMX, найти для своего класса наиболее подходящего предка.

    Проектирование класса


    Допустим, что перед нами поставлена задача разработать класс, моделирующий автомобиль. На первых порах мы не станем углубляться в детали и обсуждать предпочтительную для нас коробку передач или особенности обвода кузова. Будем проще, в качестве прообраза будущего класса предлагаю взять листинг 3.2.


    Листинг 3.2 Объявление класса TAutomobile




    type TAutomobile= class(TObject) fSpeed:single; // поле скорости движения

    function SetSpeed(Value:single):single; //установить скорость движения

    end;
    Предлагаемый прототип автомобиля снабжен полем fSpeed, отвечающим за хранение данных о текущей скорости движения. За управление полем несет ответственность метод SetSpeed(), он позволит нам увеличить или уменьшить скорость автомобиля.

    Каждый знает, что автомобиль без двигателя — не более чем груда металлолома. Поэтому создадим класс двигателя TEngine (листинг 3.3) и интегрируем его в автомобиль.


    Листинг 3.3. Объявление класса TEngine




    type TEngine= class

    fEnabled :boolean; //двигатель включен - true, выключен - false procedure SetEnabled(Value:Boolean); //запуск или останов двигателя function GetEngineState:boolean; //состояние двигателя

    end;
    function TEngine.GetEngineState: boolean;//состояние двигателя

    begin

    Result:= fEnabled; //если true - двигатель включен

    end;
    procedure TEngine.SetEnabled(Value: Boolean);

    begin

    fEnabled:=Value;

    end;
    В нашем примере в состав двигателя вошло поле fEnabled, которое определяет состояние двигателя (true включен, false отключен). Метод SetEnabled() отвечает за запуск и остановку двигателя. Функция GetEngineState() информирует о текущем состоянии двигателя.

    Для того чтобы двигатель оказался "под капотом" класса TAutomobile, (листинг 3.4) объявляется поле fEngine:TEngine (если вас устроит такое сравнение — поле fEngine является аналогом двигательного отсека в корпусе реального автомобиля).


    Листинг 3.4. Инкапсуляция двигателя TEngine в автомобиль TAutomobile




    type TAutomobile= class(TObject) fSpeed:single; //поле скорости движения fEngine:TEngine; //поле двигателя
    function SetSpeed(Value:single):single; //установить скорость движения

    end;
    Для того чтобы продемонстрировать пример взаимодействия автомобиля и его двигателя, в состав методов автомобиля добавим функцию SetSpeed(), она возьмет на себя ответственность за управление скоростью движения автомобиля (листинг 3.5).


    Листинг 3.5. Реализация класса TAutomobile




    function TAutomobile.SetSpeed(Value:single):single;

    begin

    Result:=0;

    if fEngine.GetEngineState=true then {если двигатель заведен}

    begin

    if (Value>=0) and (Value<=240) then {проверим корректность значения}

    begin

    fSpeed:=Value;

    Result:=fSpeed; //скорость успешно изменена

    end

    else Raise Exception.Create('Допустимый диапазон 0...240 км/ч');

    end else begin

    fSpeed:=0;

    Raise Exception.Create('Необходимо запустить двигатель!');

    end;

    end;
    1   ...   7   8   9   10   11   12   13   14   ...   26


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