O documento apresenta uma introdução à linguagem Objective-C, abordando tópicos como: importação de bibliotecas, declaração da função main, alocação de memória, impressão na tela, declaração de variáveis e classes, herança, polimorfismo e tratamento de erros.
3. Main
No Objective-C, a declaração da função main,
ou função principal é feita da seguinte forma:
int main(int argc, const char * argv[])
{
return 0;
}
4. Alocação de memória
Existem duas formas para se alocar memória:
1) Automático, sem necessidade de declarar o
fim da utilização:
@autoreleasepool {}
2) Declaração manual:
NSAutoreleasePool * pool =[[NSAutoreleasePoll
alloc] init];
E ao fim:
[pool drain];
7. Declaração de Variáveis
Assim como no C, C++ e Java, a declaração
das variáveis no Objective-c inicia-se pelo tipo
dela, como: bool, int, double, float, string,
etc.
Exemplo:
int idade = 5;
float altura = 1.8;
8. Imprimindo Variáveis
Para imprimir variáveis, funciona da mesma
forma que no C e no C++, mudando apenas
algumas variáveis de impressões:
NSLog(@"Você tem %i anos e %f metros",
idade, altura);
9. Criando Classes
No Objective-C, utiliza-se a o início
@interface para declarar uma Classe.
Segue exemplo:
@interface NOME_DA_CLASSE: NSObject{
//declarando variáveis
int idade;
int peso;
}
10. Criando métodos
//Um método normal, apenas de execução
-(void) imprimir;
//Métodos que irão alterar alguma variável
deve declarar uma nova antes, como no
exemplo
-(void) setIdade: (int) i;
-(void) setPeso: (int) p;
11. Finalizar Classe
Para dizer ao programa que já terminamos a
declaração da Classe utilizamos o seguinte:
@end
12. Implementação dos Metodos da Classe
@implementation Pessoas
-(void) imprimir{
NSLog(@"Meu nome é Alamo e eu tenho %i anos e peso %i
kilos", idade, peso);}
-(void) setIdade:(int) i{
idade = i;}
-(void) setPeso:(int) p{
peso = p;}
@end
13. Explicando Implementação
Anteriormente existiu apenas a declaração,
naquela etapa dizemos ao programa quais
funções farão parte da classe declarada.
Agora, programamos toda a execução da
classe. Declarando toda as 3 funções ditas de
que iriam existir.
14. Variáveis auxiliares
Note que novamente declaramos as variáveis i
e p para as funções setIdade e setPeso,
respectivamente.
Estas variáveis auxiliares serão usadas todas as
vezes que chamadas estas funções para
realmente auxiliar na execução da função e
atribuição de um novo valor.
18. Pegando dados de Objeto
int alamoPeso = [alamo getPeso];
int alamoIdade = [alamo getIdade];
float alamoAltura = [alamo getAltura];
NSString* alamoNome = [alamo getNome];
19. Cálculos numéricos
Os cálculos numéricos em Objective-C tem
forma idêntica às demais linguagens de
programação:
int a= 10;
int b = 2;
int resultado = (a*b) + (a/b);
20. Pegar dado do Usuário
int usuario;
NSLog(@"Digite um número de
repetições para sua estrutura:");
scanf("%i", &usuario);
21. @property e @synthesize
Para funções que devem atribuir um valor a
uma variável da classe, a Apple criou uma
forma de facilitar esta atribuição:
Antes: -(void) setIdade: int i;
Agora: @porperty int idade;
Antes: -(void) setIdade: int i{idade=i;}
Agora: @synthesize idade;
-> (no main): Objeto.idade = 20;
22. Passar mais de uma var para Método
//em interface
-(void) idadePeso: (int) i : (int) p;
//em implementation
-(void) idadePeso:(int)i :(int)p{
idade = i;
peso = p;
}
//no corpo do main
[object idadePeso:22 :86];
23. Herança de Classes
- Criar classes filhas que herdam características da classe Pai.
- Tudo é herdado: variáveis, métodos, etc.
- Após ter uma classe setada, siga o exemplo:
#import "Pessoas.h"
@interface Filhos : Pessoas;
-(void) imprimirFilho;
@end
@implementation Filhos
-(void) imprimirFilho{
NSLog(@"%@", nome);}
@end
//Classe Filho / Herança
Filhos * murilo = [[Filhos alloc] init];
murilo.nome = @"Murilo";
[murilo imprimirFilho];
24. Classe Retângulo Parte 1 - Herança
@interface Retangulo : NSObject{
int altura, largura;}
@property int altura, largura;
-(int) area;
-(int) perimetro;
-(void) setAL:(int) a : (int) l; //Sim, mesmo com o property, coloca-se um comando
// para setar as variáveis.
// explicado mais a frente
@end
Retangulo * r = [[Retangulo alloc] init];
[r setAL:4:6]; // 4 para altura e 6 para largura
NSLog(@"O tamanho do retângulo é: %i x %i", r.altura, r.largura);
NSLog(@"Área = %i e Perímetro = %i", [r area], [r perimetro]);
25. Classe Retângulo Parte 2 - Herança
#import "Retangulo.h"
@interface Quadrado : Retangulo
-(void) setLado:(int) lado;
-(int) retornaLado;
@end
@implementation Quadrado : Retangulo
-(void) setLado:(int) lado{
[self setAL:lado:lado];}
-(int) retornaLado{
return altura;}
@end
// no main:
Quadrado * q = [[Quadrado alloc] init];
[q setLado: 10];
NSLog(@"Lado = %i", [q retornaLado]);
NSLog(@"Área = %i e Perímetro = %i", [q area], [q perimetro]);
- Note que é possível admitir que area e perimetro façam parte do Quadrado q mesmo não declarando
esses dentro da @interface nem da @implementation. Isso porque quando é uma Classe Herdeira, todas as
características da Classe Pai são HERDADAS.
26. Polimorfismo
- No Objective-c, é possível acrescetar métodos com o mesmo
nome para classes diferentes.
- Simplesmente, porque a chamada dos métodos é bem
particular.
Exemplo:
[ObjetoDaClasse1 somarNumeros];
e
[ObjetoDaClasse2 somarNumeros];
27. Tipo de Dado: id
- Este novo tipo de dado id é genérico e pode se associar a qualquer outro tipo de
dado, por exemplo: int, char, float, bool, etc.
- O id também é possível se associar a objetos, por exemplo: id nome = Objeto.
- A partir daí, é possível sempre chamar o Objeto como sendo nome da classe id.
EXEMPLO:
Numeros * n = [[Numeros alloc] init];
id exemploID = n;
[exemploID setNum:10 :15];
[exemploID add];
[exemploID imprimir];
28. Ignorando Erros de Programação
@try{
//o que quer testar}
@catch (NSException * e) {
NSLog(@"Existe um erro aqui"); // mensagem de erro ou opção
caso apresente um erro acima}
- Sem o try e o catch, caso na execução do programa for
encontrado um erro o programa pararia.
- Com o try e o catch, todas linhas de programação dentro do
try podem dar erro e o programa não parará sua execução, ou
seja, todas as linhas após o catch serão executadas.
29. Controle de Variáveis
Private: @private
- Declarado dentro da interface da Classe
- Declara variáveis restritas da Classe, ou seja,
nenhum método ou outra classe podem utilizar
estas variáveis.
Protected: @protected
- Declarado dentro da interface da Classe
- Declara variáveis protegidas da Classe, mas
que podem ser utilizadas por métodos e sub-
classes.
30. Controle de Variáveis - Exemplos
Private: @private
@interface Classe : NSObject{
@private
int a, b;
}
Protected: @protected
@interface Classe : NSObject{
@protected
int c, d;
}
31. Controle de Variáveis - Exemplos 2
Private e Protected:
@interface Classe : NSObject{
@private
int a, b;
char c;
@protected
int d, e;
char f;
}
32. Variáveis Globais
- Variáveis Globais são declaradas e atribuídas antes do main();
Exemplo:
int gTeste = 50; //utiliza-se normalmente 'g' antes no nome da variável global para identifica-la
int main (int argc, const char * argv[]) { ... }
@implementation VariavelGlobal
-(void) setVarGlob: (int) g{
extern int gNumero;
gNumero = g;}
-(void) imprimir{
extern int gNumero;
NSLog(@"O novo valor da variável global gNumero é: %in", gNumero);}
@end
//no main()
NSLog(@"Variável Global gNumero = %in", gNumero);
VariavelGlobal * var = [[VariavelGlobal alloc] init];
[var setVarGlob:20];
[var imprimir];