#desenvolvimento

Conhecendo Objective-C – Parte III


Olá pessoal.

Neste post veremos um pouco sobre os conceitos contidos na linguagem Objective-C.

Objetos

A grosso modo, um objeto é composto de uma estrutura de dados e por um conjunto de métodos. Os métodos do objeto são operações que acessam dados dos objetos. Os dados acessados são variáveis de instância, ou seja, uma estrutura de dados. É importante saber que uma unidade de programa é composta por um conjunto de objetos.

id

Objective-C provê um tipo de dado para identificar um objeto sem especificar a classe do objeto. Este tipo de dados é denominado id que é um indentificador de objetos. O tipo id é um tipo geral para qualquer tipo de objeto. Acredito que o objetivo do tipo id seja semelhante ao var disponibilizado no C#.  O valor inicial definido para o id é zero.

Tipagem dinâmica

O tipo id é completamente não restritivo. Por si só, não fornece informações sobre um objeto, exceto que ele é um objeto. Em algum ponto, um programa precisa procurar mais informações específicas sobre os objetos que ele contém. E já que o designador id não é capaz de fazê-lo, o próprio objeto é capacitado para fornecer estas informações em tempo de execução.

A variável de instância isa identifica as classes dos objetos, ou seja, qual tipo de objeto ele é. Objetos com o mesmo comportamento e mesmos tipos de dados são membros de uma mesma classe. Objetos são portanto dinamicamente tipados em tempo de execução, mas de qualquer forma ele precisa de um tipo. O sistema em tempo de execução pode procurar a classe exata a qual um objeto pertence com a finalidade de solicitar o objeto.

A variável isa também habilita objetos para instrospecção de performance para procurar informações sobre ele em outros objetos. O compilador grava informações sobre a definição de classes nas estruturas de dados para serem usadas em tempo de execução do sistema. As funções do sistema em tempo de execução utiliza a isa para procurar essas informações em tempo de execução. Usando o sistema em tempo de execução, você consegue identificar se um objeto implementa um método particular ou descobrir o nome da sua superclasse.

É possível também dar ao compilador, informações sobre a classe de um objeto por tipagem estática no código fonte usando o nome da classe. Classes são tipos particulares de objetos e o nome da classe pode servir como o nome de um tipo.

Gerenciamento de memória

Em qualquer programa é importante garantir que objetos sejam desalocados quando eles não são mais necessários. Caso contrário o uso de memória do aplicativo se torna maior do que o necessário. Também é importante garantir que você não desaloque objetos enquando eles ainda estiverem sendo usados.

A título de conhecimento, o Objective-C oferece três mecanismos de gerenciamento de memória:

  • Automatic Reference Counting (ARC)
  • Manual Reference Counting (MRC)
  • Garbage Collection

Claro que ainda existem muitos outros conceitos importantes a serem estudados. Mas finalizo este primeiro contato com a linguagem na expectativa de que novos posts virão em breve.

Até 😉

Conhecendo Objective-C – Parte I

Conhecendo Objective-C – Parte II

Padrão
#desenvolvimento

Conhecendo Objective-C – Parte II


Olá pessoal.

Continuando nosso primeiro contato com Objective-C vamos explorar um pouco mais o conceito de mensagens.

É bom saber que também é possível implementar mensagens aninhadas para diminuir o número de declaração de objetos receptores de mensagens. Assim o valor recebido em cada mensagem é utilizado como parâmetro para outra mensagem:

[meuObjeto inserirObjeto:[objetoReceptor metodoQueRetornaObjetoParaInserir] naPosicao:0];

Neste exemplo o primeiro parâmetro umObjeto foi substituído pela mensagem objetoReceptor metodoQueRetornaObjetoParaInserir, ou seja o objetoReceptor possui um método que retorna um objeto e este objeto será enviado como parâmetro para o método inserirObjeto.

No post anterior vimos que as classes possuem métodos de classe e de instância. Os métodos de classe são usados como fábrica para criação de novas instâncias da classe ou para acessar alguma informação associada com a classe, como por exemplo uma constante. Para identificar um método como sendo um método de classe é necessário utilizar o identificador plus (+) no início do método.

