Archive for janeiro, 2009

Classes

sábado, janeiro 31st, 2009
Continuando com nosso tópico de desenvolvimento, hoje vamos falar sobre classes e orientação à objetos.
Mas afinal o que é um Objeto?
Um objeto é uma coisa. :)
Pense em orientação à objeto como uma coisa e todas as coisas que pretende fazer com esta coisa. Esta é a grande diferença da linguagem C, que é conhecida como uma linguagem procedural. No C, basicamente você pensa sobre o que quer primeiro e só então você se preocupa com os objetos, isto é o contrário de uma orientação à objetos.
Por exemplo. Assuma que você é dono de um carro. O carro naturalmente é um objeto (coisa). O seu carro pode ser de várias marcas, VW, GM, Fiat, Honda, etc…, Seu carro possui uma identificação (o número do chassi) que é um número único que identifica o carro. Na orientação à objeto o seu carro é uma instancia de um carro e indo um pouco mais adiante, carro é o nome de uma classe. Seu carro pode ser prata, preto, branco, vermelho, etc… pode ser conversível ou utilitário, pode ainda ser a alcool, gasolina, gás, etc…

Ações no objeto
Objeto__________O que faz o objeto?
seu carro________dirige
_______________encher o tanque

_______________lavar

_______________se divertir


As ações listadas acima podem estar disponíveis no seu carro e também em outro carro.
Em orientação à objetos, cada vez que você declara que um carro pertence a alguém, dizemos que estamos instanciando uma classe (no caso, classe carro). Quando descrevemos as ações, dizemos que estamos criando métodos para usar esta classe.

Hoje, ficaremos por aqui, espero que tenha sido claro, se não fui, por favor, me avisem.

(by Ademar Varela)

NSApplicationMain

sexta-feira, janeiro 30th, 2009
Conforme post anterior sobre ObjcC, vimos uma função chamada NSApplicationMain, e de acordo com o que foi escrito vamos explicar qual a utilidade da mesma.

Basicamente, esta função cria a aplicação, carrega o resource principal do Interface Builder e executa a aplicação. Você pode chamar esta função a partir de uma thread principal da sua aplicação e tipicamente usamos esta função na chamada da função main da nossa aplicação.

Como podemos observar, esta função é essencial para que uma aplicação funcione adequadamente. Neste primeiro momento, vamos deixar a função NSApplicationMainexatamente onde o wizard do XCode criou, na função main.

(by Ademar Varela)

Criando aplicações para iPhone

quinta-feira, janeiro 29th, 2009

 

Muitas pessoas tem me pedido para dar dicas para desenvolver para o iPhone. Então vamos começar. A primeira coisa que precisamos fazer é criar uma estrutura (skeleton em inglês) para a aplicação. Este estrutura irá fornecer todas as informações necessárias para o iPhone tomar conhecimento da sua aplicação. Esta estrutura é feita usando XML, e a seguir temos um exemplo (para poder fazer esta publicação, troquei < por [ e > por ]): 

[?xml version="1.0" encoding="UTF-8"?]
[DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
http://www.apple.com/DTDs/PropertyList-1.0.dtd"]
[plist version="1.0"]
[dict]
[key]CFBundleDevelopmentRegion[/key]
[string]English[/string]
[key]CFBundleExecutable[/key]
[string]NossaAplicação[/string]
[key]CFBundleIdentifier[/key]
[string]www.developingformac.blogspot.com[/string]
[key]CFBundleInfoDictionaryVersion[/key]
[string]6.0[/string]
[key]CFBundlePackageType[/key]
[string]APPL[/string]
[key]CFBundleSignature[/key]
[string]????[/string]
[key]CFBundleVersion[/key]
[string]1.0[/string]
[/dict]
[/plist]

Neste estágio, as informações mais importantes estão em negrito. Estou falando dos valores para CFBundleExecutable e CFBundleIndentifier. O valor para CFBundleExecutable especifica o nome do executável. O valor para CFBundleIdentifier especifica um identificador único pelo qual sua aplicação é conhecida isto porque a camada de aplicação do iPhone é direcionada para o endereçamento da sua aplicação.

 

Ficou preocupado com o código XML? não se preocupe. Quando você usa o XCode para desenvolver para o iPhone, o XCode cria automaticamente esta estrutura.  

Nada como usar o Wizard!!!

(by Ademar Varela)

 

Removendo o SIM Card do iPhone

quarta-feira, janeiro 28th, 2009
Vamos falar de amenidades. Segue uma dica de como remover o SIM Card do iPhone.

O SIM Card do iPhone é removível, porém ele fica bem escondido. Por incrível que possa parecer, para você remover o SIM Card do iPhone você precisa de um clips de papel, isso mesmo, um dos maiores avanços tecnológicos dos últimos tempos precisa de um clips de papel.

No entanto, este procedimento deve fazer com que você perca a garantia do iPhone, portanto vale a pena certificar que isto não ocorra caso seja necessário fazer esta troca.

1o passo: Localizar o slot do SIM Card
O Slot está localizado no topo do iPhone, entre o headphone e o botão de power.

O SIM Card fica atrás deste slot.

2o passo: Abrir o slot
Pegue o clips de papel e insira no pequeno buraco. Então firmemente empurre o clips para baixo até o slot “subir”. Veja figuras abaixo:

3o passo: Remover o SIM Card
O SIM Card está inserido dentro de uma peça chamada cradle (berço). Você poderá tirar o SIM Card fora deste cradle.

Para trocar o SIM Card, coloque outro SIM Card de volta no cradle. O cradle e o SIM Card ficam juntos como se fossem uma única peça. Agora basta deslizar o cradle novamente para dentro do iPhone.

(by Ademar Varela)

Exemplos de @interface e @implementation

terça-feira, janeiro 27th, 2009
Para finalizarmos as explicações sobre @interface e @implementation, vou postar dois exemplos de código para que fique mais claro as explicações dos posts anteriores.

@interface BraghettoAppDelegate : NSObject
{
IBOutlet UIWindow *window;
}

@property (nonatomic, retain) UIWindow *window;

@end

e

@implementation BraghettoAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
// Override point for customization after app launch [window makeKeyAndVisible];
}

