Tecnologia

3 abr, 2009

Série objective-C 05 – Estrutura lógica de um programa objective-c

Publicidade

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:

  1. @interface section
  2. @implementation section
  3. 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.