Digamos que criamos uma classe chamada NSArray que herda de NSMutableArray e nossa classe possui um método de classe denominado criarArrayDeObjetos. Então para criarmos uma nova instância desta classe temos que alocar e inicializar uma instância, conforme o código abaixo:

// Aloca espaço para a nova instância.
NSMutableArray *meuArrayDeObjetos = nil;

// Inicializa a instância.
meuArrayDeObjetos = [NSMutableArray criarArrayDeObjetos];

Assim como em Ruby a palavra chave reservada para nulo é denominada nil, diferentemente do Java e C# que utilizam a palavra reservada null.

Enfim vamos visualizar o código de uma classe com método de instância e método de classe:

@implementation MinhaClasse

// Método de instância.
- (id)inicializarComNome:(NSString *)umNome
{
 self = [super init];
 if (self){
 nome = [umNome copia];
 }
 return self;
}

// Método de classe.
+ (MinhaClasse *)criarMinhaClasseComNome:(NSString *)umNome
{
 return[[[self alloc] inicializarComNome:umNome] autorelease];
}
@end

Não se preocupe se não entendeu completamente a classe acima. Neste momento é importante identificar apenas o que já vimos até aqui, isto é, identificar que o método de classe realiza uma chamada ao método de instância.

Em Objective-C também temos os métodos de acesso get e set que são descritos assim:

// Get.
- (int)idade

// Set.
- (void) setIdade:(int)

E podem ser acessados de forma semelhante ao acesso das propriedades em C#:

// Forma simplificada.
meuObjeto.nome = umNovoNome;

// Forma completa.
[meuObjeto setNome:umNovoNome];

Aqui o conceito de propriedade pode ser entendido como uma notação de conveniência usada para substituir a declaração dos métodos de acesso. A declaração das propriedades devem ser feitas no arquivo de interface cuja extensão é o famoso .h da linguagem C. Basicamente a declaração de uma propriedade é composta pela diretiva @property, o tipo e o nome da propriedade.

// Diretiva + Tipo + Nome da propriedade.
@property BOOL flag;

// Copia o nome durante a atribuição.
@property (copy) NSString *nome;

// Declara somente o método de acesso (Get).
@property (readonly) int idade;

Para utilizar as propriedades declaradas no header file é necessário solicitar ao complilador a geração dos métodos declarados na especificação das propriedades. Esta solicitação se dá quando inserimos a diretiva @synthesize seguida do nome da propriedade:

// Solicitação de apenas uma propriedade.
@synthesize flag;

// Solicitação de múltiplas propriedades.
@synthesize flag, nome, idade;

A manipulação de strings em Objective-C suporta as convenções de especificação de strings em C, ou seja, podemos utilizar o estilo do printf para formatá-las.

int idade = 24;
NSString *mensagem;

// Conteúdo da mensagem: "Eu tenho 24 anos."
mensagem = [NSString stringWithFormat: @"Eu tenho %d anos.\n", idade];

NSString *nome = @"Brena";
NSString *sobrenome = @"Monteiro";
NSString *nomeCompleto;

// Conteúdo do nomeCompleto: "Meu nome completo é Brena Monteiro".
nomeCompleto = [NSString stringWithFormat: @"Meu nome completo é %@ %@", nome, sobrenome];

Para mim este primeiro contato direto com Objective-C diminuiu a dificuldade de entendimento da linguagem. E acredito que é possível avançar os estudos, aprofundando nas características específicas da linguagem.

Espero que tenha sido útil para quem também está começando a aprender Objective-C. E só para constar, toda consideração sobre o post é bem vinda.

Até breve.

[Edited]

Conhecendo Objective-C – Parte I

Conhecendo Objective-C – Parte III

[/Edited]

Padrão
#desenvolvimento

Conhecendo Objective-C – Parte I


Olá pessoal.

Neste post irei descrever alguns aspectos básicos da nova linguagem que estou aprendendo.

Objective-C é de fato uma linguagem orientada a objetos além de ser um “super conjunto” da linguagem C.

Por isto possui três tipos de arquivos:

  • .h  – Contém interfaces, tipos, funções e declaração de constantes.
  • .m  – Contém códigos e classes implementados em C e Objective-C.
  • .mm – Contém códigos e classes implementados em C, Objective-C e C++ (Seu uso só é recomendado quando houver alguma implementação em C++).

