sexta-feira, 4 de fevereiro de 2011

O que é preciso para o iPad substituir o notebook

Cansado de carregar para todo lugar o notebook, principalmente em viagens de negócios? Imagine deixar a máquina em casa e efetuar todas as tarefas corporativas em um fino iPad. Sim, isso é possível. Mas é preciso planejamento, adquirir alguns componentes, utilizar serviços de cloud computing e aplicativos especiais.
Com os aplicativos móveis mais sofisticados e os serviços em nuvem deixando o armazenamento e acesso aos dados mais simples, necessitando somente do acesso à Internet, o iPad passa a ser um forte concorrente do laptop. De fato, o enorme crescimento do tablet nas empresas faz algumas pessoas imaginarem se o dispositivo da Apple pode ou não substituir os laptops no futuro.
Vale destacar que determinadas pessoas ainda precisam de softwares pesados rodando em laptops poderosíssimos, livres dos limites da computação em nuvem. Sendo assim, caso seja um usuário que trabalha com esses programas que processam grandes quantidades de informações ou exigem trocas imensas de dados em cache, este artigo não será de grande ajuda.
Porém, para o resto dos mortais, é possível trabalhar com o iPad, pelo menos por um bom tempo. Há maneiras de contornar as limitações do tablet e “trabalhar com o conceito de que qualquer coisa que queira fazer, consegue efetuá-la no iPad”, como disse Andy Ihnatko, colunista de tecnologia do Chicago Sun-Times e escritor. Muitas das dicas aqui presentes foram conselhos dados por ele durante a Macworld 2011, evento realizado nos Estados Unidos no final de janeiro.

1. Escolha o Hardware correto
Para iniciantes, é preciso um bom case para que o iPad suporte diversas condições de trabalho. A capa deve ser fina e leve para manter o perfil mais delicado do tablet, caso contrário, leve o notebook, certo?
É muito importante que o case forneça algum tipo de apoio ao iPad para que ele tenha diversos ângulos. Muitas capas possuem somente um único ângulo, o que pode se tornar um problema quando a iluminação da sala ofusca a tela do aparelho e não é possível ajustar para outra posição. Isso também não funciona muito bem, por exemplo, em um avião, quando a pessoa sentada à frente deita a cadeira para trás. Um produto recomendado é o foldIO  da Scosche (50 dólares), que possui muitas posições disponíveis, incluindo uma que melhora a digitação no teclado virtual.

Isso nos leva a outro item de hardware: um teclado físico, visto que muitas pessoas digitam mais rápido nesse tipo de acessório  do que na versão virtual. Caso precise editar ou criar conteúdo na estrada – mais do que um e-mail ou uma anotação – um teclado físico é uma boa pedida.
Alguns cases possuem teclados integrados, mas geralmente são menores, para caber na largura do case. Não se sinta constrangido em adquirir um teclado Wireless da Apple (230 reais), que é do mesmo tamanho que o teclado do MacBook. O teclado sem fio da Apple, que funciona com duas pilhas AA, não é conectado ao iPad ou ao case, e pode ser ajustado de acordo com a distância e ângulo do tablet.

tecladowirelessapple.jpg
Teclado wireless da Apple, apesar do preço salgado, pode ser uma opção para fugir do teclado virtual

Contudo, o teclado wireless da Apple possui três pontos negativos. Primeiro, não é possível digitar com o teclado no colo, porque o usuário também estará segurando o iPad; nessa situação, é necessário utilizar o teclado virtual. Em seguida, o outro problema é que o teclado não vem com um case protetor para transporte.
Por fim, o botão para ligar o periférico com frequência é apertado acidentalmente quando é transportado em uma mochila ou pasta, e, com isso, envia um sinal para o iPad ligar. Não é nada interessante chegar ao destino e descobrir que o iPad está totalmente sem bateria. Para resolver esse problema, uma dica é desligar o Bluetooth do tablet durante o trajeto.
Outras opções de hardware dependem das necessidades de cada usuários: Apple Camera Connection Kit (109 reais)  para transferir imagens e gravações de voz e um Adaptador VGA para iPad (109 reais) para apresentações de vídeo.
Outra opção é o iPad Keyboard Dock. Ele é confortável, mas pesado (mais de 600 gramas). Reúne o teclado tradicional, com uma base de sincronização. Custa US$ 70.

2. Mova seus dados para o iPad e vice-versa
Uma das maiores reclamações sobre o iPad é o desafio de transferir informações de um PC para o dispositivo e vice-versa. O tablet não é um sistema de arquivos aberto; não é possível simplesmente copiar arquivos para ele, como é feito com um pendrive, por exemplo.
A maioria das pessoa acaba enviando os arquivos para si mesmas via e-mail, e abrindo os documentos com um aplicativo. Isso significa que é preciso saber quais arquivos estarão funcionando antes de colocar o pé na estrada, assim como se o iPad conseguirá abrir esses arquivos e trabalhar com eles. A transferência de documentos do PC pode ser feita também utilizando o iTunes.

O problema é que a falta de planejamento pode resultar na falta de alguns arquivos importantes, esquecidos no computador de casa. A melhor maneira de transferir as informações para dentro e fora do iPad é com serviços de armazenamento em nuvem, e um dos mais populares é o Dropbox. “O armazenamento em nuvem absolutamente transforma o iPad, encurtando as distâncias entre o desktop e o tablet”, afirma Ihnatko.

O Dropbox é basicamente uma pasta de arquivos gratuita na Internet, que aparece como um aplicativo no iPad e no computador. É possível acessar os arquivos de qualquer dispositivo que esteja com o Dropbox ativado; os documentos são sincronizados imediatamente para a mesma conta do serviço, além da possibilidade de permitir que outros usuários do serviço tenham acesso aos documentos.

ipad390b
Para usuários que dependem de programas mais pesados, o iPad não é uma opção

3. Conheça as limitações dos aplicativos corporativos
Enviar os arquivos para sua conta no Dropbox não é de utilidade nenhuma a não ser que haja um aplicativo no iPad capaz de abri-lo. O app deve também permitir que o usuário edite esses documentos. Uma opção é o QuickOffice Connect (15 dólares), que possibilita abrir e trabalhar com arquivos do Microsoft Word, planilhas do Excel e slides do PowerPoint. Esse aplicativo é integrado com vários serviços de armazenamento em nuvem, inclusive Dropbox.

Infelizmente, os apps para iPad são muito simplificados; a falta da riqueza dos softwares para desktop pode trazer problemas na estrada. O QuickOffice, por exemplo, não suporta o recurso de controle de alterações. Ao trabalhar nos arquivos de fato, alguns usuários podem ficar frustrados com a ausência de sobreposição de janelas no iPad. Ao trabalhar com slides ou um documento, algumas pessoas fazem pesquisas na Internet ao mesmo tempo, alternando entre o arquivo e o navegador. O tablet, contudo, exibe somente uma janela por vez.

Conclusão: o iPad funciona no trabalho?
Talvez o maior desafio enfrentado por aqueles que utilizam o iPad no trabalho é na hora de imprimir os documentos.  A Apple recentemente adicionou o AirPrint, que permite imprimir via wireless desde fotos até e-mails, tudo a partir do iPad – contudo, está disponível somente para um modelo de impressora da HP. Grande parte das empresas não possui necessariamente esse equipamento ainda, logo, caso precise imprimir uma grande quantidade de material, leve o laptop.

