Objective-C

Objective-C

Grupo responsável:

  • André Felipe Silva
  • Mário Saldanha

Introdução

Objective-C, denominada frequentemente de ObjC ou mais raramente de Objective C ou Obj-C, é uma linguagem simples de computador, projetada para permitir uma programação orientada a objetos sotisficada, é derivada do Smalltalk uma das primeiras linguagens orientadas a objetos e é também um conjunto de adições à linguagem C, dando ao C suporte à construções orientadas a objetos como as da Smalltalk.

Histórico

O ObjC foi criado principalmente por Brad Cox e Tom Love no início da década de 1980 na empresa deles, a Stepstone. Brad havia tido seu interesse despertado por problemas de reusabilidade em projeto de software e programação. Para demonstrar que uma melhora satisfatória podia ser feita, Cox provou que componentes de software necessitavam apenas de umas poucas mudanças práticas nas ferramentas existentes. Precisando apenas dar suporte a objetos de modo flexível, possuindo um conjunto de bibliotecas funcionais e permitindo que fossem empacotados num único formato multiplataforma. E então em meados da década de 80, junto com Tom Love ele criou a linguagem Objective C baseado nos seus estudos.

A primeira publicação oficial falando sobre o Objective-C foi escrita em 1986 no livro de Brad Cox, “Programação Orientada a Objetos, Uma Abordagem Evolutiva”. Nele Brad destacou que o problema maior está na reusabilidade e não na linguagem.

Nos anos 90, Steve Jobs foi demitido da Apple e fez alguns investimentos. Entre eles, adquiriu parte de uma nova empresa, a NeXT. A NeXT licenciou o Objective-C da StepStone e liberou uma versão própria do compilador e das bibliotecas das linguagens, nas quais a interface do usuário e da estrutura NeXTstep eram baseadas. As ferramentas e a qualidade do sistema operacional fizeram com que a NEXT ocupasse uma parte muito popular do nicho das estações de trabalho.

Na volta de Jobs para a Apple em 1996, foi exigido que a Next fosse comprada, Jobs assumiu a frente dos negócios da Apple e reformulou vários produtos. Entre eles o próprio SO, que estava defasado em relação aos outros. E para ser realizada essa reformulação, a linguagem escolhida foi justamente o Objective C, sendo criado assim o Mac OS X.

Características

A linguagem é derivada diretamente do C, a maior parte de sua sintaxe (incluindo pré-processamento, expressões, declaração e chamadas de funções) foi herdada da linguagem C ,com algumas características de Smalltalk, como o uso de parâmetros dentro do nome do método em vez de em seção de parâmetros no mesmo. Atualmente, é utilizada principalmente no Mac OS X e GNUstep, que são dois ambientes inspirados no padrão OpenStep sendo a principal linguagem utilizada nos aplicativos estruturais NeXTSTEP, OPENSTEP e Cocoa (versão da Apple do ambiente de desenvolvimento NeXtstep com algumas melhorias).

Objective-C suporta polimorfismo, posing, categorias, e é uma linguagem dinâmica, com typing e binding dinâmicos. Com Objective-C você pode adicionar classes e categorias em tempo de execução de forma fácil. Objective-C realiza chamadas de mensagem dinâmicas rapidamente, entre 1,5 e 2,0 vezes o tempo de uma chamada de função em C.

A linguagem Objective-C foi a que mais cresceu em popularidade em 2011 (+3,91 pontos percentuais), após ter estado muito próxima disso nos 2 anos anteriores. O relatório atribui este resultado ao sucesso do iPhone e iPad, cujo desenvolvimento de aplicativos ocorre quase exclusivamente nesta linguagem e nas tecnologias associadas a ela.

Ambiente de programação