Para adicionar uma biblioteca é recomenda a utilização da diretiva #import no lugar da diretiva #include:

#import "Rectangle.h"

As interfaces contém somente a declaração de variáveis e métodos, conforme o exemplo abaixo:

@interface MinhaPrimeiraClasse : NSObject
{
   // Declaração de variáveis.
   int       contador;
   NSString* nome;
}
// Declaração de métodos.
- (id)iniciarComString:(NSString*)aNome;
+ (MinhaPrimeiraClasse*)criarMinhaPrimeiraClasseComString:(NSString*)aNome;
@end

Objective-C suporta tipagem fraca e forte para variáveis que contém objetos:

// Fortemente tipada.
MinhaPrimeiraClasse *meuPrimeiroObjeto;

// Fracamente tipada.
id meuObjeto;

Assim como em Java e C#, o Objective-C possui métodos de instância e métodos de classes, os famosos métodos estáticos. A declaração de métodos é um tanto quanto confusa porque a declaração dos tipos é feita entre parênteses:

- (void)inserirObjeto:(id)umObjeto naPosicao:(NSUInteger)posicao

Para entender a declaração do método é necessário separar e identificar as partes:

  • Identificador do tipo de método: –
  • Tipo de retorno do método: (void)
  • Tipos de parâmetros: (id) e (NSUInteger)
  • Nomes dos parâmetros: umObjeto e posicao
  • Nome do método: inserirObjeto naPosicao

Assim temos um método de instância, representado pelo identificador (-) minus, com o retorno void. Este método insere o objeto recebido, através do parâmetro umObjeto, na posição definida pelo parâmetro posicao. Perceba que o nome do método é composto pelas partes terminadas com dois pontos(:), ou seja inserirObjeto:naPosicao:.

Com o método criado precisamos saber como invocá-lo. A chamada de métodos em Objective-C também é feita através de mensagens seguindo os princípios da OO. A mensagem é delimitada por colchetes[] e é composta por um objeto que recebe a mensagem, pelo nome do método e por seus parâmetros:


[objetoMensagem inserirObjeto:umObjeto naPosicao:0]

Se me perguntarem se é preciso saber C para programar em Objective-C, eu responderei que facilitará bastante, da mesma forma que ajudará se você souber programação orientada a objetos.
Por enquanto é isso, até breve 😉

[Edited]

Conhecendo Objective-C – Parte II

Conhecendo Objective-C – Parte III

[/Edited]

Padrão
#prosa

Desenvolvimento no mundo Apple


A grande desculpa para comprar um iMac, sem parecer ser “fangirl” era conhecer a plataforma em nível de desenvolvimento e absorver todo o conceito de usabilidade que o Mac OS X fornece.

Seguindo esta idéia comecei a estudar Objective-C e estou tendo dificuldade em aprender pelo fato de considerar a linguagem não muito legível. Para ser sincera no primeiro contato, Objective-C me pareceu uma grande mistura e seus colchetes espalhados por todos os lados a tornam mais complexa. Entretanto, sendo uma programadora poliglota não posso apegar-me a estes detalhes (:

Para começar me registrei no Member Center da Apple, entretanto ainda não me afiliei ao Apple Developer Program e só pretendo fazê-lo quando for publicar alguma aplicação. Tenho que admitir que a documentação e guias/tutoriais fornecidos pela Apple são sensacionais, completos, atualizados e funcionam perfeitamente.

Para quem está procurando materiais em português acredito que o livro Use a cabeça! Desenvolvendo para iPhone seja uma boa alternativa. Mas já existe uma segunda edição do livro em inglês (Head First iPhone & iPad Development).

Fui apressada e fiz direto a primeira app para o iOS, então percebi que o Xcode possui vários facilitadores mas não pense que vai fugir do código e a princípio ele também vai gerar “códigos loucos”. Foi bom para ter uma rápida idéia de como as coisas funcionam só que minha recomendação é que antes de começar realmente a desenvolver para Mac OS ou para iOS estude Objective-C. Os “códigos loucos” tendem a ficar mais “normais” e é isto que pretendo fazer e compartilhar aqui no blog.

Até breve 😉

[Edited]

Conhecendo Objective-C – Parte I

Conhecendo Objective-C – Parte II

Conhecendo Objective-C – Parte III

[/Edited]

Padrão