É importante entender as limitações do iPad e o planejamento necessário para usá-lo em viagens de trabalho antes de propriamente aposentar o notebook. Usuários que dependem muito do computador, de programas e aplicações complexas ou imprimem documentos com muita frequência não se aplicam a esse grupo.
Por outro lado, o hardware da Apple e os serviços de armazenagem em nuvem fazem do iPad uma alternativa sólida para o notebook de muitas pessoas. Principalmente em viagem. Ele está sempre pronto para o uso. Basta retirá-lo da pasta e começar a trabalhar em um instante, graças a sua característica de estar sempre ligado. E, mais importante, evita "sessões de massagem", pois não é preciso carregar um equipamento pesado nas costas o dia inteiro.

Maioria das empresas pretende comprar iPad.


Pesquisa revela que 56% das empresas vai comprar iPads.

Apple oferece recursos para facilitar a adoção do iPad em empresas

Prevendo que muitos dos primeiros compradores do iPad considerarão a possibilidade de usá-lo para fins profissionais, a Apple incluiu uma série de recursos empresariais em seu site, para facilitar o uso do seu novo produto em empresas. A documentação digital disponível inclui desde cenários de distribuição dele entre funcionários até uma visão geral dos seus recursos de segurança e proteção de dados.
É importante ressaltar aqui que o iPad oferece as mesmas facilidades de uso e configuração de recursos corporativos existentes em iPhones, integrada aos seus principais aplicativos nativos de comunicações e internet. Se a sua empresa possui um servidor baseado no Microsoft Exchange 2003 ou 2007, o aparelho pode obter a partir dele emails, contatos e compromissos assim que são oferecidos para você.
A Apple também adaptou diversas ferramentas para facilitar a configuração de lotes de iPads em ambientes corporativos com alta segurança, suportando os mais avançados (e seguros) padrões de rede e o recursos Remote Wipe, que possibilita a destruição remota de dados de um dispositivo em caso de perda ou roubo. Como novidade para a tablet, porém, estão os diversos aplicativos capazes de tirar proveito da sua interface touchscreen de alta resolução, como a suíte de produtividade iWork, por exemplo.
Para ler mais sobre os recursos do iPad para empresas, basta visitar a página empresarial do produto no site da Apple.

Conquistando clientes com o Facebook


Conheça nosso grupo no Facebook
Algumas empresas ainda consideram o Facebook uma ameaça a sua produtividade, outras o julgam inútil, chegam a desencorajar o seu uso e até proibem seus funcionários de terem acesso a ele durante o expediente.
Mas a grande realidade é que o Facebook se tornou uma ferramenta de comunicação em escala global para empresas que querem estabelecer contato com novos e velhos clientes, seja para fazer uma nova venda ou fazer uma venda adicional para um cliente já fidelizado.
Lembre-se de pautar seu plano de ação em interagir continuamente com os clientes, seria ruim para sua imagem descontinuar sua página no Facebook (vai dar a impressão ausência de competência) isto prejudica a sua credibilidade, então antes de começar defina “quem, onde, quando” isso vai consumir capital humano, físico e temporal. Defina suas metas em números de fãs, visitas, clicks e finalizações de venda.
Para isto tenha uma ferramenta virtual para finalizar sua venda, agendar sua visita ou demonstração como um site ou um blog.
Antes de prosseguir é importante esclarecer que, como o tema é rico e exige explicação clara, vou publicar uma série de artigos sobre ele, e assim tentar elucidar a maior parte das nuances que o título sugere, este é o primeiro de outros que virão, conto com a curiosidade e comentários de todos.
Dividi a tarefa de conquistar clientes com o Facebook em 3 frentes de esforços:
O número total de fãs é a métrica mais expressiva no Facebook. Como resultado, o aumento gradual em sua base de fãs é um dos principais meios de mostrar seu sucesso do marketing social.
Por este motivo:
1- Coloque seus esforços em aumentar o seu número de fãs:
- Planeje ações que beneficiem os usuários que são fãs da sua página, e divulgue. A chave é um forte apelo à ação, que irá estimular os visitantes que o fazem pela primeira vez, a terem acesso ao conteúdo reservado para os fãs. Organize sorteios, descontos e o envio de brindes gratuítos se estiver ao seu alcance (financeiramente falando), qualquer item que tenha valor (ebooks, publicações restritas, ingressos de eventos, etc.), use a criatividade e faça parcerias com empresas que oferecem produtos que completem os seus, mas condicione tudo ao cliente “curtir a sua página” lembre-se o objetivo principal é aumentar a sua audiência (o número de fãs).
- Use os plugins do Facebook para incentivar conexões em todos os conteúdos publicados no site ou blog de sua empresa, inclua em suas mensagens, no seu status, nos artigos, um lembrete para instruir seus fãs a clicarem em “curtir isso” no Facebook.
Assim será mais provável ele aparecer em “feeds de notícias e dos amigos” dos usuários que gostarem do conteúdo, levando as pessoas a descobrir mais sobre sua página.
- Peça para seus amigos e camaradas que apoiam o seu negócio? ajudem em algumas discussões, a divulgar seu conteúdo,você pode recompensá-los com publicidade ou retribuir o favor. É mais fácil pedir a um amigo do que à um estranho. Certifique-se que o conteúdo é interessante o suficiente para levá-los a falar. use sua conta pessoal e página estrategicamente, assim você
verá uma enorme vantagem em ter novos amigos para ser seus fãs, enquanto eles estão começando a conhecê-lo melhor.
- Se você já construiu uma rede de contatos e tem outra conta no Twitter, Orkut ou linkedIn isto pode ser um ponto positivo para seus planos, utilize seus contatos em outras redes sociais para promover sua página do Facebook. Seus seguidores podem transmitir a sua mensagem em ambas as plataformas sociais, chegando a um maior público sobre o seu negócio.
- Use um aplicativo chamado Facebook Questions, que permite a todos, como Fan Pages, a responder e fazer perguntas para toda a comunidade da rede. Do mesmo modo que o LinkedIn Answers, o Facebook Questions é um excelente lugar para se estabelecer como um líder em conhecimento no setor, uma oportunidade de consolidar-se como referência em um tema, que pode ser o setor em que a sua empresa atua, além de ser uma maneira gratuita para conhecer melhor os seus fãs e potenciais clientes no Facebook.
- Use o Diretório Facebook e Facebook Search para localizar outras páginas no seu nicho e observe as discussões públicas com base em termos de pesquisa relacionadas ao seu negócio. Crie ou participe de um grupo, fórum ou site, de assunto correlato ao seu campo de atuação, e então sempre use uma assinatura com um link da sua página no Facebook. Enquanto sua participação na comunidade nicho é apreciado, há uma maior chance dos outros membros visitarem e se tornarem fãs da sua página. Ninguém está preocupado com a sua informação a menos que você se destaque da multidão.

Considere os caminhos acima como opções para formar o seu próprio hall de ações, o importante é aparecer e colocar o seu nome ou marca no mapa, chega de anonimato para as suas idéias, conquiste seu lugar ao sol, espero ter colaborado na reflexão do assunto e que isto seja para você um norte, aguarde pelos próximos posts que darão continuidade nas duas frentes de esforços para realizar a  tarefa de conquistar clientes com o Facebook.

quinta-feira, 13 de janeiro de 2011

5 dicas para usar melhor o Facebook

Comentar as virtudes e impressionantes marcas do Facebook já é lugar comum. A rede social criada por Mark Zuckerberg é a maior do mundo, se aproxima dos 600 milhões de membros, e não para de crescer e ser aperfeiçoada. Novos recursos são criados e disponibilizados com boa frequência, o que mantém o sistema adaptado às mudanças da Web e os usuários, interessados e usando a ferramenta.
Aliás, é a grande quantidade de ferramentas que, em parte, afasta algumas ovelhas negras do Facebook. Comparado com a simplicidade do orkut, muita gente que ainda está na rede da Google levanta a bandeira da dificuldade para justificar sua decisão. Mas… Será que é tão complicado assim?
O Facebook “fala” português há um bom tempo, mas mesmo no idioma nativo, é difícil perceber alguns nuances, recursos que fazem a diferença no dia-a-dia. O que propomos, aqui, não é um “guia definitivo do Facebook”; longe disso, é apenas uma coletânea de dicas não tão evidentes quanto subir uma foto ou atualizar seu status para marinheiros de primeira viagem. Espero que seja útil!

