Publicado por: webclaudio | 05/02/2009

Curso de programação para IPHONE – Parte 4

Titulo do Capitulo 4 - Definição se Classe

Neste capítulo aprenderemos como criar classes através de dois arquivos que contém as diretivas “@interface” e “@umplementation”. Veremos como uní-las através do comando “#import” e como enviar mensagens entre os objetos instanciados.

DEFINIÇÃO DE CLASSE

Como já temos observado, cada classe tende a ser representada por um par de arquivos correspondendo: um arquivo cabeçalho(head) e um arquivo de código fonte. Para definir uma classe, cada um desses arquivos deve conter uma diretiva especial de compilador, que é sempre marcada em Objective-C, com um símbolo @.

Primeiro, você define a interface para a classe, que é uma simples declaração de suas variáveis públicas e métodos. Você faz isso no arquivo cabeçalho(head – com a extensão .h). Em seguida, você define a aplicação para a classe, que é o verdadeiro conteúdo de todos seus métodos, o que é feito em um arquivo de código fonte (extensão . m). Ou seja cada classe obrigatóriamente e definida em pares desses dois arquivos, um com a assinatura da classe, métodos e variáveis públicas e outra com a definição do código dos métodos.

Diagrama de definição de classe

vamos olhar para ele de forma mais aprofundada mais adiante.

A INTERFACE

Interfaces começam com uma diretiva “@interface” e terminam com uma diretiva “@end”. Eles contém declarações de variáveis instanciadas entre chaves e, em seguida, declarações de métodos.
Abaixo um exemplo:

exemplo11

Nós começamos a nossa interface com o comando @interface (1) e terminamos ela com a diretiva @end (4). Note que a nossa diretiva @interface incluía não só o nome da nossa classe, como também o nome da sua superclasse, após os dois pontos “:”. Poderia também incluir uma lista de protocolos, um tema que vamos ingressar mais tarde neste curso.
A declaração da variável (2) é totalmente normal. NSString é um tipo que nós vamos ver quando olhamos para o sistema operacional do iPhone  mais tarde. Note que você não tem que declarar todas as suas variáveis em seu @interface, mas apenas as variáveis que deseja acessar fora dos seus métodos (Públicas). Você declara as variáveis que serão usadas apenas pelos métodos dentro desses métodos.

Nossa declaração de método (3) contém uma descrição de um método com um argumento,  estando coerente com a sintaxe que vimos anteriormente no elemento de sintaxe “Message”. Ele também contém um outro elemento novo: Vemos que começou com um sinal de menos “-“. Isso significa que este é um método que pode ser usado apenas por uma instância de um objeto. Seu oposto , que é marcada com um +, é o um método de classe, que é utilizado por uma objeto de classe  (Acredito que a maioria tenha conhecimento de Programação Orientada a Objeto(POO) e saiba do que eu estou falando).

O tipo “id” é usado como retorno do método” growFruit”,  é uma outra inovação do Objective-C.
Objective-C permite a cração de tipos dinâmicos, onde o tipo é decidido em tempo de execução. Para suportar isto, ele inclui um tipo fraco de “id”, que pode ser um ponteiro para qualquer objeto.

Antes de finalizar a nossa discussão sobre declarações de métodos,  gostaria de mencionar que, como na declaração de variáveis, você só deve declarar aqui os métodos que podem ser chamados externamente.
Métodos que permanecem internos em uma classe podem permanecer ocultos se assim o desejarem.

A IMPLEMENTAÇÃO

Depois de declarar uma classe com um “@interface”, você pode defini-la com a diretiva @implementation. Abaixo um exemplo do que a poderia fazer a nossa classe AppleTree, incluindo um único método de exemplo:

exemplo2

Nosso código começa com #import (1). Esta diretiva é uma variante do Objective-C para a macro #include. A diferença é que ela inclui o arquivo a menos que ele já tenha sido incluído, e é a melhor alternativa quando utilizando Objective-C. Neste caso, nós incluímos o arquivo de cabeçalho(Head) AppleTree.h, que deverá conter a interface. Sem incluir isto, teríamos a necessidade de redefinir todas as variáveis do nosso exemplo e incluir a nossa super classe na declaração “@implementation”. Assim, o “#import” nos ajuda a evitar código redundante. Incluímos também um  arquivo Apple.h para que possamos criar um “Apple”.

Tal como na nossa interface, o código de  implementação começa com uma diretiva (2) e finaliza com um “@end” (4). Dentro, nós descrevemos o que nossos métodos fazem (3), que inclui enviar uma mensagem para o objeto de classe  “Apple”.

O que estamos Perdendo
Nós agora temos duas partes de um enigma resolvidos: como criar novas classes de objetos e como enviar mensagens entre os objetos instanciados. O que está faltando é a forma de instanciar um objeto de uma classe.

Geralmente instanciação de objetos, seguirão o mesmo padrão. Primeiro, você aloca o objeto na memória  e, em seguida, você inicializa qualquer variável e executa alguma configuração.
A forma precisa em que isto é feito pode variar de classe para classe. É geralmente o Framework que decide como o  objeto  será criado no iPhone OS. Como você verá mais adiante, o iPhone OS especifica dois métodos de instanciação de objeto: o método alloc-init e o método fábrica de classe (class factory method). Iremos ver cada um destes em breve, quando nós falarmos sobre o iPhone OS, mas primeiro vamos no próximo capítulo terminar com o tema “Elementos de Sintaxe”. Até lá…

Anúncios

Responses

  1. mto bom coninuem!!

  2. meu deus….
    eu estou comecando a entender mas…

    e muito complicado….

    vc nao quer me mandar m email explicando desde o inicio com mais clareza nao?

    iria ajudar ..
    obrigado

    rapha

  3. Ta começando a complicar o entendimento. Pelo que eu entendi o código cria uma maçã e inicializa essa maçã com uma cor que é passado para o método e então é retornado um ponteiro para esse objeto maçã recém-criado. Foi isso que entendi.

    Obrigado mais uma vez pelo curso!

  4. Quero lhe dar os parabéns, foi o melhor e mais completo passo a passo em português que eu já vi já assisti até a aula 12 de vocês e espero realmente que tenha mais.

    Vou aproveitar esse post para fazer uma pergunta, qual o limite de caracteres que pode existir em uma variavel nsstring, estou tentando mostrar um texto bastante grande e não consigo está cortando. abraços.

    • Olá Rodrigo. Que eu saiba o limite de uma NSString é o limite de sua memória Ram, ou seja, com certeza não é este o problema. Você está jogando dentro de que componente ? Veja se o componentes está com barra de rolagem configurada. Abraços.

  5. E ai Claudio gostaria de pegar seu email
    para tirar algumas duvidas e troca alguma informações

    Abraço
    T+


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Categorias

%d blogueiros gostam disto: