# Objective-C

Objective-C, denominado frequentemente de ObjC ou mais raramente de Objective C ou Obj-C, é uma linguagem de programação reflexiva orientada a objecto que adiciona transmissão de mensagens no estilo Smalltalk para o C.
Hoje em dia, é utilizada principalmente no Mac OS X e GNUstep, dois ambientes baseados no padrão OpenStep e é a principal linguagem utilizada nos aplicativos estruturais NeXTSTEP, OPENSTEP e Cocoa. Programas genéricos em Objective-C que não façam uso destas bibliotecas também podem ser compilados por qualquer sistema suportado pelo gcc, que inclui um compilador Objective-C.

## 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 projecto de software e programação. Para demonstrar que progresso real podia ser feito, Cox provou que componentes de software necessitavam apenas de umas poucas mudanças práticas nas ferramentas existentes. Especificamente, eles precisavam dar suporte a objetos de modo flexível, possuir um conjunto de bibliotecas funcionais e permitir que fossem empacotados num único formato multiplataforma.
A principal descrição do Objective-C em sua forma original foi publicada no livro de Cox, Object-Oriented Programming, An Evolutionary Approach, de 1986. O autor teve o cuidado de ressaltar que o problema é mais da reusabilidade do que da linguagem, embora, apesar disso, o sistema freqüentemente seja comparado numa base característica-por-característica com outras linguagens.

### Popularização através do NeXT

Em 1988, a NeXT de Steve Jobs licenciou o Objective-C da StepStone (a dona da marca registrada Objective-C) e liberou sua própria versão do compilador e das bibliotecas da linguagem nas quais a interface do usuário e da estrutura NeXTstep eram baseadas. O sucesso das ferramentas e a qualidade do sistema operativo resultante ajudaram a NeXT a ocupar um nicho de provedor de workstations bastante popular.
O projeto GNU começou a trabalhar em seu clone livre do NeXTStep baseado no padrão OpenStep, o GNUstep. Dennis Glatting escreveu o primeiro runtime do gnu-objc em 1992, e Richard Stallman criou o segundo pouco depois. O runtime do GNU Objective-C que tem estado em uso desde 1993 é aquele desenvolvido por Kresten Krab Thorup, quando ele era estudante universitário na Dinamarca. Kresten também trabalhou para a NeXT por algum tempo.
Depois de adquirir a NeXT em 1996, a Apple usou o OPENSTEP como base para seu principal sistema operativo, o Mac OS X. Isto inclui o Objective-C e a ferramenta de desenvolvimento NeXT's Objective-C, o Project Builder (mais tarde substituído pelo Xcode), bem como sua ferramenta de projeto de interface, Interface Builder.
A maior parte da presente API Cocoa da Apple está baseada na interface de objetos OpenStep, e este é o mais significativo ambiente Objective-C sendo usado para desenvolvimento ativo.

## Sintaxe

O Objective-C é uma camada muito fina construída sobre a linguagem C e constitui-se num superconjunto estrito de C. Ou seja, é possível compilar qualquer programa C com um compilador Objective-C. O Objective-C deriva sua sintaxe tanto do C quanto do Smalltalk. A maior parte de sua sintaxe (incluindo pré-processamento, expressões, declaração e chamadas de funções) foi herdada da linguagem C, enquanto a sintaxe para os aspectos orientados a objetos foi criada para habilitar passagem de mensagens no estilo Smalltalk.

## Mensagens

O modelo de orientação a objeto do Objective-C é baseado na passagem de mensagens para instâncias de objeto.No Objective-C, não simplesmente se chama um objeto, envia-se uma mensagem. Diferente do modelo de programação estilo Simula usado por C++.A diferença entre estes dois conceitos está na forma como o código referenciado pelo nome de mensagem ou método é executado.Em uma linguagem estilo Simula, o nome do método é na maioria dos casos, ligados a uma seção de código na classe de alvo pelo compilador. Em Smalltalk e Objective-C, o alvo de uma mensagem é resolvido em tempo de execução, com o objetivo de receber-se interpretar a mensagem.Um método é identificado por um seletor ou SEL - uma string terminada em NUL representando o seu nome - e converte-se a um ponteiro de método C , implementando-o: um IMP.Uma consequência disto é que o sistema de transmissão de mensagens não tem nenhuma verificação de tipo. O objeto ao qual a mensagem é dirigida - o receptor - não é garantido que responda a uma mensagem, e se isso não acontecer, ele simplesmente gera uma exceção.
Enviando a mensagem metodo para o objeto apontado pelo ponteiro obj exigiria o seguinte código no C++:
Em Objective-C o mesmo código fica:
Ambos os estilos de programação têm seus pontos fortes e fracos. Programação orientada a objetos no estilo Simula permite herança múltipla e execução mais rápida, usando associação em tempo de compilação sempre que possível, mas ele não suporta associação em tempo de execução por padrão.Também força todos os métodos a ter uma implementação correspondente a menos que seja Método abstrato. No estilo de programação Smalltalk se permite que mensagens não sejam implementadas com a resolução de métodos em tempo de execução. Por exemplo, uma mensagem pode ser enviada para uma coleção de objetos, em que somente se espera que alguns respondam, sem medo de gerar erros de execução.Passagem de mensagens também não exige que um objeto seja definido em tempo de compilação. Uma implementação ainda é necessária para que o método seja chamado no objeto derivado.