Marketing TechARTIGO

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

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<br />{<br />      atributos;<br />}<br />métodos;<br />@end

Exemplo prático

@interface Funcionario: Object<br />{<br />       int  cpf<br />       int anoNascimento;<br />}<br />-(void) setCpf: (int) nCpf;<br />-(void) setAnoNascimento: (int) nAno;<br />-(void) printFicha;<br />@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;<br />   métodos;<br />@end

Exemplo prático

@implementation Funcionario;<br /> -(void) setCpf: (int) nCpf<br /> {<br />      cpf = nCpf;<br /> }<br /><br />-(void) setAnoNascimento: (int) nAno<br />{<br />    ano=nAno;<br />}<br /><br />-(void) printFicha<br />{<br />       printf("Ficha do funcionario\n");<br />      printf("CPF: %i",cpf);<br />      printf("Ano Nascimento:%i",ano);<br />}<br /><br />@end<br /><br />@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[])<br />{<br />        Funcionario *pierre;        <br />       pierre=[Funcionario alloc];<br />       pierre=[pierre init];<br />       [pierre setCpf: 12345674831];<br />       [pierre setAnoNascimento: 1969];<br />       [pierre printFicha]; <br />       [pierre free];     <br />       return 0;<br />}

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.

é graduado em Tecnologia de Sistemas para Internet pela UNIVALI - Itajaí/SC, e aluno de pós-graduação em Planejamento Estratégico em Comunicação pela UNP - Natal/RN. Atualmente trabalha com a criação de conteúdos para área de tecnologia e desenvolve softwares para Macs, iPhone e iPad. Twitter: @pierrefreire

Ver perfil