terça-feira, 18 de novembro de 2008

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ário(s):

Grinza on 20 de novembro de 2008 02:36 disse...

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

filipinascimento on 9 de dezembro de 2008 06:04 disse...

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... :)

Pierre Freire on 9 de dezembro de 2008 07:29 disse...

@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

Mauricio Junior on 9 de dezembro de 2008 13:05 disse...

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

Pierre Freire on 9 de dezembro de 2008 13:10 disse...

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.

Robson C. disse...

[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.

Waylton on 16 de janeiro de 2009 08:56 disse...

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...

Federico on 19 de janeiro de 2009 10:44 disse...

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

Mauricio Junior on 21 de janeiro de 2009 14:37 disse...

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

Robson Rodermel on 13 de maio de 2009 11:04 disse...

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.

Postar um comentário