Programmazione orientata agli oggetti in ANSI-C. Preprocessing

Quali istruzioni per il preprocessing dovrebbe fornire ooc? Osservando quanto indicato nella sezione 7.1 ci sono tre aspetti in cui ooc potrebbe aiutare: dato un nome di un metodo, conoscere l'header del metodo; dato un metodo, controllare e importare i parametri oggetto; produrre da qualche parte selettori, il costruttore della metaclasse e la funzione di inizializzaione come richiesto.

Utilizzando ancora la classe Point come esempio, la seguente implementazione di Point.dc sembra essere valida:

% 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

Il grassetto indica ciò che ooc trova interessante:

% method { header for statically linked method
% class method { header to overwrite dynamically linked method
%casts import object parameters
%init create selectors and initialization code

Per un metodo con linking statico, conosciamo già la classe per la quale è stato dichiarato. Ad ogni modo, la classe potrebbe essere specificata comunque, e se dovremo decidere di cambiare il linkage del metodo in seguito, non avremo la necessità di rieditare il codice sorgente.

C'è una domanda che dovremmo comunque porci: dobbiamo o non dobbiamo richiedere che il programmatore specifichi a mano l'header del metodo, la lista dei parametri e così via? Mentre questa soluzione rende semplice da leggere il file implementazione, è più complesso mantenere la coerenza se la definizione di un metodo cambia.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend