de declaracao de metodos:tipo_de_metodo(tipo_do_retorno_do_metodo) nome_do_metodo: (tipo_do_argumento) argumento;exemplo de metodo de classe: +(int) quantosGatos;exemplo de metodo de instancia: -(void) setPeso: (double) p;Na parte de implementacao temos as implementacoes de setPeso e getPeso.Na rotina main podemos notar que estamos criando dois gatos diferentes. O primeiro pesa 4.2kg, enquanto que o segundo 4.9kg. Devemos observar que, de modo distinto do programa original, estamos alocando memoria e inicializando meuGato ao mesmo tempo. Essa e uma construcao muito utilizada, junto com a alternativa seguinte:Gato *meuGato = [[Gato alloc] init];Podemos observar, ainda dentro da rotina main, como passar argumentos para o objeto meuGato, com o metodo setPeso. Ou tambem como obter o valor de uma caracteristica do meuGato, com o metodo getPeso e imprimi-lo na tela com a funcao printf.A saida agora deve ser:Miaau!Miaau!meuGato pesa: 4.200000 kgmeuGato2 pesa: 4.900000 kgMais sobre classes, objetos, metodosNa secao anterior vimos como passar um argumento para um metodo. Entretanto muitas vezes e desejavel poder passar mais do que um argumento por vez, por exemplo para definir a posicao (x,y) de um ponto no R2. Felizmente existe um tipo de construcao que nos permite faze-lo:-(tipo) nome: (tipo) variavel nome: (tipo) variavel;exemplo, um metodo para definir as posicoes de um ponto no R2:-(void) setX: (double) x andY: (double) y;passando a mensagem:[Objeto setX: 1.511 andY: 2.332];Geralmente e interessante ter metodos para definir cada argumento separadamente, ainda que existam os metodos para definir multiplos argumentos de uma so vez.Um metodo tambem pode retornar um objeto. Por exemplo, poderiamos implementar um metodo de instancia na classe Gato que definisse uma reproducao sexuada. Para isso temos que ter duas instancias da classe Gato allocadas e inicializadas; uma para receber a mensagem e outra para ser o objeto a ser recebido como argumento da mensagem. Devemos ter tambem um objeto do tipo Gato, que armazenara o gato filho. Acompanhe a definicao do metodo reproduzir:<novo metodo>-(Gato *) reproduzir: (Gato *) Gato2{ // funcao para criar um gato filho com a media dos pesos dos pais // antes de algum protesto, nao estamos tentando ser biologicamente corretos! Gato *Gatinho=[[Gato alloc] init]; double pesoGatinho; pesoGatinho = (peso+[Gato2 getPeso])/2; [Gatinho setPeso: pesoGatinho]; return Gatinho;}<novo main>int main( int argc, const char *argv[] ){ Gato *meuGato = [[Gato alloc] init]; Gato *meuGato2 = [[Gato alloc] init]; Gato *meuGatoFilho; [meuGato setPeso: 4.2]; [meuGato2 setPeso: 4.9]; [meuGato miau]; [meuGato2 miau]; meuGatoFilho = [meuGato reproduzir: meuGato2]; [meuGatoFilho miau]; printf("meuGato pesa: %lf kg\n",[meuGato getPeso]); printf("meuGato2 pesa: %lf kg\n",[meuGato2 getPeso]); printf("meuGatoFilho pesa: %lf kg\n",[meuGatoFilho getPeso]); [meuGato free]; [meuGato2 free]; [meuGatoFilho free]; return 0;}Em Objective-C voce pode se referir ao proprio objeto que esta recebendo a mensagem, usando para isso a palavra self. Isso tem muitas utilidades, por exemplo para executar um metodo que precise executar outros metodos. Um exemplo nao muito bom seria criar um metodo comer para o nosso gato que utilizasse o metodo setPeso (como [self setPeso: 5]) para engorda-lo; nesse caso poderiamos alterar o valor de peso sem recorrer ao self, porem caso tivessemos algum metodo que realizasse muitas tarefas isso seria de grande utilidade.Agora uma dica de organizacao: tipicamente os programadores dividem suas classes em arquivos