Continuando os estudos iniciados no artigo passado, agora nós vamos unir aos conceitos de classe e propriedades no uso de métodos. Sem sombra de dúvidas, um dos elementos mais importantes e utilizados durante a criação de aplicativos.
Pré-requisitos
♫ Save My Soul, da banda Blues Saraceno ♪
Conceitos
Já vimos no texto passado que uma classe é um modelo de dados para objetos que serão criados a partir dela. Esse modelo descreve estados e ações. Os estados são definidos por propriedades, que de maneira simplista podem ser descritas como variáveis. Já as ações podem ser exemplificadas como funções. Desse modo, o objetivo e a base assemelham-se muito ao que vimos no artigo de funções. O ponto agora é trazer esse conceito para o trabalho com classes e objetos.
As propriedades nos fornecem um meio direto tanto para resgatar quanto para alterar seus valores. Porém, esse trabalho direto nem sempre é a abordagem mais indicada. Em algumas situações existem controles e validações a serem realizadas antes de desempenhar certas tarefas. Um exemplo seria uma conta bancária: para fazer certas alterações de saldo, nós precisamos primeiro checar algumas coisas.
Imagine que, sem o devido controle, você pudesse programar um sistema para liberar qualquer quantidade de saque ou então de transferência. A lógica básica, nesse caso, é que primeiro seja feita uma detecção se há saldo suficiente para a transação, para só então prosseguir com a retirada ou transferência do dinheiro.
De uma forma geral, esse cenário caminha para o uso de métodos, pois em vez de eu acessar a propriedade diretamente, a ideia é executar um método que rodará toda uma rotina para validar ou não a operação.
Essa abordagem de chamar um método para executar uma tarefa é muito importante em orientação a objetos, pois além desses controles e validações prévios, também podem ser disparadas rotinas paralelas como o gerenciamento de memória, por exemplo.
Passada essa visão geral de aplicação — e sabendo que a ideia é similar a das funções de C —, vamos adicionar ao mesmo projeto do artigo passado alguns métodos. Para isso, abram o último projeto (Trabalho_Classe).
Lembram que quando estudamos funções em C eu falei sobre a declaração do protótipo antes da implementação da função em si? Pois bem, aquilo foi uma preparação para esse momento. Quando vamos declarar um método em uma classe em Objective-C, devemos definir sua estrutura (protótipo) no arquivo de declarações, a chamada interface programática (o arquivo .h
). É nesse arquivo que declaro um novo método à nossa classe.
A primeira coisa a se destacar, aqui, é a sintaxe completamente diferente de tudo que é conhecido e normal no planeta Terra. Eu já perdi a conta de quantos alunos torcem o nariz para a sintaxe de declaração e execução de métodos em Objective-C. Mas aqui, gafanhoto, não há conversa: é assim e ponto (ou sem ele, para quem me entender).
Eu declarei três métodos: dois sem parâmetros e um com. Isso nos permitirá ver diversas formas de uso e execução de métodos, mas lembrem-se que aqui no arquivo .h
nós apenas declaramos nomes, tipos e parâmetros. Para definir o que esses métodos farão, eu vou agora ao arquivo Funcionario.m
e vocês notarão uma placa amarela de alerta assim que o arquivo for carregado. Clicando nela, recebemos a mensagem de que a implementação está incompleta. A questão aqui é que o Xcode encontrou métodos definidos no arquivo .h
que ainda não foram implementados no arquivo .m
. Então, essa será uma mensagem comum até você implementar todos (isso é um bom indício quando entrarmos em protocolos e delegates).
Definam as seguintes implementações de métodos:
Cada método mostra uma implementação com níveis diferentes de recursos. A primeira é simples e direta em exibir uma mensagem; já o método retornarNome
mostra um pouco da abordagem de usar um método para resgatar um valor em que existe certa validação antes do retorno. No caso, o nome do objeto só é retornado se ele não for nulo. O terceiro método exibe uma mensagem que usa tanto um valor de propriedade do objeto quanto um valor recebido via parâmetros.
Para vê-los em prática vamos ao arquivo main.m
definir suas execuções após a última linha que já tínhamos no código. Para focar as mensagens do Console, eu vou comentar os NSLogs que o código já tinha. Com as novas inclusões, o arquivo deve ficar assim:
Procurei mostrar diversas formas de uso de métodos. Primeiramente vale lembrar que a execução de métodos não usa sintaxe de pontos, mas sim de colchetes.
Notem como o método falarOi
tem sua execução bem simplificada, já que não tem retorno nem parâmetros. O método retornarNome
, por sua vez, como retorna um valor, pode alimentar uma variável que é usada em outra operação. E por fim, o método falarNumero
, que pede um parâmetro para ser executado. Percebam a sintaxe de passagem de valor no parâmetro usando dois pontos.
Com base nesses exemplos, vocês podem fazer diversos testes com parâmetros, retornos e validações internas em novos métodos. Usem e abusem de métodos para se prepararem para os próximos artigos. Mexeremos *muito* com métodos, tanto de sistema quanto de classes nossas personalizadas. E para os programadores de outras linguagens que não gostaram da sintaxe de colchetes e de dois pontos para parâmetros, aqui vai uma dica: acostumem-se… 😛
Código-fonte, dúvidas e debates, como sempre, no tópico oficial no fórum da Quaddro. Um abraço e até a próxima.