Para quem está acostumado, por exemplo, com atributos e métodos get e set da linguagem Java, o mais próximo que podemos fazer em Objective-C é o que pode ser visto abaixo.
No arquivo .h definimos o atributo numEscotilhas e os métodos get (numeroEscotilhas) e set (setNumeroEscotilhas:)
#import "Veiculo.h"
#import "Planeta.h"
@interface Nave : Veiculo
(int) numeroEscotilhas;
- (void) orbitarNave:(Planeta *) planeta naAltitude:(double)km;
- (void) setNumeroEscotilhas:(int) num;
- (int) numeroEscotilhas;
@end
No arquivo .m fazemos a implementação dos métodos:
#import "Nave.h"
@interface Nave
@implementation Nave
- (void) orbitarNave:(Planeta *) planeta naAltitude:(double)km {
}
- (void) setNumeroEscotilhas:(int) num {
numeroEscotilhas = num;
}
- (int) numeroEscotilhas {
return numeroEscotilhas;
}
@end
Realmente, é bastante parecido com o que fazemos em Java. Entretanto, com Objetive-C podemos fazer esse trabalho de uma forma mais simples.
Suponha que desejamos criar um atributo para a velocidade da nave. A definição ficaria da seguinte forma:
#import "Veiculo.h"
#import "Planeta.h"
@interface Nave : Veiculo
@property (nonatomic) int velocidade;
- (void) orbitarNave:(Planeta *) planeta naAltitude:(double)km;
@end
Definimos uma @property e usamos (nonatomic) para especificar que o atributo não será thread-safe, que é o caso mais comum os atributos das classes. Já o arquivo .m ficará da seguinte maneira:
#import "Nave.h"
@implementation Nave
@synthesize velocidade = _velocidade;
- (void) orbitarNave:(Planeta *) planeta naAltitude:(double)km {
}
@end
Usamos @synthesize para definir os métodos get e set "automaticamente" pelo compilador, isto é, não vamos fazer os métodos manualmente, mas eles existem e tem a seguinte forma:
#import "Nave.h"
@implementation Nave
@synthesize velocidade = _velocidade;
- (void) orbitarNave:(Planeta *) planeta naAltitude:(double)km {
}
- (void) setVelocidade:(int)velocidade {
_velocidade = velocidade;
}
- (int) velocidade{
return _velocidade;
}
@end
Uma coisa que você pode estranhar é o fato de criar uma "nova" variável com underscore (_velocidade). Isto acontece para o compilador não se confundir se estamos chamando o método ou a variável (lembre que o método get tem o nome nome da property).
Nada impede, entretanto, que criemos nossa própria versão de um (ou dos dois) métodos. Imagine que não quero que a velocidade seja negativa, sendo assim, poderíamos ter uma versão assim:
#import "Nave.h"
@implementation Nave
@synthesize velocidade = _velocidade;
- (void) orbitarNave:(Planeta *) planeta naAltitude:(double)km {
}
- (void) setVelocidade:(int)velocidade {
if (velocidade < 0) {
velocidade = 0;
}
_velocidade = velocidade;
}
@end
O método get permanece sendo gerado, mas o método set usado vai ser o que foi definido manualmente.
Vamos ficar por aqui. No próximo post mostraremos como fazer chamadas de métodos usando a linguagem Objective-C.
Até lá.
Nenhum comentário:
Postar um comentário