The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

7.3 Предварительная обработка

7.3 Предварительная обработка

Предыдущая  Содержание  Следующая V*D*V

Какую предварительную обработку команд должен выполнять ooc? Просмотр нашего эксперимента с Point в разделе 7.1 выявляет три области, в которых ooc может помочь: при наличии имени метода он знает заголовок метода; при наличии метода он может проверить и проимпортировать параметры объекта; где-то он может создать селекторы, конструктор метакласса и функцию инициализации как это требуется. После экспериментов с Point выглядит разумно такой файл реализации Point.dc:

 

% move {

%casts

    self -> x += dx, self -> y += dy;

}

% Point ctor {

    struct Point * self = super_ctor(Point, _self, app);

 

    self -> x = va_arg(* app, int);

    self -> y = va_arg(* app, int);

    return self;

}

% Point draw {

%casts

    printf("\".\" at %d,%d\n", x(self), y(self));

}

%init

 

Жирный шрифт указывает, что ooc находит интересным:

 

% method {

заголовок для статически компонуемых методов

% class method {

заголовок для перезаписи динамически компонуемых методов

%casts

импорт параметров объектов

%init

создание селекторов и кода инициализации

 

Для метода со статической компоновкой класс, для которого он объявлен, уже известен. Тем не менее, этот класс может быть указан в любом случае и если позднее мы решим изменить компоновку метода, нам не потребуется снова редактировать исходник.

Есть вопрос — не должны ли мы требовать, чтобы заголовок метода быть объяснён программистом, списком параметров и так далее. Хотя это сделало бы файл реализации легче читаемым, такое труднее поддерживать, если определение метода изменяется. Это также (незначительно) труднее разбирать.

 

Предыдущая  Содержание  Следующая