Esconda atualizações de alguns contatos

No menu Conta » Configurações de privacidade, o Facebook oferece uma ampla gama de configurações padrão para diversas atividades permitidas na rede e informações do seu perfil. A primeira delas é “Seu status, fotos e publicações”, em resumo, o que submetemos ao site através do próprio — mensagens, fotos, etc.
Apesar dessa configuração universal, cada atualização pode ser configurada de forma independente. Quando estiver escrevendo uma atualização de status, clique no cadeado que aparece próximo ao botão “Compartilhar” para expandir a caixa de seleção. Existem alguns critérios pré-determinados (“Todos”, “Amigos de amigos” e “Somente amigos”), e um quarto item “Personalizar”. Esse é o que lhe dá mais flexibilidade, possibilitando incluir pessoas e/ou listas tanto num grupo de quem pode ver a atualização, quanto no dos que não podem.
Privacidade personalizada, no Facebook.
Privacidade personalizada, no Facebook.

Fotos em alta resolução

Recurso relativamente novo e, sinceramente, não sei se já disponível em todas as contas. Faz algum tempo que o Facebook permite que as fotos enviadas para lá o sejam em sua resolução nativa, sem redimensionamento. Essa opção não é padrão, logo, é preciso prestar atenção quando estiver subindo uma ou algumas foto(s).
Após selecionar as imagens e clicar no botão “OK”, o upload começa. Nesse momento, é preciso mudar um item na tela de progresso. O campo “Qualidade” fica, por padrão, em… “Padrão” (rá!). Basta um clique em “Alta resolução” para que o envio recomece, dessa vez das imagens em tamanho grandão.
Fotos em alta resolução, no Facebook.
Fotos em alta resolução, no Facebook.
Duas observações válidas: existe limite de tamanho por foto (5 MB cada), e as imagens enviadas assim podem ser baixadas na resolução real por todos aqueles que tiverem permissão de vê-las.

Oculte atualizações de aplicativos

Passe essa dica para aquele amigo pentelho que adora reclamar dos seus posts do FarmVille.
O Facebook permite que atualizações de determinado aplicativo sejam ocultadas da sua timeline. Não só, também permite que atualizações de um contato ou página também o sejam. Tudo acontece ao se clicar no “X”, por padrão oculto, de uma atualização. Ao passar o cursor sobre a atualização, na timeline, o “X” fica visível; clique nele, e algumas opções interessantes surgem.
Ocultar aplicativos no Facebook.
Ocultar aplicativos no Facebook.
A primeira oculta apenas aquela atualização, deixando tanto aplicativo, quanto contato/página com sinal verde para continuar aparecendo. A segunda opção, no nosso exemplo acima, se clicada ocultaria todos os posts da página do Meio Bit (não façam isso, é só um exemplo fictício*). E a terceira, mais importante aqui, oculta todas as atualizações do NetworkedBlogs, o aplicativo social que usamos para publicar os posts que saem aqui lá no Facebook. Fosse o FarmVille no lugar do NetworkedBlogs, bastaria clicar nessa opção para eliminá-lo da sua timeline.
Faz algum tempo, publicamos um tutorial mais completo sobre essa dica. O layout do Facebook mudou um pouco, mas a essência do procedimento continua a mesma.
*: eu ia usar algum joguinho social para ilustrar, mas já bloqueei todos e deu preguiça de desbloquear, achar algum contato que o use, depois encontrar uma atualização na timeline…

Revogue permissões de aplicativos

Instalar aplicativos sociais no Facebook é quase tão viciante quanto instalar apps em smartphones. Resultado: dezenas deles, muitos que sequer usamos, com acesso aos nossos dados, gostos e interesses. Vamos dar um basta nisso!
Vá ao menu Conta » Configurações de privacidade, e na tela que surgir, no canto inferior esquerdo, clique em “Editar suas configurações”, abaixo do título “Aplicativos e sites”. Outra tela surgirá. O primeiro item dela é “Aplicativos que você usa”, com um botão “Editar configurações” do outro lado. Clique nele.
Permissões de aplicativos, no Facebook.
Permissões de aplicativos, no Facebook. (Clique para ampliar)
Nessa tela ficam listados todos os aplicativos e jogos que você tem instalados em seu perfil. Para removê-los, basta clicar no “X” na linha do escolhido, simples assim. O mais bacana é que alguns itens, como a capacidade de publicar conteúdo no seu mural automaticamente, podem ser revogados individualmente. No three words, por exemplo, dá para eu manter o aplicativo instalado, mas impedi-lo de publicar no meu mural. Basta, nessa opção, clicar no link “Remover” (vide imagem acima).

Baixe seu perfil inteiro

Após a saraivada de críticas referentes à falta de privacidade, o Facebook implementou uma série de mudanças para atender aos anseios dos usuários. Opções de privacidade mais refinadas e claras, e portabilidade do perfil.
Backup do perfil, no Facebook.
Backup do perfil, no Facebook.
Em Conta » Configurações da conta, na aba “Configurações”, existe uma opção chamada “Download de suas informações”, com um link “saiba mais” ao lado. Clique nele.
Aparecerá uma tela que informa sobre o backup e da presença de dados sensíveis nele. Clique em “Baixar” e… espere. O download não é imediato, o Facebook precisar preparar o arquivo, o que, dependendo da quantidade de informações, fotos e vídeos hospedada, pode levar algum tempo. Quando estiver tudo ok, um email é disparado, contendo o link para download.
O arquivo é um *.zip com tudo o que você já fez no Facebook. Tem até um HTML simples, para mostrar suas atualizações e tal.
Para um tutorial mais detalhado, siga o link.

Finalizando…

O Facebook oferece ferramentas fantásticas de privacidade, configurações relativamente complexas que, se por um lado dão mais flexibilidade para o usuário, por outro pode acabar assustando novatos. As dicas mostradas aqui são bem simples, mas ajudam um bocado quem (ainda) não tem muita intimidade com o sistema. Conhece alguma outra que faltou comentar? Diga aí, nos comentários.


fonte: http://meiobit.com

Primeiros passos para se tornar um desenvolvedor de aplicativos para iPhone e iPad

Você sonha em se tornar um desenvolvedor de aplicativos para iOS, mas não sabe por onde começar? Então veja aqui os primeiros passos básicos para começar a criar seus próprios programas e, quem sabe, ficar famoso com isso. E o melhor: qualquer um pode se tornar um grande desenvolvedor para o iPhone. :)
Introdução
Ninguém duvida que a App Store revolucionou a telefonia mundial, pois trouxe para o mundo dos celulares a dinâmica e variedade de instalação de aplicativos que sempre existiu nos computadores, aumentando exponencialmente as capacidades do aparelho. Já haviam maneiras de instalar aplicativos menos elaborados em smartphones antes, via download em sites ou envio por SMS, mas a facilidade de ter o que se quer com apenas um clique (ou toque) acabou sendo copiada por diversos fabricantes e até mesmo reutilizada pela própria Apple, na sua versão para Mac.
Se do lado do consumidor a loja foi um sucesso, do lado de quem faz aplicativos foi aberto um campo imenso, pois possibilitou que qualquer um (como eu e você) pudesse criar e vender aplicativos para o mundo inteiro, coisa que antigamente só era viável a grandes empresas multinacionais. A Apple não só disponibilizou toda a estrutura de servidores para armazenar e distribuir os apps (com uma loja centralizada), mas também criou um kit de desenvolvimento (SDK) que qualquer um pode baixar e criar aplicativos. Tudo o que você precisa é de equipamento compatível e muito, muito estudo.

1º Passo – Comprar um Mac
Muita gente esbarra nesse primeiro passo, pois para desenvolver para o iOS (sistema operativo do iPhone, iPad, iPod touch e AppleTV) é obrigatório possuir um computador com Mac OS X. Há quem faça a gambiarra de tentar instalar o sistema em PCs Intel (os chamados hackintoshes), mas o melhor mesmo é investir em um bom Mac, principalmente agora que eles baixaram de preço no Brasil. Além de ser a ferramenta perfeita, você verá que ele mudará sua experiência com computadores para o resto de sua vida. :)
O Mac mais barato hoje no nosso país é o Mac mini (link) e custa R$1.999. Se você é estudante ou trabalha na rede de ensino, pode usar a área educacional da Apple Store Online e pagar ainda menos: R$1.849 (link). Ele vem só com a CPU central, ideal se você já tiver monitor, teclado e mouse do seu PC anterior.
Mas se você estiver querendo investir em algo um pouco mais consistente, que o ajude também em outros aspectos de sua vida (e não só no desenvolvimento de apps), o melhor conselho é o de investir em um MacBook (Air ou Pro) ou até mesmo em um iMac, que na semana passada ganhou um descontão de R$1.000. Lembrando que na área educacional os preços são ainda menores. :)

2º Passo – Inscrever-se no programa gratuito da Apple
Enquanto você decide se compra um Mac ou uma bicicleta, você já pode começar a baixar o material necessário para iniciar o desenvolvimento, se inscrevendo gratuitamente como Apple Developer. Esse passo não custa nada e você tem acesso ao último SDK, exemplo de códigos, vídeos de introdução e um vasto material em PDF para aprender os primeiros passos de programação. É material suficiente para dias e dias de aprendizado, sem gastar nenhum tostão. Absolutamente tudo é em inglês, o que torna obrigatório o conhecimento básico da língua.
Além da versão gratuita, há o Apple Developers Program, que é pago (US$99 ou 74€ por ano) e permite alguns benefícios a mais, como instalar e rodar os códigos no seu aparelho (com a versão grátis você só pode testá-los no simulador do Mac), tem acesso à versões beta do iOS e também tem direito a publicar seu aplicativo na App Store. Mas isso você pode fazer depois que tiver uma boa base da teoria. ;)

3º Passo – Estudar, estudar, estudar
As ferramentas que a Apple proporciona são uma verdadeira mão na roda, facilitando muito o desenvolvimento de aplicativos. Mas não bastam para começar a criar programas para o iPhone. É preciso muito estudo da linguagem básica de programação, chamada Objective-C, que não é algo que se aprenda em duas semanas. Por isso, é preciso muito estudo e dedicação.
Além do material em PDF disponibilizado pela Apple, há também alguns volumes convertidos em formato iBook, que podem ser baixados direto na App Store para serem lidos no iPhone, iPad ou iPod touch.
Se você não se contentar com o material gratuito (que é extenso) e preferir livros comerciais dedicados a isso, com uma linguagem mais abordável, é possível comprar no Brasil obras importadas (veja a lista de algumas sugestões aqui). Infelizmente não há obras de destaque em português para aprender programação para iPhone.

4º Passo – Criar seu primeiro aplicativo
Nesse ponto, você já tem todas as condições de começar a desenvolver seu primeiro aplicativo. Mesmo que você ainda não tenha um registro pago da Apple, poderá criar e testar apps no simulador do iPhone (ou iPad) no Mac.
A primeira coisa é saber o que você quer fazer. É normal os primeiros resultados serem apps básicas e com função duvidosa, mas que são fundamentais para a evolução do aprendizado. Mas não faça como alguns devs, que se empolgam com o primeiro aplicativo e o publicam na App Store… Depois de ter experiência suficiente, tente pensar em algo útil que realmente vá servir para os usuários. De preferência, que ainda não exista na loja.
Depois que você já pegou a prática e até mesmo já desenvolveu um ou mais aplicativos funcionais, aí sim poderá partir para o passo final.

5º Passo – Inscrever-se como desenvolvedor da Apple
Você agora já tem tudo para começar ganhar fama (e quem sabe, dinheiro) com suas criações. É o momento de se inscrever oficialmente como um desenvolvedor de iOS e pagar a taxa necessária, que poderá ser recuperada facilmente se seu aplicativo fizer sucesso.
Há três tipos de contas: a Individual (só você tem acesso à conta) e a Company (você pode ter uma equipe que também terá acesso à conta), ambas custando US99; ou então a Enterprise (permite que se crie aplicativos internos para empresas, sem passar pela App Store) que custa US$299.
A conta paga também dá acesso aos fóruns técnicos de desenvolvedores, onde são debatidas questões e problemas relativos ao iOS. Em época de versões beta, há também uma área confidencial com várias novidades sobre as futuros sistemas.
—————————————–
Esses são os passos básicos para todos que quiserem começar a investir na programação para iPhones e iPads. As possibilidades são enormes e a cada ano o mercado cresce cada vez mais. Se você gosta disso, não deixe para amanhã o que você pode começar hoje.
;)       



quinta-feira, 16 de dezembro de 2010

OBJECTIVE-C


Objc

Olá pessoal. Percebendo a necessidade de algumas pessoas em entender alguns conceitos do Objective-C, estou disponibilizando este tutorial feito por Alberto Martins que encontrei na net. Divirtam-se…


Antes de começar este tutorial gostaria de responder a uma pegunta do Arthur Lopes:
O asterisco no Objective-C tem uma função especial. Ele define a variável como um ponteiro. Os ponteiros são concebidos para armazenar endereços de memória. Com um ponteiro você pode indiretamente manipular os dados armazenados em outras variáveis. Ou seja você cria aquela variável com a referência para outro objeto. Enquanto sem asterisco você cria variáveis por valor.


Ex:
NSArray foo;
Você não deve dizer que foo é um NSArray. Ainda. Ele está apenas pronto para apontar para um (e nesse momento está apontando para NULL “nulo”), até você fazer isto:
foo = new NSArray(…)
Agora foo está apontando para um objeto NSArray.
Você pode ter ponteiros para tipos básicos:
int i = 5; // i é um tipo integer básico
int* x; // x é um PONTEIRO para um integer
x = &i; // x agora aponta para o mesmo espaço de memória que “i” está.
Agora nós podemos referenciar o ponteiro “x” e usar ele para mudar o valor de “i”.
*x = 7; // atribui o valor da variável onde o ponteiro está apontando, para 7
Espero que ajude. Qualquer dúvida procure por “Tipo valor, Tipo referência” no google que vai ter bastante material.
Vamos ao tuto..


Objective-C

Introdução

    Este breve tutorial foi criado para suprir a falta de informação sobre a linguagem Objective-C no Brasil, e com isso incentivar sua popularização. Para aqueles que já programam em C, a adaptação ao paradigma de orientação à objetos por meio da linguagem Objective-C ocorre de forma simples e natural, visto que sintaticamente apenas poucas construções são adicionadas. Observamos que no momento este não é um tutorial completo, ou seja, conhecer um pouco de C será não apenas de grande valia, como praticamente necessário para construir programas mais complexos. Devemos salientar também que por enquanto não iremos utilizar o framework “Foundation”, nem qualquer outro, nos mantendo nos rudimentos da linguagem.A linguagem Objective-C foi criada por Brad Cox e sua empresa, a StepStone Corporation, no início da década de 80. Em 88 ela foi licenciada pela NeXT, tornando-se a linguagem de desenvolvimento do NeXTstep. O suporte do GNU/gcc foi acrescentado em 1992. Em 1994 as empresas NeXT Computer e Sun Microsystems criaram uma especificação do NeXTstep conhecida como OpenStep. A implementação da Free Software Foundation da especificação OpenStep é denominada GNUStep. Atualmente Objective-C é utilizada como a principal linguagem de programação do MacOS X, que é baseado no NeXTstep. A versão da Apple do ambiente NeXTStep/GNUStep com adições é denominada Cocoa.

Características

    Objective-C é apenas um conjunto de adições à linguagem C. Ela dá ao C suporte à construções orientadas a objetos como as da Smalltalk. 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. E tudo isso com uma sintaxe de mensagem simples e elegante: olhe os títulos destas subseções e você já saberá como conversar com os objetos! 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.

Programação Orientada à Objetos

    O conceito de orientação à objetos é na verdade algo muito simples. Diariamente utilizamos objetos para realizar tarefas, e programar OO não é nada alem disso.Programadores mais antigos estão acostumados a pensar a programação separando dados e fuções que seriam aplicadas neles. A própria forma de pensar era diferente; para alguns problemas era óbvia a necessidade de uma integração maior entre os dados e as funções, e isto foi o aparecimento do objeto. Tomando um exemplo simples: supomos que você possua uma televisão. A não ser que você seja um milhonário ou um professor pardal, essa televisão deve ter saído de uma linha de montagem, sendo assim igual a muitos outros aparelhos do mesmo modelo. Entretanto essa é a sua televisão, e ela possui um número de identificação (ou número serial) único. No exemplo acima e agora traduzindo para o conceito de OO, sua televisão é uma instância da classe televisão. E cada vez que uma nova televisão é produzido, uma nova instância da classe televisão é criada. Existem também certas coisas que você pode fazer com a sua televisão, como ligar e desligar, modificar o volume e configurações de cor, ligar o PIP, etc. As funções realizadas com a televisão, em OO, denominam-se métodos. Em alguns casos os métodos são aplicados na instância da classe, em outros eles são aplicados na classe em si. Por exemplo, ligar a televisão seria um método de instância e descobrir quantos televisores foram produzidos por um determinado fabricante seria um método de classe. Quando vamos comprar um televisor em alguma loja, costumamos encontrá-los agrupados junto com tocadores de DVD, por exemplo. Bem, isso não se dá por acaso: televisores, assim como tocadores de DVD são eletrônicos, e com isso possuem características e funções em comum. Podemos então pensar nestes dois aparelhos como sendo instâncias de uma classe denominada eletrônicos. Entretanto não queremos instâncias da classe eletrônicos, e sim das classes televisão e toca-DVD, logo dizemos que as classes televisão e toca-DVD são subclasses (ou classes filhas) da superclasse (ou classe pai) eletrônicos. Esse é um conceito muito importante em orientação à objetos, e é denominado herança: quando criamos uma subclasse ela herda as características e métodos de sua superclasse. Nesse caso podemos dizer que nunca iremos criar uma instância da classe eletrônicos, logo esta é denominada uma classe abstrata, ou seja, uma classe que serve apenas para ser superclasse de outras classes.

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 (http://www.mingw.org). Para escrever os códigos, qualquer editor de texto puro, como o Notepad, ou algum ambiente de programação devem servir. 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
    Os arquivos de código da linguagem Objective-C possuem sufixo “.m”, enquanto que os cabeçários possuem, como em C, sufixo “.h”. Por algum motivo alguem na FSF não parece gostar muito de uma diretriz de pré-processamento (mais sobre isso depois) do Objetive-C 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.

Meu primeiro programa: classes, objetos e métodos

    Nesta seção vamos implementar um programa básico, já utilizando conceitos de programação orientada à objetos.Os programas em Objective-C possuem quatro partes bem definidas . A primeira define diretrizes para o pré-processador, a segunda define as classes e métodos, a terceira a implementa os métodos e a quarta é o programa em si. Mais tarde mostraremos como cada parte pode ficar armazenada em um arquivo separado, facilitando a organização do programa em si. Para facilitar, podemos iniciar lendo o programa a seguir que define nossa primeira classe, o Gato. Esse dócil animal mia, logo vamos implementar uma classe “Gato” que possui um método chamado “miau” que serve apenas para escrever “Miaau!” na tela. Veja o código: meuGato.m
    //
    // Programa Gato
    // 
    // por Alberto GOK Martins
    // para o tutorial de ObjC
    //
    
    // aqui comecam as diretrizes do pre-processador
    #import 
    #import 
    
    // aqui comeca a definicao das interfaces
    @interface Gato: Object
    
    -(void) miau;
    
    @end
    
    // aqui comecam as implementacoes dos metodos
    @implementation Gato
    
    -(void) miau
    {
            printf("Miaau!\n");
    }
    
    @end
    
    // aqui comeca o programa
    int main( int argc, const char *argv[] )
    {
            Gato *meuGato;
    
            meuGato = [Gato alloc];
            meuGato = [meuGato init];
    
            [meuGato miau];
    
            [meuGato free];
    
            return 0;
    }
    Todas as linhas que iniciam por “//” são linhas de comentários. Estas são ignoradas, logo é permitido escrever qualquer coisa após as duas barras. Comentários são utilizados para documentar um programa, facilitando sua compreensão. Outra forma de inserir comentários em programas Objective-C é utilizar os caracteres “/*” no início do comentário e “*/” no final; desta forma pode-se criar blocos de comentário com muitas linhas, sem que seja necessário escrever “//” a cada linha nova. As linhas iniciadas por “#” são diretrizes de pré-processamento. No programa acima utilizamos “#import <…>”, que diz para o compilador localizar, processar e importar informações dos arquivos “stdio.h” e “objc/Object.h”, ambos arquivos do sistema. Estes arquivos contém informações sobre a rotina “printf” e a classe “Object”, que foram utilizadas no nosso programa. A segunda parte do arquivo consiste na definição das Classes e de suas interfaces. Quando nós definimos uma nova classe é necessário dizer ao compilador algumas coisas. A primeira delas é falar de onde a classe vem, ou seja quem é a sua superclasse. Utilizamos para isso a seção “@interface”, cujo formato geral é:
    @interface NovaClasse: SuperClasse
    {
            Declaração_de_variáveis;
    }
    
    Declaração_de_métodos;
    
    @end
    No nosso programa definimos a classe “Gato”, que por enquanto não possui variáveis e apenas um método, o “miau”. Esse é um método da instância da classe “Gato” pois sua declaração é iniciada com o símbolo “-”. Poderíamos também criar um método da própria classe “Gato” utilizando o símbolo “+” para, por exemplo, contar o número de gatos que foram criados no programa. Após o sinal “-” temos a declaração entre parênteses do que o método irá retornar; no caso, “void”, indica que nada será retornado. Finalmente temos o nome do método. Mais adiante forneceremos o formato geral de declaração de métodos. A terceira parte do arquivo é a implementação dos métodos da classe. Ela define os métodos, ou seja contém seus códigos, declarados na parte “@interface”. O formato é:
    @interface NovaClasse 
    
    Definição_de_métodos;
    
    @end
    A definição de um método nada mais é do que sua declaração sem o caractere “;” acompanhada por seu código, que é colocado entre chaves “{” e “}”. No nosso programa, o método “miau” tem o código definido por uma instrução da biblioteca “stdio.h” chamada “printf”, que serve para mostrar caracteres na tela. A quarta e última parte do arquivo, é o programa em si. Esta parte contem a rotina denominada “main” que indica precisamente onde o programa deve iniciar sua execução. Ela inicia com a palavra “int”, especificando que “main” deve retornar um valor inteiro ao sistema quando terminar sua execução. As palavras que aparecem entre parêntesis “()” servem para lidar com argumentos passados pela linha de comando. A primeira linha da rotina “main” define uma variável chamada “meuGato”, dizendo que “meuGato” é um objeto que guardará valores da classe “Gato”. O asterísco diz que “meuGato” é um ponteiro para um “Gato”. Na segunda linha alocamos espaço na memória para o “meuGato”, e na terceira inicializamos as variáveis que podem estar presentes dentro do “meuGato”. Observe que na segunda linha passamos uma mensagem para a classe “Gato”, enquanto que na terceira a mensagem vai para a instância “meuGato”. Os métodos “alloc” e “init” não foram escritos por você, entretanto podemos utilizá-los pois foram definidos para a classe “Object”, que é a superclasse de “Gato”. Na quarta linha passamos uma mensagem para o objeto “meuGato”, dizendo para ele miar, ou seja, executar o método “miau” que implementamos. Na quinta linha passamos uma mensagem para “meuGato” dizendo que ele não será mais necessário, e que podemos liberar a memória que foi reservada à ele. Na sexta linha especificamos o valor que o programa deve retornar ao sistema; no caso 0, indicando que tudo ocorreu bem. Vamos finalmente compilar e executar o nosso programa. Para gerar o executável deve-se utilizar um compilador, no caso o gcc, e como visto anteriormente sua chamada (desta vez já com os nomes dos arquivos corretos) é:
    gcc meuGato.m -o meuGato -l objc
    Executando o arquivo “meuGato” deve-se obter a seguinte saída:
    Miaau!
    Um gato mais real… Vejamos agora um programa um gato um pouco mais elaborado. Todos devemos concordar que os gatos possuem certas características, como cor do pêlo, tamanho, peso, etc. Logo está faltando algo ao nosso gato. No programa a seguir implementamos o peso, bem como funções para defini-lo e obtê-lo; fica para você a tarefa de implementar as outras características.
    //
    // Programa Gato com caracteristica
    // 
    // por Alberto GOK Martins
    // para o tutorial de ObjC
    //
    
    // aqui comecam as diretrizes do pre-processador
    #import 
    #import 
    
    // aqui comeca a definicao das interfaces
    @interface Gato: Object
    {
            double peso;
    }
    
    -(void) miau;
    -(void) setPeso: (double) p;
    -(double) getPeso;
    
    @end
    
    // aqui comecam as implementacoes dos metodos
    @implementation Gato
    
    -(void) miau
    {
            printf("Miaau!\n");
    }
    
    -(void) setPeso: (double) p
    {
            peso=p;
    }
    
    -(double) getPeso
    {
            return peso;
    }
    
    @end
    
    // aqui comeca o programa
    int main( int argc, const char *argv[] )
    {
            Gato *meuGato;
            Gato *meuGato2;
    
            meuGato = [[Gato alloc] init];
            meuGato2 = [[Gato alloc] init];
    
            [meuGato setPeso: 4.2];
            [meuGato2 setPeso: 4.9];
            [meuGato miau];
            [meuGato2 miau];
            printf("meuGato pesa: %lf kg\n",[meuGato getPeso]);
            printf("meuGato2 pesa: %lf kg\n",[meuGato2 getPeso]);
    
            [meuGato free];
            [meuGato2 free];
    
            return 0;
    }
    A primeira adição no programa acima em relação ao original são as declarações dos métodos “setPeso” e “getPeso”. O primeiro recebe um valor real do tipo double, e o segundo retorna um valor tipo double. Estamos prontos para enunciar um formato geral de declaração de métodos:
    tipo_de_método(tipo_do_retorno_do_método) nome_do_método: (tipo_do_argumento) argumento;
    
    exemplo de método de classe:
    
            +(int) quantosGatos;
    
    exemplo de método de instância:
    
            -(void) setPeso: (double) p;
    Na parte de implementação temos as implementações de “setPeso” e “getPeso”. Na rotina “main” podemos notar que estamos criando dois gatos diferentes. O primeiro pesa 4.2kg, enquanto que o segundo 4.9kg. Devemos observar que, de modo distinto do programa original, estamos alocando memória e inicializando “meuGato” ao mesmo tempo. Essa é uma construção muito utilizada, junto com a alternativa seguinte:
    Gato *meuGato = [[Gato alloc] init];
    Podemos observar, ainda dentro da rotina “main”, como passar argumentos para o objeto “meuGato”, com o método setPeso. Ou também como obter o valor de uma característica do “meuGato”, com o método “getPeso” e imprimi-lo na tela com a função “printf”. A saída agora deve ser:
    Miaau!
    Miaau!
    meuGato pesa: 4.200000 kg
    meuGato2 pesa: 4.900000 kg

Mais sobre classes, objetos, métodos

    Na seção anterior vimos como passar um argumento para um método. Entretanto muitas vezes é desejável poder passar mais do que um argumento por vez, por exemplo para definir a posição (x,y) de um ponto no R2. Felizmente existe um tipo de construção que nos permite fazê-lo:
    -(tipo) nome: (tipo) variável nome: (tipo) variável;
    
    exemplo, um método para definir as posições de um ponto no R2:
    
    -(void) setX: (double) x andY: (double) y;
    
    passando a mensagem:
    
    [Objeto setX: 1.511 andY: 2.332];
    Geralmente é interessante ter métodos para definir cada argumento separadamente, ainda que existam os métodos para definir múltiplos argumentos de uma só vez. Um método também pode retornar um objeto. Por exemplo, poderíamos implementar um método de instância na classe “Gato” que definisse uma reprodução sexuada. Para isso temos que ter duas instâncias da classe “Gato” allocadas e inicializadas; uma para receber a mensagem e outra para ser o objeto a ser recebido como argumento da mensagem. Devemos ter também um objeto do tipo “Gato”, que armazenará o gato filho. Acompanhe a definição do método “reproduzir”:
    
    -(Gato *) reproduzir: (Gato *) Gato2
    {
            // funcao para criar um gato filho com a media dos pesos dos pais
            // antes de algum protesto, nao estamos tentando ser biologicamente corretos!
    
            Gato *Gatinho=[[Gato alloc] init];
            double pesoGatinho;
    
            pesoGatinho = (peso+[Gato2 getPeso])/2;
    
            [Gatinho setPeso: pesoGatinho];
    
            return Gatinho;
    }
    
    
    int main( int argc, const char *argv[] )
    {
            Gato *meuGato = [[Gato alloc] init];
            Gato *meuGato2 = [[Gato alloc] init];
            Gato *meuGatoFilho;
    
            [meuGato setPeso: 4.2];
            [meuGato2 setPeso: 4.9];
            [meuGato miau];
            [meuGato2 miau];
    
            meuGatoFilho = [meuGato reproduzir: meuGato2];
            [meuGatoFilho miau];
    
            printf("meuGato pesa: %lf kg\n",[meuGato getPeso]);
            printf("meuGato2 pesa: %lf kg\n",[meuGato2 getPeso]);
            printf("meuGatoFilho pesa: %lf kg\n",[meuGatoFilho getPeso]);
    
            [meuGato free];
            [meuGato2 free];
            [meuGatoFilho free];
    
            return 0;
    }
    Em Objective-C você pode se referir ao próprio objeto que está recebendo a mensagem, usando para isso a palavra “self”. Isso tem muitas utilidades, por exemplo para executar um método que precise executar outros métodos. Um exemplo não muito bom seria criar um método “comer” para o nosso gato que utilizasse o método “setPeso” (como [self setPeso: 5]) para engordá-lo; nesse caso poderíamos alterar o valor de “peso” sem recorrer ao “self”, porém caso tivéssemos algum método que realizasse muitas tarefas isso seria de grande utilidade. Agora uma dica de organização: tipicamente os programadores dividem suas classes em arquivos separados, nomeados “classe.h” e “classe.m”; o primeiro contém a seção “@interface” e o segundo “@implementation”. O arquivo de interface diz ao compilador como a sua classe é, enquanto que o arquivo de implementação contém o código verdadeiro da classe. Para realizar ligar os diversos arquivos devemos compilar o programa de uma forma especial, bem como nos utilizar da diretriz de pré-processamento “#import”. Observe a nova implementação do programa do gato: Gato.h
    //
    // Classe Gato - interface
    // 
    // por Alberto GOK Martins
    // para o tutorial de ObjC
    //
    
    #import 
    
    @interface Gato: Object
    {
            double peso;
    }
    
    -(void) miau;
    -(void) setPeso: (double) p;
    -(double) getPeso;
    -(Gato *) reproduzir: (Gato *) Gato2;
    
    @end
    Gato.m
    //
    // Classe Gato - implementacao
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import 
    #import "Gato.h"
    
    @implementation Gato
    
    -(void) miau
    {
            printf("Miaau!\n");
    }
    
    -(void) setPeso: (double) p
    {
            peso=p;
    }
    
    -(double) getPeso
    {
            return peso;
    }
    
    -(Gato *) reproduzir: (Gato *) Gato2
    {
            // funcao para criar um gato filho com a media dos pesos dos pais
            // antes de algum protesto, nao estamos tentando ser biologicamente corretos!
    
            Gato *Gatinho=[[Gato alloc] init];
            double pesoGatinho;
    
            pesoGatinho = (peso+[Gato2 getPeso])/2;
    
            [Gatinho setPeso: pesoGatinho];
    
            return Gatinho;
    }
    
    @end
    main.m
    //
    // Programa Gato com caracteristica
    // em multiplos arquivos
    //
    // por Alberto GOK Martins
    // para o tutorial de ObjC
    //
    
    #import 
    #import "Gato.h"
    
    int main( int argc, const char *argv[] )
    {
            Gato *meuGato = [[Gato alloc] init];
            Gato *meuGato2 = [[Gato alloc] init];
            Gato *meuGatoFilho;
    
            [meuGato setPeso: 4.2];
            [meuGato2 setPeso: 4.9];
            [meuGato miau];
            [meuGato2 miau];
    
            meuGatoFilho = [meuGato reproduzir: meuGato2];
            [meuGatoFilho miau];
    
            printf("meuGato pesa: %lf kg\n",[meuGato getPeso]);
            printf("meuGato2 pesa: %lf kg\n",[meuGato2 getPeso]);
            printf("meuGatoFilho pesa: %lf kg\n",[meuGatoFilho getPeso]);
    
            [meuGato free];
            [meuGato2 free];
            [meuGatoFilho free];
    
            return 0;
    }
    Preste especial atenção em como a diretiva “#import” é utilizada. O arquivo “Gato.h” precisa de informações sobre a classe “Object” que foi definida no arquivo “objc/Object.h”, e por isso devemos importá-lo em “Gato.h”. Já o arquivo “Gato.m” deve importar o arquivo de interface de sua classe, o “Gato.h”, bem como “stdio.h”, pois utiliza a função “printf”. Finalmente, o programa principal deve importar o arquivo “stdio.h” pela função “printf” e o arquivo “Gato.h” por instanciar objetos da classe “Gato”. Isso pode parecer um pouco confuso, mas na verdade o conceito é bastante simples: deve-se importar tudo o que for utilizar. Para compilar programas com multiplos arquivos no gcc, use a seguinte linha de comando:
    gcc arquivo1.m arquivo2.m main.m -o nome_do_programa -l objc
    no caso do nosso programa, use:
    gcc Gato.m main.m -o gato -l objc
    execute o programa e veja o resultado; ele deve ser similar ao apresentado abaixo:
    Miaau!
    Miaau!
    Miaau!
    meuGato pesa: 4.200000 kg
    meuGato2 pesa: 4.900000 kg
    meuGatoFilho pesa: 4.550000 kg

Herança

    Nesta seção falaremos sobre um dos conceitos mais importantes da programação orientada a objetos: a herança.Uma classe pode ter a si mesma como superclasse, e essa classe, que não possui superclasse é denominada classe raiz (ou root). A classe raiz pode ser programada por você mesmo, ou então como é mais comum, ser a classe Object, descrita em “objc/Object.h” ou a classe NSObject, descrita em “Foundation/NSObject.h”. A classe que foi criada neste tutorial é uma subclasse de Object, e com isso ela herda certos métodos, como free e outros que foram definidos para a classe Object. No entanto suponha que agora seja necessário criar um classe para cachorros. Bem, poderíamos criar uma subclasse de Object denominada Cachorro e implementar funções como setPeso e getPeso idênticas às da classe Gato. Uma solução melhor, seria criar uma subclasse de Object denominada Animal, e as classes Cachorro e Gato seriam subclasses da classe Animal, que por sua vez seria uma classe abstrata, visto que nunca iremos criar uma instância de Animal. No exemplo abaixo fizemos justamente isso. Animal.h
    //
    // Classe Abstrata Animal - interface
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import 
    
    @interface Animal : Object
    {
            double peso;
    }
    
    -(void) setPeso: (double) p;
    -(double) getPeso;
    
    @end
    Animal.m
    //
    // Classe Abstrata Animal - implementacao
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import "Animal.h"
    
    @implementation Animal
    
    -(void) setPeso: (double) p
    {
            peso=p;
    }
    
    -(double) getPeso
    {
            return peso;
    }
    
    @end
    Gato.h
    //
    // Classe Gato - interface
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import "Animal.h"
    
    // aqui comeca a definicao das interfaces
    @interface Gato: Animal
    
    -(void) miau;
    
    @end
    Gato.m
    //
    // Classe Gato - implementacao
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import "Gato.h"
    #import 
    
    // aqui comecam as implementacoes dos metodos
    @implementation Gato
    
    -(void) miau
    {
            printf("Miaau!\n");
    }
    
    @end
    Cachorro.h
    //
    // Classe Cachorro - interface
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import "Animal.h"
    
    // aqui comeca a definicao das interfaces
    @interface Cachorro: Animal
    
    -(void) auau;
    
    @end
    Cachorro.m
    //
    // Classe Cachorro - implementacao
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import "Cachorro.h"
    #import 
    
    // aqui comecam as implementacoes dos metodos
    @implementation Cachorro
    
    -(void) auau
    {
            printf("AuAu!\n");
    }
    
    @end
    main.m
    //
    // Programa de Animais com heranca
    //
    // por Alberto GOK Martins
    // para o tutorial de ObjC
    //
    
    #import 
    #import "Gato.h"
    #import "Cachorro.h"
    
    // aqui comeca o programa
    int main( int argc, const char *argv[] )
    {
            Gato *meuGato = [[Gato alloc] init];
            Gato *meuGato2 = [[Gato alloc] init];
            Cachorro *meuCachorro = [[Cachorro alloc] init];
            Cachorro *meuCachorro2 = [[Cachorro alloc] init];
    
            [meuGato setPeso: 4.2];
            [meuGato2 setPeso: 4.9];
            [meuGato miau];
            [meuGato2 miau];
    
            printf("meuGato pesa: %lf kg\n",[meuGato getPeso]);
            printf("meuGato2 pesa: %lf kg\n",[meuGato2 getPeso]);
    
            [meuCachorro setPeso: 10.2];
            [meuCachorro2 setPeso: 13.3];
            [meuCachorro auau];
            [meuCachorro2 auau];
    
            printf("meuCachorro pesa: %lf kg\n",[meuCachorro getPeso]);
            printf("meuCachorro2 pesa: %lf kg\n",[meuCachorro2 getPeso]);
    
            [meuCachorro free];
            [meuCachorro2 free];
            [meuGato free];
            [meuGato2 free];
    
            return 0;
    }
    Observe que no exemplo acima o método “reproduzir” nao existe mais. Optamos por não escrevê-lo, pois embora essa seja uma atividade comum para todos os animais a reprodução de animais diferentes deve gerar objetos de classes diferentes, e não um animal genérico da classe animal. Para contornar o problema você poderia escrever dois métodos, um para cada classe, denominados “reproduzir”, que embora partilhassem o mesmo nome seriam um pouco diferentes; afinal você não espera que um casal de cachorros gerem filhos gatos. Implementar um método comum exigirá um pouco mais de conhecimento, e isso será realizado na próxima seção, denominada Polimorfismo, Typing dinâmico e Binding dinâmico. Suponha agora que você queira que o método getPeso para um gato retorne o peso em gramas e não em quilos. Bem, você pode modificar a implementação original de getPeso na clase Animal, porém isso modificará também o retorno do getPeso para cachorros. Para solucionar este problema pode-se utilizar um conceito denominado overriding. Overriding é simplesmente sobrescrever um método. Quando você cria um método com o mesmo nome de um outro método que foi herdado pela classe, vale o método da classe e não o da superclasse. Logo, você poderia criar um método dentro da classe Gato com o mesmo nome (no caso, getPeso) e com isso apenas o método da classe Gato seria afetado, permitindo que a classe Cachorro continuasse retornando o peso em kilogramas. Experimente, realizando overriding de getPeso da classe Gato (não esqueça de modificar o printf da rotina main para escrever “g” ao invés de “kg”). Dentro de classes podemos também instanciar objetos. Por exemplo, suponhamos que todos os animais (logo todas as subclasses da classe Animal – novamente, não estamos tentando ser biologicamente corretos!) tenham olhos. Podemos então, definir uma classe denominada Olho, e instanciá-la dentro da classe Animal. Observe a interface e implementação da classe Olho, bem como os novos arquivos da classe Animal. Olho.h
    //
    // Classe Olho - interface
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import 
    
    @interface Olho : Object
    {
            int estado_da_pupila;
    }
    
    -(void) setEstado_Da_Pupila: (int) pupil;
    -(void) printEstado_Da_Pupila;
    
    @end
    Olho.m
    //
    // Classe Olho - implementacao
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import "Olho.h"
    
    @implementation Olho
    
    -(void) setEstado_Da_Pupila: (int) pupil
    {
            if(pupil==0) estado_da_pupila=0;
            if(pupil==1) estado_da_pupila=1;
            if(pupil==2) estado_da_pupila=2;
    }
    
    -(void) printEstado_Da_Pupila
    {
            if(estado_da_pupila==0)
            {
                    printf("A pupila está contraída\n");
            }
            if(estado_da_pupila==1)
            {
                    printf("A pupila está normal\n");
            }
            if(estado_da_pupila==2)
            {
                    printf("A pupila está dilatada\n");
            }
    }
    
    @end
    Animal.h
    //
    // Classe Abstrata Animal - interface
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import 
    #import "Olho.h"
    
    @interface Animal : Object
    {
            double peso;
            Olho *AOlho;
    }
    
    -(void) setPeso: (double) p;
    -(double) getPeso;
    -(void) printEstado_Da_Pupila;
    -(void) setEstado_Da_Pupila: (int) edp;
    
    @end
    Animal.m
    //
    // Classe Abstrata Animal - implementacao
    //
    // por Alberto GOK Martins
    // para o tutorial de Objc
    //
    
    #import "Animal.h"
    
    @implementation Animal
    
    -(void) setPeso: (double) p
    {
            peso=p;
    }
    
    -(double) getPeso
    {
            return peso;
    }
    
    -(void) printEstado_Da_Pupila
    {
            // funcao para imprimir o estado da pupila de um animal
    
            if(AOlho)
                   [AOlho printEstado_Da_Pupila];
            else
                    printf("Não foi definido um estado da pupila deste animal.\n");
    }
    
    -(void) setEstado_Da_Pupila: (int) edp
    {
            [AOlho free];
            AOlho = [[Olho alloc] init];
            [AOlho setEstado_Da_Pupila: edp];
    }
    
    @end
    O código que deve ser utilizado para testar o funcionamento do Olho em main.m é:
    [meuGato setEstado_Da_Pupila: 1];
    [meuGato printEstado_Da_Pupila];
    Obtivemos agora um enorme problema. Como é que vamos liberar a memória alocada para o Olho do Animal? Como não podemos acessar diretamente o objeto AOlho não podemos liberar a memória sem criar um método pertencente à classe Animal específico para isso; ou então, como saída mais inteligente, realizar um overriding do método free. Caso não liberemos a memória teremos um problema que se denomina vazamento de memória, ou memory leakage. Bem, para realizar o overriding de free precisamos saber como liberar a memória alocada pelo próprio objeto, no entanto como o método free é agora diferente do original ele não mais saberá como liberar a memória alocada para o objeto. A saída para isso é a instrução super que se refere a classe pai do recebedor da mensagem. Super chamará não o método da classe atual, mas aquele que foi herdado. Desta forma podemos sempre nos referir ao método antigo de todos os métodos que foram implementados através de overriding. Logo a implementação do método free para a classe Animal deve ser:
    -(id) free
    {
            [AOlho free];
            return [super free];
    }
    Deixaremos para nos preocupar com a palavra id na próxima seção

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. Na seção anterior utilizamos o tipo id para realizar o overriding do método free. Vejamos agora, como implementar o método reproduzir na classe Animal, e permitir que a classe Gato e Cachorro se reproduzam, sem que seja necessário criar dois métodos distintos:
    -(id) reproduzir: (id) Animal2
    {
            // funcao para criar um animal filho com a media dos pesos dos pais
            // antes de algum protesto, nao estamos tentando ser biologicamente corretos!
            // existe um teste para verificar se os animais sao da mesma classe.
    
            id Filho=[[[self class] alloc] init];
    
            if ([self class] == [Animal2 class])
            {
                    printf("O filho nasceu sadio!\n");
                    [Filho setPeso: (peso+[Animal2 getPeso])/2];
            }
      else
            {
                    printf("O filho nasceu morto, pois os pais são de classes diferentes!\n");
                    [Filho setPeso: 0];
            }
            return Filho;
    
    }
    Na implementação da função acima utilizamos o tipo id, pois não sabemos qual será a subclasse de Animal que será passada nem a classe que irá retornar. Utilizamos também a palavra self que serve para se referir ao próprio objeto, logo dizer [self class] é uma forma de pedir para o objeto retornar a própria classe; no método reproduzir precisamos criar um filho da mesma classe dos pais, logo usamos [self class] como a classe do filho.

Últimas palavras

    Esse tutorial deve ser aprimorado, com o passar do tempo e com sua ajuda. Por favor, não deixe de enviar um email dizendo o que achou, se conseguiu aprender alguma coisa ou se não conseguiu aprendeu nada.Por enquanto é isso. Após essas seções estarem melhor talhadas, pretendo incluir outros tópicos, como C-básico, posing, categorias e a utilização básica do framework Foundation. Entretanto, enquanto esses aprimoramentos não vem, e caso você queira se aprofundar na linguagem eu sugiro os links e referências presentes na seção Referências e links.

Referências e links

Página por Alberto G. O. K. Martins – algol@astro.iag.usp.br
Design based on the Dekorte’s Objective-C webpage. CSS additions by Alberto G. O. K. Martins.
Qualquer contribuição, alteração, comentário ou sugestão, favor enviar para o email algol@astro.iag.usp.br.