Para programar em Objective-C, tal como em qualquer outra linguagem moderna, você precisa de um editor e um compilador. Ambos estão disponíveis gratuitamente em muitos dos sistemas operacionais atuais.

  • No MacOS X, você deve instalar os “Developer Tools” gratuitos da Apple, caso eles não estejam presentes no seu sistema. Essas ferramentas incluem dentre muitas outras coisas o compilador gcc e um ambiente de programação extremamente eficiente, denominado Xcode.
  • No Linux você já deve ter o gcc instalado, bem como muitos editores de texto (vi, pico, emacs). Você tambem pode utilizar algum ambiente de programação, como o Kdevelop ou ferramentas GNUStep.
  • No Windows você pode instalar o compilador Objective-C que acompanha o sistema MinGW .Para escrever os códigos, qualquer editor de texto puro, como o Notepad.

Nos três sistemas, compilar um programa utilizando a linha de comando resume-se ao gcc (para projetos maiores costuma-se utilizar ferramentas como make, automake, etc), cujo formato geral de chamada é:

  gcc arquivos.m -o nome_do_programa -l objc

•gcc: Indica que usaremos o compilador gcc

•arquivos.m: nome do arquivo do programa

•-o : vem de output, indica qual nome o arquivo executável vai ter

•-l objc: O -l vem de library (biblioteca) -lobjc indica que usaremos as bibliotecas do objective-c para compilar o nosso programa.

Os arquivos de código da linguagem Objective-C possuem sufixo ”.m”, enquanto que os cabeçários possuem, como em C, sufixo ”.h”.

A diretriz denominada ”#import”, que serve para substituir ”#include” de forma a não ser necessário escrever ”#ifndef #define #endif” para não incluir o mesmo arquivo várias vezes, e com isso as versões do gcc utilizadas em computadores com Linux e Windows dão “Warnings” na hora de compilar. Para acabar com esse problema, utilize a chamada do gcc com ”-Wno-import”. Computadores com o gcc fornecido pela Apple não sofrem desse problema.Para compilar programas utilizando o Xcode da Apple você deve criar um novo projeto do tipo “Cocoa Application” e sobrescrever o arquivo “main.m” que será criado automaticamente.

Sintaxe

O Objective C foi construído sobre a linguagem C, constituindo-se como um super-conjunto de C, sendo possível compilar qualquer programa C em um compilador de Objective C. A maior parte da sua sintaxe deriva do C, enquanto os aspectos de orientação a objetos foram inspirados no estilo de passagens de mensagens do Smalltalk. Quem já tem experiência com C ou C++ vai verificar algumas características parecidas.

Programa em Objective C:

  hello.m
  
  #import <stdio.h>
  int main( int argc, const char *argv[] ) {
         printf( "hello world\n" );
         return 0;
   }
   
   Saida: hello world
 
   • #import em vez de #include em Objective-C;
   • A extensão de arquivo padrão para Objective-C é .m;
   
   

- Classes:

Como em muitas outras linguagens orientadas a objetos, as classes em Objective-C fornecem a estrutura básica para encapsular alguns dados com ações que atuam nesses dados. Um objeto é uma instância em tempo de execução de uma classe, e contém sua própria cópia das variáveis instânciadas pela classe e ponteiros para os metódos da classe.

A especificação de uma classe em Objective-C necessita de duas partes distintas: a interface e a implementação. A interface é a parte que contém a declaração e define as variáveis que serão instanciadas e os metódos associados com a classe. A interface é normalmente colocada num arquivo .h. A implementação é a parte que contém o código dos metódos da classe. A implementação é colocada em um arquivo .m.

A Figura abaixo mostra a sintaxe para a declaração de uma classe chamada MyClass, que herda caracteristicas da classe base do Cocoa, NSObject. A declaração da classe começa com a diretiva de compilador @interface e termina com a diretiva @end. Logo após o nome da classe (e separado dele por dois pontos) fica o nome da classe-pai. As variáveis de instância da classe são declaradas em um bloco de código delineado por chaves ( { e } ). Após o bloco de variáveis fica a lista de metódos declaradas pela classe. Um ponto-e-virgula marca o fim de cada declaração de variavel ou metódo.

