Ciao Orso Bruno,
si, inviare un messaggio è sinonimo di richiamare un metodo, dopo un pò ci si abitua e sembra quasi meglio.
Ecco un esempio sulla tipizzazione debole, ho scritto queste due classi:
// Dog.h
@interface Dog : NSObject
- (void) Write;
@end
// Dog.m
- (void) Write
{
NSLog(@"Bau");
}
// Car.h
@interface Car : NSObject
- (void) Write;
@end
// Car.m
- (void) Write
{
NSLog(@"Brum");
}
In pratica 'Dog' scrive 'Bau' e 'Car' scrive 'Brum'. Nota che le due classi non sono imparentate e che non si usa nessun 'virtual' o 'override', sono semplicemente due classi che non c' entrano nulla l' una con l' altra, hanno solo un metodo con lo stesso nome.
Se ora dichiaro una variabile di tipo 'id' (corrisponde a un void* del C++ o a un 'object' del C#) puoi scrivere:
id p = [Dog new];
[p Write];
p = [Car new];
[p Write];
Ottenendo come output 'Bau' e Brum'. Una cosa del genere in C# non sarebbe fattibile, avresti degli errori di compilazione per via dei controlli sui tipi. Invece in objective-C il collegamento tra l' oggetto e i suoi metodi viene demandato a run-time.
Ancora più divertente se scrivi:
Dog* p = [Dog new];
[p Write];
p = [Car new];
[p Write];
Otterrai una warning sull' assegnamento di un 'Car' a un 'Dog' ma nulla più, poi funziona come prima!
In effetti in un ambiente del genere usare il termine 'inviare un messaggio' è meglio che 'richiamare' un metodo', fà pensare ad un legame meno stretto. In fondo un messaggio lo puoi mandare a chi ti pare