7.3 Предварительная обработка |
Предыдущая Содержание Следующая |
Какую предварительную обработку команд должен выполнять 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 находит интересным:
Для метода со статической компоновкой класс, для которого он объявлен, уже известен. Тем не менее, этот класс может быть указан в любом случае и если позднее мы решим изменить компоновку метода, нам не потребуется снова редактировать исходник. Есть вопрос — не должны ли мы требовать, чтобы заголовок метода быть объяснён программистом, списком параметров и так далее. Хотя это сделало бы файл реализации легче читаемым, такое труднее поддерживать, если определение метода изменяется. Это также (незначительно) труднее разбирать.
| ||||||||
Предыдущая Содержание Следующая |