- (void)dealloc {
[window release];
[super dealloc];
}

@end

Sugiro que comparem este post com os anteriores para facilitar a compreensão.
Qualquer dúvida com relação aos posts anteriores ou com este, por favor, me avisem.

(by Ademar Varela)

Alguns termos do iPhone

segunda-feira, janeiro 26th, 2009
   

iPhone é um dispositivo surpreendente com características móveis simples, anteriormente bagunçadas, que estão em um pacote elegante e bastante funcional. Se você quiser se aprofundar cada vez mais neste universo, você precisará conhecer alguns termos:

3G: Rede sem fio (wireless) rápida usada pela nova geração do iPhone. Sua velocidade está entre 700k por segundo e 1.5 Mbit por segundo, mas a sua disponibilidade é geralmente restrita aos grandes centros urbanos.

A-GPS: GPS assistido. Quando os dados de um satélite do GPS não é o suficiente, como quando alguém está dentro ou cercado por grandes edifícios, A-GPS utiliza a pilha de coordenadas das torres locais a fim de localizar a posição de um usuário.

Acelerometro: é responsável por medir a velocidade em determinado tempo em relação a um eixo. Exemplo eixo X, Y e Z. Com isso você pode detectar a posição do IPhone em relação a gravidade


Processador ARM: O cérebro do iPhone. Também conhecida como Advanced RISC Machine, ARM foi usada no Newton (será que alguém se lembra dele?), como também no Game Boy Advance, telefones móveis da Sony Ericsson, telefones da Nokia como o N95 e mais recentemente o iPhone.   

Aspen Simulator: Utilitário incluído no iPhone SDK que permite aos desenvolverdores emular um iPhone a partir de seus computadores, desta forma, eles podem testar suas aplicações WEB e aplicações nativas.

Baseband: A área de memória do iPhone usada pelo radio. O baseband é o componente mais restrito para se modificar.

EDGE: É a rede de dados usada pela AT&T. Sua velocidade está entre 150 Kbit e 200 Kbit por segundo em condições ideais, não é muito rápida.

Multi-Touch: Sistema de interface que permite aos usuários interagir com o aparelho através do toque.

Existem mais termos, que iremos divulgar nos próximos posts, mas se você tiver alguma dúvida e quiser perguntar, por favor, pergunte.

(by Ademar Varela)

 

Iniciando um Projeto

domingo, janeiro 25th, 2009
Antes de continuar com as explicações sobre o desenvolvimento para iPhone, acho importante realçar a importancia de saber fazer uma aplicação usando o XCode. Para tanto, vamos criar uma aplicação. Após iniciar o XCode, vá até o menu FILE e escolha a opção New Project. Irá aparecer um painel, conforme figura abaixo:

  

Selecione Cocoa Application. Entende-se por Application um programa que trabalha com janelas. Ao pressionar o botão Choose aparecerá a seguinte caixa de diálogo:

Escolha um nome para a sua aplicação. Ao clicar no botão Save, o seu projeto será criado.

Se você fez os passos anteriores, você agora tem a seguinte tela:  

Neste primeiro momento, temos a pasta Classes vazia. Daqui alguns dias, iremos utiliza-la.
As demais pastas já tem algum arquivo (ou arquivos) que foram gerados automaticamente peloWizard do XCode:

  • Other Sources;
  • Resources;
  • Frameworks;
  • Products.

Other Sources
Nesta pasta teremos 2 arquivos gerados automaticamente: 
teste_Prefix.pch e main.m. O primeiro arquivo (teste_Prefix.pch, o prefixo teste aparece devido ao nome do projeto) serve para importar a biblioteca Cocoa.h, e neste momento, não vamos mexer nisso. Já o main.m é o ponto inicial da nossa aplicação. A extensão “m” indica que ele é um arquivo do tipo Objective-C. Neste arquivo teremos o seguinte código fonte (foram trocados os simbolos ‘<’ e ‘>’, por ‘ ” ‘ ) :