O Objective-C suporta tanto tipificação fraca quanto forte para as variáveis do objeto. Variáveis com tipificação forte incluem o nome da classe na declaração do tipo da variável. Variáveis com tipificação fraca usam o tipo id. Variáveis com tipificação fraca são usadas normalmente para coisas como coleção de classes, onde o tipo exato do objeto em uma coleção pode ser desconhecido. Quem sempre usou linguagens de tipificação forte, pode achar que o uso de tipificação fraca poderia causar problemas, mas esse tipo fornece uma tremenda flexibilidade e permite um enorme dinamismo em programas Objective-C.

O exemplo abaixo mostra exemplos de tipificação forte e fraca:

MyClass *myObject1;  // Strong typing
id       myObject2;  // Weak typing

Observe o asterisco na primeira declaração. No Objective-C, referências para objetos são ponteiros. Coloca-se o asterisco na frente dos nomes de variáveis para declarações de objetos com tipificação forte. O tipo id implica um ponteiro.

- Metódos:

Uma classe no Objective-C pode declarar dois tipos de metódos:

• Metódos de instância: Um metódo de instância é um metódo cuja execução é associada a uma particular instância da classe. Em outras palavras, antes que possa chamar um metódo de instância, precisa criar primeiro uma instância da classe.

• Metódos de classe: Metódos de classe, ao contrário, não requerem a criação de uma instância da classe.

A declaração de um metódo consiste de um identificador do tipo do metódo, um tipo de retorno, uma ou mais palavras-chaves, e o tipo do parâmetro e informação do nome. A Figura abaixo mostra a declaração do metódo de instãncia insertObject:atIndex.

- Strings:

Como um sub-conjunto de C, o Objective-C suporta as mesmas convenções para especificação de string que o C. Em outras palavras, caracteres individuais são encapsulados por aspa única, e cadeias de caracteres são cercadas por aspas duplas. Todavia, o framework do Objective-C tipicamente não usa string no estilo C. Ao invés disso, ele passa strings através de objetos NSString.

A classe NSString fornece um invólucro para strings, incluindo gerenciamento de memória para armazenar strings de tamanho arbitrário, suporte a Unicode, utilitários de formatação estilo printf, e mais. Já que string são muito usadas, o Objective-C fornece uma notação curta para criar objetos NSString a partir de valores constantes. Para usar esse atalho, tudo que se tem que fazer é preceder uma string normal com aspas duplas com o simbolo @, como mostrado abaixo:

  NSString *myString = @"My String\n";
  NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];

- Polimorfismo, Typing dinâmico e Binding dinâmico:

Polimorfismo é um conceito muito simples. Ele nada mais é do que a habilidade que uma linguagem orientada à objetos tem de definir métodos com o mesmo nome para classes diferentes. Cada definição de classe guarda o código necessário para seus métodos.Typing dinâmico é a característica que a linguagem tem de poder postergar a determinação da classe de um objeto até o tempo de execução do programa, enquanto que Biding dinâmico é poder postergar a determinação do método que será invocado em um objeto até o tempo de execução. Para realizar o typing e o binding dinâmicos utiliza-se o tipo id. Este é um tipo de objeto genérico, que pode ser utilizado para guardar objetos pertencentes a qualquer classe.

Objective-C 2.0

Em 2006 na Worldwide Developers Conference, a Apple anunciou o lançamento do “Objective-C 2.0”, uma versão da linguagem Objective -C que inclui: Coletor de lixo moderno, sintaxe reforçada , melhorias de performance na execução e suporte a 64-bits. O Mac OS X v10.5, liberado em outubro de 2007, inclui um compilador Objective-C 2.0, “dot syntax”, enumeração rápida, métodos de protocolos opcional, atributos em métodos/protocolos/classes, classes de extensão e o novo GNUnn Objective-C runtime API.

Fontes

 
objectivec-1-trabalho.txt · Last modified: 2012/03/19 09:39 by clp · [Old revisions]