Геттеры и сеттеры Ada

Я только начал программировать на Ada, и мне было интересно, как запрограммировать геттеры и сеттеры для работы с атрибутами классов.

На самом деле я заинтересован в получении геттеров и сеттеров атрибутов deadline, period и computingTime следующего пакета:

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;

package body pkg_tasks is
    task body task_a is
        deadline : Time_Span := To_Time_Span(25.0);
        period : Time_Span := To_Time_Span(25.0);
        computingTime : Time_Span := To_Time_Span(10.0);
        startingTime : Time;
    begin
        entry start do
            startingTime := Clock;

            while (Clock - startingTime) < computingTime loop

            end loop;

            New_line;
            Put_Line("End of task A");
        end start;
    end task_a;
end pkg_tasks;
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
428
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Теперь о настройке атрибутов вашей задачи, использование параметров в вашей начальной записи кажется мне лучшим способом сделать.

Обратите внимание: вы пишете об атрибутах классов, но в настоящее время вы вообще не используете классы. Задачи являются типом первого гражданина в Ada и не реализуются через тип класса, как это делается в Java. Другое дело использование объектно-ориентированного программирования.

Хорошо, спасибо за уделенное время. Как видите, я здесь совсем нубик, ха-ха

thmasker 02.05.2018 15:51

Как было сказано выше, обычно задачи не являются нормальным способом. Еще в Ada83 не было защищенных типов, поэтому, если вам нужно что-то подобное, вы эмулировали это с помощью задачи. Кроме того, вот несколько примеров использования задач, защищенных типов и классов (или, как их называет Ада, тегированных типов):

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;

procedure jdoodle is
    ------------------------------------------------------
    -- Task Example
    ------------------------------------------------------
    task Task_Example is
        entry Get(Time : out Time_Span);
        entry Set(Time : in  Time_Span);
    end Task_Example;

    task body Task_Example is
        Value : Time_Span := To_Time_Span(0.0);
    begin
        loop
            select
                accept Get(Time : out Time_Span) do
                    Time := Value;
                end Get;
            or
                accept Set(Time : in  Time_Span) do
                    Value := Time;
                end Set;
            or
                terminate;
            end select;
        end loop;
    end Task_Example;

    ------------------------------------------------------
    -- Protected type example
    ------------------------------------------------------
    protected type Protected_Example is
        procedure Put(Time : Time_Span); -- or use entry
        function Get return Time_Span;   -- or use procedure or entry
    private
        Value : Time_Span := To_Time_Span(0.0);
    end Protected_Example;

    protected body Protected_Example is
        procedure Put(Time : Time_Span) is
        begin
            Value := Time;
        end Put;
        function Get return Time_Span is
        begin
            return Value;
        end Get;
    end Protected_Example;

    ------------------------------------------------------
    -- Class Example
    ------------------------------------------------------
    package Classes is
        type Class_Example is tagged limited private;
        procedure Put(Self : in out Class_Example; Time : Time_Span);
        function Get(Self : in Class_Example) return Time_Span; -- or use procedure
    private
        type Class_Example is tagged limited record
            Value : Time_Span := To_Time_Span(0.0);
        end record;
    end Classes;

    package body Classes is
        procedure Put(Self : in out Class_Example; Time : Time_Span) is
        begin
            Self.Value := Time;
        end Put;

        function Get(Self : in Class_Example) return Time_Span is
        begin
            return Self.Value;
        end Get;
    end Classes;
begin
    Put_Line("Starting");
end jdoodle;

Имейте в виду, что пример помеченного типа также применим к обычным записям и другим частным типам.

Другие вопросы по теме