terça-feira, 18 de novembro de 2008

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

Hoje chegamos ao artigo de número 5 desta série, hoje iremos fazer uma revisão sobre a estrutura lógica de um programa objective-c, gostaria de agradecer a todos 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. Leia o restante do artigo.





Artigos anteriores

Série objective-c 1 - Primeira aplicação via console texto
Série objective-c 2 - Primeira aplicação compilada via X-Code
Série objective c 3 - Exercícios de fixação
Série objective c 4 - Orientação a objetos




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.
3. programa section é o inicio 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 é recomendavel 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 usa-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 Funcionario que vai herdar caracteristicas de uma super classe chamada Object, esta classe vai ter os atributos  cpf e anoNascimento e 3 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 algum razão da vida, queira definir um método e não implementa-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 nao retorna nada
setCpf:  Nome do método
(int) nCpf informa que na hora da chamada, este método recebe um parametro 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 allocando 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 acessiveis 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 parametro 12345674831.
[pierre setCpf: 12345674831]


Usando método setAnoNascimento e passando o parametro 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 parametros.
[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 tenha ficado claro estes conceitos iniciais da estrutura lógica de um programa em objective-c. Agora é continuar os estudos e praticando sempre.

Abraços,

Pierre



10 comentários:

  1. E ai cara, sou amigo colega de serviço do vasco. Tive dando uma olhada no seu blog.. interessante..

    depois se quiser entra no meu blog. www.mathiasgrimm.com.br

    ResponderExcluir
  2. Seria legal por umas dicas de gerenciamento de memoria, pois no Cocoa usamos mais classes herdadas de NSObject do que da Object. Ai não usamos free e sim o sistema de contagem com release/retain e autorelease.
    Acho que essa é uma das maiores dificuldades do pessoal ao criar softwares em Objective-C...

    Mas parabens pela iniciativa... :)

    ResponderExcluir
  3. @caMaLEaMente: Gostei do seu blog e obrigado pel visita.

    @filipinascimento: Olá Felipe, na verdade eu quis fazer mais uma introdução sobre objective-c extremamente basica como pode notar e nesta primeira série não cheguei a citar detalhes sobre a Foundation nem falei sobre Cocoa, por isso não entrei em detalhes sobre gerenciamento de memória, mas nos próximos artigos iremos abordar estes assuntos e estamos também abertos a contribuições como as suas.
    Obrigado pela participação

    ResponderExcluir
  4. A minha dica principal é ensinar a programar com banco de dados, gravando no banco e tudo mais.

    ResponderExcluir
  5. Mauricio,

    Na verdade queria mostrar alguns fundamentos do objective-c para depois abordamos o uso do Cocoa e outros recursos como acesso a banco de dados, até porque as pessoas que acessam este curso tem as mais variadas experiências, iniciantes, avançados e por ai vai.
    Mas dica anotada e vamos chegar lá.

    Abraços.

    ResponderExcluir
  6. [pierre setCpf 12345674831];
    [pierre setAnoNascimento 1969];

    Fiquei com uma dúvida, neste trecho não deveria ter o ":" após o setCpf e setAnoNascimento?


    Obrigado.

    ResponderExcluir
  7. Olá galera, sou desenvolvedor Cocoa(Objective-C) há pouco mais de um ano, atualmente trabalho com desenvolvimento de sistemas multimedia para mac, parabéns pelo blog, estou disposto a coloborar se possivel, meu msn é: waylton@hotmail.com.

    Parabéns pela iniciativa...

    ResponderExcluir
  8. Parabéns, pela iniciativa, estou esperando novos posts ;)

    ResponderExcluir
  9. Olá, você vai aumentar o nível de conhecimento? Por exemplo: com acesso a banco de dados e tudo mais?

    ResponderExcluir
  10. Pierre,

    Gostaria de agradecer a sua disposição, estou trabalhando em um projeto da faculdade, o qual irei usar OOP, mesmo que não esteja estudando esta parte, então estou atrás de todo o conhecimento através de livros e da Internet, e sem duvida, nas minhas pesquisas seu blog foi um achado. Parabéns e obrigado pela iniciativa. Continuarei acompanhando os seus artigos.

    ResponderExcluir