Objective-C | |
Data da primeira versão | 1983 |
---|---|
Paradigma | orientado ao objeto , reflexivo |
Autor | Brad Cox e Tom Love |
Última versão | 2.0 |
Digitando | dinâmico , estático , fraco |
Influenciado por | C , Smalltalk |
Influenciado | TOM , Java , Swift |
Implementações | OpenStep , Cocoa , GNUstep |
Sistema operacional | UNIX, macOS |
Licença | Livre |
Local na rede Internet | developer.apple.com/library/mac/navigation |
Extensão de arquivo | h, m, mm e C |
Objective-C é uma linguagem de programação orientada a objetos reflexiva . Esta é uma extensão de ANSI C , como C ++ , mas difere dela por sua entrega dinâmica de mensagens, sua digitação fraca ou forte, sua digitação dinâmica e carregamento dinâmico. Ao contrário do C ++, ele não permite herança múltipla, mas existem maneiras de combinar as vantagens do C ++ e do Objective-C.
Hoje, ele é usado principalmente na operação de sistemas Apple : macOS e seu derivado iOS baseado na biblioteca de classes Cocoa, mas também existe uma biblioteca de classes gratuita GNUstep sob GNU / Linux . Cocoa e GNUstep são os sucessores da API OpenStep , usada em sistemas operacionais NeXTSTEP (originalmente macOS) e sua contraparte gratuita OPENSTEP .
O final da década de 1970 foi marcado pela popularidade crescente e rápida da linguagem C inventada no início da década por Dennis Ritchie na AT&T Bell Laboratories . Essa popularidade é alimentada por uma popularidade ainda maior, a do sistema operacional UNIX escrito inteiramente em C. Na virada dos anos 1970 para 1980 , a prática atual da engenharia de software é baseada na programação estruturada . A implementação da programação estruturada é utilizada com o objetivo de quebrar grandes programas em partes menores, de menor complexidade e, portanto, mais fáceis de programar. No entanto, à medida que a solução de problemas se torna maior e mais complicada, a programação estruturada se torna menos útil à medida que mais e mais procedimentos precisam ser escritos, o que leva a estruturas de controle complexas e à baixa reutilização de código. Na época, muitos viam a orientação a objetos como uma possível solução para esse problema.
Várias pessoas então criam extensões para C para adicionar o orientado a objetos. É o caso de Bjarne Stroustrup, que desenvolveu o C ++ em 1979 nos mesmos laboratórios em que nasceu o C de Dennis Ritchie. O nascimento de Objective-C ocorre no mesmo contexto. Brad Cox a desenvolveu no início dos anos 1980. A linguagem é apresentada como uma sobreposição de C para permitir a criação e manipulação de objetos, pegando certos conceitos da linguagem Smalltalk-80 .
O código compilado Objective-C está rodando em um ambiente de execução ( runtime ) Light escrito em C, o que pouco acrescenta ao tamanho da aplicação.
O primeiro sistema operacional a usar Objective-C foi o NeXTSTEP (mais tarde renomeado para OPENSTEP ), da empresa NeXT , fundada por Steve Jobs .
Objective-C é amplamente utilizado no Macintosh , principalmente para as APIs Cocoa do Mac OS X e, mais recentemente, para o desenvolvimento de aplicativos para iPhone , o smartphone da Apple.
Há também uma implementação gratuita da estrutura OpenStep , chamada GNUstep , que é multiplataforma e funciona em particular no GNU / Linux , Microsoft Windows e na maioria dos UNIXs .
Em Objective-C, tudo é um objeto exatamente como em Smalltalk, do qual é fortemente inspirado. É, portanto, uma linguagem fortemente orientada a objetos. A herança simples induz uma árvore de herança com uma raiz: a classe NSObject, no caso do Cocoa / NeXTSTEP, ou Object, no caso do GNUstep. É a partir dele que todas as classes serão derivadas. Por exemplo, um objeto da classe NSString, ou NSArray, deriva da classe NSObject (indiretamente). NSMutableArray deriva da classe NSArray, que é, portanto, sua superclasse. De acordo com alguns de seus usuários, é aqui que o poder do Objective-C aparece: ao contrário do C ++ ou outras linguagens que não o incluem, a digitação fraca torna mais fácil a manipulação de dados.
Na verdade, em vez de ter que lidar com muitos tipos, existem apenas alguns, por exemplo, no caso do cacau:
Além disso, todas as variáveis de instância de classe são protegidas por padrão e os métodos de classe são públicos. Portanto, permite que os programadores tenham uma programação mais rigorosa, sendo mais rápidos e respeitando os conceitos de POO.
Outro aspecto é o modelo de design KVC (Key-Value Coding), também inspirado em Smalltalk , que define o acesso a uma variável pelo nome. Por exemplo, no caso de uma classe Person, com uma variável de instância Firstname, do tipo NSString:
@interface Personne : NSObject { // variables d'instance NSString *prenom; } // methodes @property (copy) NSString *prenom; @endObjective-C permite a criação rápida de um objeto NSString usando o "@", da mesma forma que C com strings "". NSStrings são codificados em Unicode , ou seja, ao contrário do C, os caracteres não se limitam a códigos ASCII. Podemos, portanto, definir o valor da variável de sobrenome de uma instância de Person assim:
// On crée un pointeur vers un objet de la classe Personne, qu'on a d'abord alloué dans l'espace mémoire, et initialisé. Personne *exemple = [[Personne alloc] init]; //On envoie un message au pointeur exemple qui va le rediriger vers l'objet vers lequel il pointe, pour fixer la valeur de la clef surname. [exemple setValue:@"Paul" forKey:@"prenom"];Em Objective-C, qualquer chamada de método de uma classe é uma passagem de mensagem. Para chamar uma mensagem sobre um objeto, coloque o objeto entre colchetes e depois a mensagem. Você pode encadear chamadas com muita facilidade. Portanto, no exemplo, o método retorna um objeto e neste objeto chamamos o método2 .
// passage de message [objet methode:argument]; // chaînage de message [[objet methode:argument] methode2:argument2];
A sintaxe dos métodos, um pouco confusa à primeira vista, foi projetada para se parecer mais com a linguagem humana. Cada argumento é separado por ":" e também por um comentário.
Cada instância de objeto possui um ponteiro isa, que é um ponteiro para um objeto de metaclasse que descreve os métodos acessíveis pelo objeto. Uma classe com um pai, a metaclasse representa uma árvore com toda a hierarquia de classes atualmente na memória. Portanto, quando tentamos passar uma mensagem, o ambiente Objective-C recupera o ponteiro isa do objeto e percorre a árvore de metaclasse para obter o ponteiro do método chamado. Esse mecanismo é obviamente caro, mas um dispositivo de cache durante a primeira chamada o torna muito eficiente.
Objective-C ++ é um front-end para GCC , que compila uma combinação de código C ++ e Objective-C. Objective-C ++, além de extensões C ++ que a linguagem Objective-C adiciona C .