Leia outros artigos da série:
Série objective-C 04 – Orientação a Objetos
Série objective-C 03 – Exercícios de Fixação
*
Hoje chegamos ao artigo de número cinco desta série. Iremos fazer uma revisão sobre a estrutura lógica de um programa objective-c. Quero agradecer a todos os e-mails e feedbacks que tenho recebido. É isto que me anima a continuar escrevendo, poder aprender e ensinar ao mesmo tempo, além de fazer novas amizades. Vamos ao texto.
Existem 3 seções fundamentais em um programa:
- @interface section
- @implementation section
- program section
A @interface section é onde você descreve a classe, uma espécie de contrato, onde você define o que será implementado na sua classe, informa o nome da classe, seus atributos, métodos. A @implementation section é onde codificamos os métodos que foram definidos na interface. Programa section é o início do programa em si, onde definimos a função main e o que ela vai executar.
Cada seção tem suas tarefas bem definidas em objective-c, inclusive é recomendável que elas sejam divididas em arquivos diferentes, ou seja, um arquivo para @interface section, outro para @implementation e mais um para o programa principal. No nosso exemplo inicial usamos apenas um, mas no decorrer deste curso iremos aprender a usá-los separados.
1. @interface section
Quando você deseja criar uma classe, primeiro você define a sua interface, o nome da classe, de qual classe ela vai herdar funcionalidades ( não obrigatório ), quais os atributos e métodos que esta classe irá ter, esta é a parte de interface que devemos escrever em um programa objective-c.
@interface ClassName: ParentClassName
{
atributos;
}
métodos;
@end
Exemplo prático
@interface Funcionario: Object
{
int cpf
int anoNascimento;
}
-(void) setCpf: (int) nCpf;
-(void) setAnoNascimento: (int) nAno;
-(void) printFicha;
@end
Definimos uma classe chamada Funcionário que vai herdar características de uma super classe chamada Object. Esta classe vai ter os atributos cpf e anoNascimento e três métodos de instância setCpf, setAnoNascimento e printFicha.
Esta é a seção interface de um programa objective-c, leia este artigo e estude o exemplo do artigo anterior.
2. @implementation section
A seção de implementação é onde você vai escrever o código dos métodos que foram definidos na interface. Caso você defina um método na interface, mas não escreva sua implementação na hora da compilação, será dado um aviso que o método definido na interface não foi implementado, mas o programa vai ser compilado. Caso por alguma razão da vida você queira definir um método e não implementá-lo totalmente, você pode definir a assinatura do método e a parte da codificação entre {} deixar em branco.
@implementation ClassName;
métodos;
@end
Exemplo prático
@implementation Funcionario;
-(void) setCpf: (int) nCpf
{
cpf = nCpf;
}
-(void) setAnoNascimento: (int) nAno
{
ano=nAno;
}
-(void) printFicha
{
printf("Ficha do funcionario\n");
printf("CPF: %i",cpf);
printf("Ano Nascimento:%i",ano);
}
@end
@implementation Funcionario;
Iniciamos a implementação dos métodos definidos na classe Funcionário.
-(void) setCpf: (int) nCpf
Esta é a assinatura do método setCpf definido na interface funcionário.
– O sinal de – indica que é um método de instância, caso fosse estático seria +
(void) se refere ao retorno do método, neste caso void indica que ele não retorna nada.
setCpf: é o nome do método.
(int) nCpf informa que na hora da chamada, este método recebe um parâmetro inteiro.
{} O código para implementação do método deve estar entre chaves.
// A implementação dos outros métodos.
@end finaliza o bloco de implementação.
3. Program Section
Esta é a parte onde se inicia o seu programa a partir da função main.
int main (argc,char argv[])
{
Funcionario *pierre;
pierre=[Funcionario alloc];
pierre=[pierre init];
[pierre setCpf: 12345674831];
[pierre setAnoNascimento: 1969];
[pierre printFicha];
[pierre free];
return 0;
}
Este linha indica que pierre é um objeto do tipo funcionário, ele é usado para guardar valores da classe Funcionário, o * indica que ele é um ponteiro, iremos ver sobre ponteiros mais adiante.
Funcionario *pierre;
Nesta linha nós estamos alocando um espaço da memória para o objeto pierre, ou seja, foi disponibilizada uma área da memória para este objeto, não podemos ainda acessar seus atributos e métodos porque eles ainda não foram inicializados.
pierre=[Funcionario alloc];
Depois de alocar espaço na memória, inicializamos o objeto, ou seja, tornamos acessíveis as suas propriedades e métodos.
pierre=[pierre init]
Agora com o objeto instanciado, estamos usando os métodos que implementamos, o método setCpf e passando o parâmetro 12345674831.
[pierre setCpf: 12345674831]
Usando método setAnoNascimento e passando o parâmetro 1969. Em Java poderia ser algo do tipo pierre.setAnoNascimento(1969)
[pierre setAnoNascimento: 1969]
Abaixo usamos o método printFicha; como podem ver ele não requer parâmetros.
[pierre printFicha]
Abaixo usamos o método free, este método, a exemplo do alloc e do init. não foi implementado por nós, mas sim herdado da classe Object. Analisem a parte de interface para comprovarem este fato. Já deu para perceber como a herança é um conceito importante em OOP. Este método libera a memória usada pelo objeto, geralmente usamos quando não precisamos mais do objeto no nosso programa.
[pierre free]
É o retorno da função main.
return 0;
Chegamos ao fim de mais um artigo da série objective-c. Espero que tenham ficado claros estes conceitos iniciais da estrutura lógica de um programa em objective-c. Agora é continuar os estudos e praticando sempre.
Abraços.