#import “Cocoa/Cocoa.h”
int main(int argc, char *argv[])

{
return NSApplicationMain(argc, (const char **) argv);

}

Se você conhece C ou C++ já deve achar familiar a chamada da função main. Um pouco mais adiante falaremos da NSApplicationMain.

Resources
Nesta pasta encontraremos os resources da nossa aplicação. Neste primeiro momento temos os seguintes arquivos (gerados automaticamente pelo Wizard):

  • Info.plist;
  • InfoPlist.strings;
  • MainMenu.xib.

O arquivo Info.plist possui uma lista de todas as informações pertinentes a nossa aplicação. Voltaremos neste arquivo quando falarmos da função NSApplicationMain (Observem o itemPrincipal Class). O arquivo InfoPlist.strings será utilizado para fazer (se for necessário) a internacionalização da aplicação. O MainMenu.xib é um resource que está ligado ao Interface Builder. Neste resource iremos trabalhar na aparência da aplicação, bem como ativar as funcionalidades da mesma.

Frameworks
Nesta pasta encontraremos os frameworks disponibilizados pelo Wizard para a nossa aplicação. Como default ele seleciona:

  • Cocoa;
  • AppKit;
  • CoreData;
  • Foundation.

Mais a frente iremos estudar as funcionalidades de cada framework citado. se alguém tiver alguma dúvida antes disso, por favor, entre em contato.

Products
Nesta pasta encontraremos o produto final da nossa codificação. Será o nosso executável.

Quem quiser, e for curioso, já pode ver a aplicação gerada pelo Wizard funcionando, para isso, vá até o menu Build e selecione Build and Run.

(by Ademar Varela)

 

Interface Builder

sábado, janeiro 24th, 2009
Interface Builder permite você criar e editar objetos em uma interface do usuário e salvar estes objetos em um arquivo. Você pode também criar instancias das suas classes e fazer as conexões entre estas instancias e a interface do usuário. Quando o usuário interagir com os objetos da interface do usuário, as conexões que você criou entre eles e sua classe farão com que seu código seja executado.

(by Ademar Varela)

@interface & @implementation

sexta-feira, janeiro 23rd, 2009
Quando definimos uma nova classe, nós precisamos fazer algumas coisas. Primeiro, nós devemos dizer para o compilador do Objective-C de onde esta classe vem. Isto é, você tem que nomear a sua classe “pai”. Segundo, você tem que especificar qual o tipo de informação será armazenado no objeto desta classe. Isto é, você tem que descrever a informação que o membro da classe irá conter. Estes membros são chamados de variáveis de instância. Finalmente, você precisa definir os tipos de operadores, ou métodos, que podem ser usados quando trabalharmos com objetos desta classe. Tudo isto deve estar em uma seção especial do programa chamada @interface. Em geral, o formato desta seção é este:

@interface NovaClasse: ClassePai {
declaração dos membros;
}
Declaração dos métodos;
@end


Por convenção, nome de classes iniciam com letra maiúscula, entretanto não é uma obrigação. Esta convenção permite que outra pessoa consiga entender mais facilmente a sua aplicação.

A seção @implementation contém o codigo atual dos métodos que você declarou na @interface. Ou seja, você declara os métodos na seção @interface, e você define-os na seção@implementation. O formato geral da seção @implementation é:

@implementation NovaClasse;
definição dos métodos;
@end


NovaClasse é o mesmo nome que você usou para a classe na seção @interface.

(by Ademar Varela)

ObjC

quinta-feira, janeiro 22nd, 2009
Objective-C trabalha com frameworks (Carbon e Cocoa) e como C++, Objective-C é uma extensão de C e que foi desenvolvida para trabalhar orientada à objetos. Ao contrário de C++, Objective-C não é uma linguagem fortemente tipada. O poder traz responsabilidades: Objective-C permite que programadores tenham erros ridículos no código. Objective-C é uma adição para C e você verá que é muito fácil de aprender.

Frameworks
Vamos dar uma breve explicação do que são frameworks. Um framework é uma coleção de classes que são disponibilizadas em conjunto. Em outras palavras, as classes são compiladas juntas em uma biblioteca reusável do código. Você encontra os frameworks na sua máquina no diretório: /System/Library/Frameworks.

 

Cocoa é composto de 3 frameworks:

  • Foundation: Toda programação orientada à objetos precisa de valores padrões, coleções e classes utilitárias. Strings, datas, listas, threads e timers estão neste framework.
  • AppKit: Todas as coisas relacionadas com a interface do usuário estão neste framework. Janelas, botões, textos, eventos e as classes de desenho também estão neste framework. Evetualmente você pode ver este framework com outro nome: ApplicationKit.
  • CoreData: Facilita armazenar seus dados em um arquivo para depois realoca-los na memória. Nós dizemos que Core Data é um framework de persistência.

Você pode também criar o seu próprio framework a partir de uma classe que você criou. Basicamente, se você tem um conjunto de classes que são usadas por diversas aplicações, você irá torná-las disponíveis dentro de um framework.
(by Ademar Varela)