<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PontoGeek - O Ponto &#34;G&#34; da tecnologia &#187; Programação</title>
	<atom:link href="http://www.pontogeek.com.br/blog/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pontogeek.com.br/blog</link>
	<description>O ponto &#34;G&#34; da tecnologia</description>
	<lastBuildDate>Wed, 08 Feb 2012 20:16:48 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A evolução de um programador</title>
		<link>http://www.pontogeek.com.br/blog/a-evolucao-de-um-programador/</link>
		<comments>http://www.pontogeek.com.br/blog/a-evolucao-de-um-programador/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 20:42:02 +0000</pubDate>
		<dc:creator>Mi</dc:creator>
				<category><![CDATA[Computadores]]></category>
		<category><![CDATA[Nerdices]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[evolução]]></category>
		<category><![CDATA[programador]]></category>

		<guid isPermaLink="false">http://www.pontogeek.com.br/blog/?p=14845</guid>
		<description><![CDATA[High School/Jr.High   10 PRINT "HELLO WORLD"   20 END First year in College   program Hello(input, output)     begin       writeln('Hello World')     end. Senior year in College   (defun hello     (print       (cons 'Hello (list 'World)))) New professional   #include &#60;stdio.h&#62;   void main(void)   {     char *message[] = {"Hello ", [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-14847" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2009/07/Evolution.JPG" alt="Evolution of a Programmer" width="564" height="202" /></p>
<h2>High School/Jr.High</h2>
<pre>  10 PRINT "HELLO WORLD"
  20 END</pre>
<h2>First year in College</h2>
<pre>  program Hello(input, output)
    begin
      writeln('Hello World')
    end.</pre>
<p><span id="more-14845"></span></p>
<h2>Senior year in College</h2>
<pre>  (defun hello
    (print
      (cons 'Hello (list 'World))))</pre>
<h2>New professional</h2>
<pre>  #include &lt;stdio.h&gt;
  void main(void)
  {
    char *message[] = {"Hello ", "World"};
    int i;
    for(i = 0; i &lt; 2; ++i)
      printf("%s", message[i]);</pre>
<pre>    printf("\n");
  }</pre>
<h2>Seasoned professional</h2>
<pre>  #include &lt;iostream.h&gt;
  #include &lt;string.h&gt;
 
  class string
  {
  private:
    int size;
    char *ptr;
 
  string() : size(0), ptr(new char[1]) { ptr[0] = 0; }

    string(const string &amp;s) : size(s.size)
    {
      ptr = new char[size + 1];
      strcpy(ptr, s.ptr);
    }
 
    ~string()
    {
      delete [] ptr;
    }
 
    friend ostream &amp;operator &lt;&lt;(ostream &amp;, const string &amp;);</pre>
<pre>    string &amp;operator=(const char *);
  };
 
  ostream &amp;operator&lt;&lt;(ostream &amp;stream, const string &amp;s)
  {
    return(stream &lt;&lt; s.ptr);
  }
 
  string &amp;string::operator= (const char *chrs)</pre>
<pre>  {
    if (this != &amp;chrs)
    {
      delete [] ptr;
     size = strlen(chrs) ;
      ptr = new char[size + 1];
      strcpy(ptr, chrs);
    }
    return(*this) ;
  }

  int main()</pre>
<pre>  {
    string str;
 
    str = "Hello World";
    cout &lt;&lt; str &lt;&lt; endl;
    return(0);
  }</pre>
<h2>Master Programmer</h2>
<pre>  [
  uuid(2573F8F4- CFEE-101A- 9A9F-00AA0034282 0)
  ]
  library LHello
  {
      // bring in the master library
      importlib("actimp.tlb");
      importlib("actexp.tlb");

      // bring in my interfaces
      #include "pshlo.idl"

      [
      uuid(2573F8F5- CFEE-101A- 9A9F-00AA0034282 0)
      ]
      cotype THello
   {
   interface IHello;
   interface IPersistFile;</pre>
<pre>   };
  };
  [
  exe,
  uuid(2573F890- CFEE-101A- 9A9F-00AA0034282 0)
  ]
  module CHelloLib
  {
      // some code related header files
      importheader(&lt;windows.h&gt;);
      importheader(&lt;ole2.h&gt;);</pre>
<pre>      importheader(&lt;except.hxx&gt;);
      importheader("pshlo.h");
      importheader("shlo.hxx");
      importheader("mycls.hxx");

      // needed typelibs
      importlib("actimp.tlb");</pre>
<pre>      importlib("actexp.tlb");
      importlib("thlo.tlb");

      [
      uuid(2573F891- CFEE-101A- 9A9F-00AA0034282 0),
      aggregatable
      ]
      coclass CHello
   {</pre>
<pre>   cotype THello;</pre>
<pre>   };
  };

  #include "ipfix.hxx"
  extern HANDLE hEvent;

  class CHello : public CHelloBase
  {
  public:
      IPFIX(CLSID_ CHello);
      CHello(IUnknown *pUnk);</pre>
<pre>      ~CHello();

      HRESULT  __stdcall PrintSz(LPWSTR pwszString);
 
  private:
      static int cObjRef;
  };

  #include &lt;windows.h&gt;
  #include &lt;ole2.h&gt;
  #include &lt;stdio.h&gt;</pre>
<pre>  #include &lt;stdlib.h&gt;
  #include "thlo.h"
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "mycls.hxx"
  int CHello::cObjRef = 0;

  CHello::CHello( IUnknown *pUnk) : CHelloBase(pUnk)</pre>
<pre>  {
      cObjRef++;
      return;
  }
 
  HRESULT  __stdcall  CHello::PrintSz( LPWSTR pwszString)
  {
      printf("%ws
", pwszString);
      return(ResultFromSc ode(S_OK) );
  }

  CHello::~CHello( void)
  {
 
  // when the object count goes to zero, stop the server
  cObjRef--;
  if( cObjRef == 0 )
      PulseEvent(hEvent) ;

  return;
  }

  #include &lt;windows.h&gt;</pre>
<pre>  #include &lt;ole2.h&gt;
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "mycls.hxx"

  HANDLE hEvent;

   int _cdecl main(
  int argc,
  char * argv[]</pre>
<pre>  ) {
  ULONG ulRef;
  DWORD dwRegistration;
  CHelloCF *pCF = new CHelloCF();

  hEvent = CreateEvent( NULL, FALSE, FALSE, NULL);
 
  // Initialize the OLE libraries
  CoInitializeEx( NULL, COINIT_MULTITHREADE D);

  CoRegisterClassObje ct(CLSID_ CHello, pCF, CLSCTX_LOCAL_ SERVER,
      REGCLS_MULTIPLEUSE, &amp;dwRegistration) ;

  // wait on an event to stop
  WaitForSingleObject (hEvent, INFINITE);

  // revoke and release the class object</pre>
<pre>  CoRevokeClassObject (dwRegistration) ;
  ulRef = pCF-&gt;Release();
 
  // Tell OLE we are going away.
  CoUninitialize( );

  return(0); }

  extern CLSID CLSID_CHello;
  extern UUID LIBID_CHelloLib;

  CLSID CLSID_CHello = { /* 2573F891-CFEE- 101A-9A9F- 00AA00342820 */
      0x2573F891,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };

  UUID LIBID_CHelloLib = { /* 2573F890-CFEE- 101A-9A9F- 00AA00342820 */</pre>
<pre>      0x2573F890,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };
 
  #include &lt;windows.h&gt;
  #include &lt;ole2.h&gt;
  #include &lt;stdlib.h&gt;</pre>
<pre>  #include &lt;string.h&gt;</pre>
<pre>  #include &lt;stdio.h&gt;
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "clsid.h"
  int _cdecl main(
  int argc,
  char * argv[]
  ) {
  HRESULT  hRslt;</pre>
<pre>  IHello        *pHello;
  ULONG  ulCnt;
  IMoniker * pmk;
  WCHAR  wcsT[_MAX_PATH] ;
  WCHAR  wcsPath[2 * _MAX_PATH];
 
  // get object path
  wcsPath[0] = '';
  wcsT[0] = '';</pre>
<pre>  if( argc &gt; 1) {
      mbstowcs(wcsPath, argv[1], strlen(argv[ 1]) + 1);
      wcsupr(wcsPath) ;
      }
  else {
      fprintf(stderr, "Object path must be specified\n");
      return(1);</pre>
<pre>      }
 
  // get print string
  if(argc &gt; 2)
      mbstowcs(wcsT, argv[2], strlen(argv[ 2]) + 1);
  else
      wcscpy(wcsT, L"Hello World");
 
  printf("Linking to object %ws\n", wcsPath);
  printf("Text String %ws\n", wcsT);

  // Initialize the OLE libraries
  hRslt = CoInitializeEx( NULL, COINIT_MULTITHREADE D);

  if(SUCCEEDED( hRslt)) {

      hRslt = CreateFileMoniker( wcsPath, &amp;pmk);</pre>
<pre>      if(SUCCEEDED( hRslt))
   hRslt = BindMoniker( pmk, 0, IID_IHello, (void **)&amp;pHello);
      if(SUCCEEDED( hRslt)) {
   // print a string out
   pHello-&gt;PrintSz(wcsT) ;

   Sleep(2000);</pre>
<pre>   ulCnt = pHello-&gt;Release();
   }
      else
   printf("Failure to connect, status: %lx", hRslt);

      // Tell OLE we are going away.
      CoUninitialize( );
      }
  return(0);</pre>
<pre>  }</pre>
<h2>Apprentice Hacker</h2>
<pre>  #!/usr/local/ bin/perl
  $msg="Hello, world.\n";
  if ($#ARGV &gt;= 0) {
    while(defined( $arg=shift( @ARGV))) {
      $outfilename = $arg;
      open(FILE, "&gt;" . $outfilename) || die "Can't write $arg: $!\n";</pre>
<pre>      print (FILE $msg);
      close(FILE) || die "Can't close $arg: $!\n";
    }
  } else {
    print ($msg);
  }
  1;</pre>
<h2>Experienced Hacker</h2>
<pre>  #include &lt;stdio.h&gt;
  #define S "Hello, World\n"
  main(){exit( printf(S) == strlen(S) ? 0 : 1);}</pre>
<h2>Seasoned Hacker</h2>
<pre>  % cc -o a.out ~/src/misc/hw/ hw.c
  % a.out</pre>
<h2>Guru Hacker</h2>
<pre>  % echo "Hello, world."</pre>
<h2>New Manager</h2>
<pre>  10 PRINT "HELLO WORLD"
  20 END</pre>
<h2>Middle Manager</h2>
<pre>  mail -s "Hello, world." bob@b12
  Bob, could you please write me a program that prints "Hello, world."?
  I need it by tomorrow.
  ^D</pre>
<h2>Senior Manager</h2>
<pre>  % zmail jim
  I need a "Hello, world." program by this afternoon.</pre>
<h2>Chief Executive</h2>
<pre>  % letter
  letter: Command not found.
  % mail
  To: ^X ^F ^C
  % help mail
  help: Command not found.
  % damn!
  !: Event unrecognized
  % logout</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/a-evolucao-de-um-programador/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>PontoGeek Apps Review &#8211; Estréia</title>
		<link>http://www.pontogeek.com.br/blog/pontogeek-apps-review-estreia/</link>
		<comments>http://www.pontogeek.com.br/blog/pontogeek-apps-review-estreia/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 15:50:57 +0000</pubDate>
		<dc:creator>Eduardo Masuda</dc:creator>
				<category><![CDATA[App Store]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone/iPod]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[jogos]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.pontogeek.com.br/blog/?p=14501</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;A App Store funciona muito bem. Está tudo lá, a um clique de distância. Jogos, aplicativos de escritório, inutilidades&#8230; Comprar é muito fácil. Difícil é ter que se conformar com uma compra ruim. Eu, por exemplo, já gastei muitos dólares na compra de apps ruins ou pouco funcionais. Já xinguei os criadores do QuickOffice por [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.pontogeek.com.br/blog/wp-content/uploads/2009/07/18_sexy_iphone_apps_headline2.jpg" alt="18_sexy_iphone_apps_headline2" class="aligncenter size-full wp-image-14513" /></p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;A App Store funciona muito bem. Está tudo lá, a um clique de distância. Jogos, aplicativos de escritório, inutilidades&#8230; Comprar é muito fácil. Difícil é ter que se conformar com uma compra ruim. Eu, por exemplo, já gastei muitos dólares na compra de apps ruins ou pouco funcionais. Já xinguei os criadores do QuickOffice por muitas e muitas gerações (19,99 dólares jogados no lixo)&#8230; </p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;Por isso, a partir de hoje, publicaremos semanalmente (espero que sim.. rs) um review em vídeo sobre algum jogo ou aplicativo para o iPhone/iPod Touch. Nós compraremos e publicaremos o review de cada app para que você sempre saiba o que está comprando. Se precisar, nós xingaremos por você! :P Espero que essa seja uma experiência boa, pois é difícil encontrar sites brasileros que façam reviews de apps em vídeo e em bom português. </p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;Esta semana começaremos com o game Need for Speed Undercover. O que vocês acham? Quais jogos ou aplicativos merecem uma resenha? Contamos com o auxílio de vocês.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/pontogeek-apps-review-estreia/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Escritório geek &#8211; iDan</title>
		<link>http://www.pontogeek.com.br/blog/escritorio-geek-idan/</link>
		<comments>http://www.pontogeek.com.br/blog/escritorio-geek-idan/#comments</comments>
		<pubDate>Sat, 23 May 2009 18:42:57 +0000</pubDate>
		<dc:creator>idan</dc:creator>
				<category><![CDATA[Computadores]]></category>
		<category><![CDATA[Objetos de Desejo]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Escritório geek]]></category>
		<category><![CDATA[idan]]></category>

		<guid isPermaLink="false">http://www.pontogeek.com.br/blog/?p=12251</guid>
		<description><![CDATA[Depois de vermos o escritório geek do Whinston, como ele mesmo disse, com um Q de maluquice, venho mostrar á vocês o meu.    Separo ele em duas partes: a sala, local da família, aonde eu cuido dos assuntos mais chatos, trabalho com o IDA, utilizo programas que só funcionam no PC, e faço jailbreak. Lá, [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de vermos o <a href="http://www.pontogeek.com.br/blog/escritorio-geek-2/">escritório geek do Whinston</a>, como ele mesmo disse, com um Q de maluquice, venho mostrar á vocês o meu. </p>
<p style="text-align: center;"> </p>
<p><img class="aligncenter size-full wp-image-12258" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2009/05/img_1739.png" alt="img_1739" width="638" height="430" /></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-12259" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2009/05/img_1754.png" alt="img_1754" width="638" height="430" /></p>
<p style="text-align: left;">Separo ele em duas partes: a sala, local da família, aonde eu cuido dos assuntos mais chatos, trabalho com o IDA, utilizo programas que só funcionam no PC, e faço jailbreak. Lá, temos um computador montado de 2GB de RAM e 100 de HD, e uma tela de 17 polegadas, o notebook, com 1GB de ram e 150 de HD. Também temos um PS3, aonde eu tiro meu tempo de diversão.</p>
<p style="text-align: left;">A outra, é meu quarto, com meu Mac, com 200GB de HD, 2 de RAM (semana que vem teremos 4), que uso para programar em C++ e objective- C, editar o blog, vídeos, fotos e tudo mais. iPhone, aonde faço ligações, e mais uma tela de 22 polegadas HD da Saumsung, que acaba de chegar, e uso para ver filmes, e apresentações em slides, etc.</p>
<p style="text-align: left;">Dei uma puxada aqui, empurrada ali, para que caiba nas fotos, espero que tenham gostado!</p>
<p style="text-align: left;">A propósito, comprei uma expansão de 4GB para o Mac, que deve chegar na semana que vem. Alguém já fez o upgrade nos novos Macs (unibody) e sabe se é tranquilo, ou costuma dar muitos Kernel Panics?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/escritorio-geek-idan/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PontoGast está por vir!</title>
		<link>http://www.pontogeek.com.br/blog/pontogast-esta-por-vir/</link>
		<comments>http://www.pontogeek.com.br/blog/pontogast-esta-por-vir/#comments</comments>
		<pubDate>Sun, 17 May 2009 01:48:34 +0000</pubDate>
		<dc:creator>Marcelo Zlot</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[mz]]></category>
		<category><![CDATA[Pontogast]]></category>
		<category><![CDATA[projeto]]></category>

		<guid isPermaLink="false">http://www.pontogeek.com.br/blog/?p=11547</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160; Pois é&#8230;esta semana aprendi um pouquinho de VB, então como tinha colocado no meu antigo post, eu fiz o PontoGast! Ele nada mais é do que um &#8220;gadget&#8221; para pc que faz tocar o podcast e  você continua trabalhando. Nele coloquei uma coisa chamado arquivo, onde você podera ter o link para os antigos [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp; Pois é&#8230;esta semana aprendi um pouquinho de VB, então como tinha colocado no meu antigo post, eu fiz o PontoGast! Ele nada mais é do que um &#8220;gadget&#8221; para pc que faz tocar o podcast e  você continua trabalhando. Nele coloquei uma coisa chamado arquivo, onde você podera ter o link para os antigos podcasts. Eu não vou liberar agora pois o Whinston ainda vai arrumar a parte do servidor (para que ele mande o podcast atual ao media player embutido).</p>
<p align="center">
<img src="http://www.pontogeek.com.br/blog/wp-content/uploads/2009/05/projeto-marcelo.png">
</p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp; Aqui vocês podem ver como ele está. Coloquem no comentário uma sugestão ou crítica para que eu possa ainda mexer!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/pontogast-esta-por-vir/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Novo projeto?</title>
		<link>http://www.pontogeek.com.br/blog/11310/</link>
		<comments>http://www.pontogeek.com.br/blog/11310/#comments</comments>
		<pubDate>Fri, 15 May 2009 00:25:04 +0000</pubDate>
		<dc:creator>Marcelo Zlot</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[mz]]></category>
		<category><![CDATA[Pontogast]]></category>
		<category><![CDATA[projetos]]></category>

		<guid isPermaLink="false">http://www.pontogeek.com.br/blog/?p=11310</guid>
		<description><![CDATA[By mZ]]></description>
			<content:encoded><![CDATA[
<p style="text-align: center;"><img class="size-full wp-image-11311 aligncenter" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2009/05/imagem4.png" alt="imagem4" width="378" height="401" /></p>
<p style="text-align: center;">                                                                                      By mZ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/11310/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mini aulinha de binário [PARTE 1]</title>
		<link>http://www.pontogeek.com.br/blog/mini-aulinha-de-binario-parte-1/</link>
		<comments>http://www.pontogeek.com.br/blog/mini-aulinha-de-binario-parte-1/#comments</comments>
		<pubDate>Tue, 12 May 2009 17:26:51 +0000</pubDate>
		<dc:creator>Marcelo Zlot</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[aulinha]]></category>
		<category><![CDATA[binario]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.pontogeek.com.br/blog/?p=10973</guid>
		<description><![CDATA[Hoje vou dar  uma mini aulinha de binário, ao modo Tabajara!                              &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Você sabe binário? Você tem vontade de fazer contas em binário de cabeça? Pois seus problemaas acabaram, com a nova aulinha do PontoGeek!!! Os números binários são identicos aos [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje vou dar  uma mini aulinha de binário, ao modo Tabajara!                              &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Você sabe binário?</p>
<p>Você tem vontade de fazer contas em binário de cabeça?</p>
<p>Pois seus problemaas acabaram, com a nova aulinha do PontoGeek!!!<span id="more-10973"></span></p>
<p>Os números binários são identicos aos números que você disca no seu telefone. A unica diferença é que ao inves de aumentar dois algarismos quando você chega no 10º número (9, 10(o 10 tem 2 algarismos)), no 2º você aumenta dois algarismos.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Binário   |   Decimal</p>
<p>1             |       1</p>
<p><strong>10        |       2</strong></p>
<p>11           |       3</p>
<p><strong>100      |       4</strong></p>
<p> </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Você quer confirir suas contas?</p>
<p>Consulte este link: <a href="http://www.tradutordebinario.pt.vu/">http://www.tradutordebinario.pt.vu</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/mini-aulinha-de-binario-parte-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Série objective-C 06 &#8211; Separando os arquivos de implementação e interface</title>
		<link>http://www.pontogeek.com.br/blog/serie-objective-c-06-separando-os-arquivos-de-implementacao-e-interface/</link>
		<comments>http://www.pontogeek.com.br/blog/serie-objective-c-06-separando-os-arquivos-de-implementacao-e-interface/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 18:53:41 +0000</pubDate>
		<dc:creator>Pierre Freire</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[curso.cocoa]]></category>
		<category><![CDATA[iPhone/iPod]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[Pierre Freire]]></category>

		<guid isPermaLink="false">http://www.rodrigomerino.com.br/site/?p=7584</guid>
		<description><![CDATA[Estamos de volta, dando prosseguimento a série de artigos sobre objective-c, hoje iremos aprender como dividir as nossas classes em arquivos de implementação e de interfaces para facilitar a organização e reutilização.  Sempre recebo e-mail de leitores perguntando sobre tópicos avançados, mas queria deixar claro que estes artigos tem objetivo de abordar o básico do [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">Estamos de volta, dando prosseguimento a série de artigos sobre objective-c, hoje iremos aprender como dividir as nossas classes em arquivos de implementação e de interfaces para facilitar a organização e reutilização.</div>
<div style="text-align: justify;"><span> </span> Sempre recebo e-mail de leitores perguntando sobre tópicos avançados, mas queria deixar claro que estes artigos tem objetivo de abordar o básico do objective-c e assim que terminarmos esta introdução iremos falar sobre programação em ambiente gráfico e para dispositivos como o iPhone e o iPod, tenho certeza que esta introdução pode ajudar para quem nunca teve contato com estas tecnologias, esta com certeza é a minha intenção.  Espero os comentários e o feedback dos amigos leitores. Vamos ao artigo.</div>
<p><span id="more-7584"></span></p>
<p><span style="font-family: arial;">Artigos anteriores:</span></p>
<p><span><span>Série objective-c 1 &#8211; Primeira aplicação via console texto</span></span></p>
<p><span><span>Série objective-c 2 &#8211; Primeira aplicação compilada via X-Code</span></span></p>
<p><span><span>Série objective-c 3 &#8211; Exercícios de fixação</span></span></p>
<p><span><span>Série objective-c 4 &#8211; Orientação a objetos</span></span></p>
<p><span><span>Série objective-c-5 – Estrutura lógica de um programa objective-c</span></span></p>
<p><span><span><br />
</span></span></p>
<p><span><span>No artigo anterior estudamos a estrutura lógica de um programa construído com objective-c explicamos sobre:</span></span></p>
<p><span><span><span> </span></span><span>@interface section</span></span></p>
<p><span><span><span> </span></span><span>@implementation section</span></span></p>
<p><span><span><span> </span></span><span>program  section</span></span></p>
<p><span><br />
</span></p>
<p style="text-align: justify;"><span><span>No  exemplo mostrado, o programa era um único</span><span><span> arquivo .m</span></span><span> que continha todas as seções,  a interface, implementation e o programa principal. A titulo de exemplo, isto é válido para conhecer a estrutura da programação em objective-c, mas com o passar do tempo seus programas irão aumentar de tamanho e a divisão dos programas é vital para melhor organização e reutilização do código.</span></span></p>
<p><span><span>Hoje iremos aprender a separar as nossas classes em arquivos separados, dividindo a interface da implementação, para uma melhor organização e posterior reutilização do código.</span></span></p>
<p><span><br />
</span></p>
<p><span><strong><span>EXEMPLO PROPOSTO</span></strong></span></p>
<p><span><span>Temos o seguinte problema, queremos fazer a conversão entre moedas, a titulo de exemplo, vamos pensar em DOLAR para REAL, o usuário tem uma quantia em dolares e quer converter para reais, e nossa classe fará isto. Vou colocar um pequeno diagrama para facilitar o entendimento e a programação da classe.</span></span></p>
<p><span><br />
</span></p>
<p><span><span>Nossa classe será chamada ConverteMoeda.</span></span></p>
<div><img class="aligncenter size-full wp-image-7586" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2009/01/imagem61.png" alt="imagem61" /></div>
<p><span><span>Resumo do diagrama acima:</span></span></p>
<p><span><span><strong>a)  Uma classe chamada ConverteMoeda conforme a instrução:</strong></span></span></p>
<p><span><span>Class ConverteMoeda</span></span></p>
<p><span><span><strong>b) Nossa classe tem dois atributos definidos</strong></span></span></p>
<p><span><span><span>quantidade</span>:   Atributo do tipo float ( para receber parte decimal de um número ), responsavel por armazenar a quantidade da moeda que iremos converter.</span></span></p>
<p><span><span><span>cambio</span>: Atributo float, receberá o valor do cambio para fazer a conversão da moeda.</span></span></p>
<p><span><span><strong>A classe terá 5 métodos</strong></span></span></p>
<p><span><strong><span>OBS</span></strong><span>: </span><em><span>Foram implementados métodos acessores get e set para retornar e atualizar os valores dos atributos, em objective-c temos um recurso mais simples para acessar os atributos, mas veremos este conceito nos próximos artigos.</span></em></span></p>
<p><span><br />
</span></p>
<p><span><strong><span>getQuantidade:</span></strong><span>  Retorna um float com o valor do atributo quantidade.</span></span></p>
<p><span><strong><span>GetCambio:</span></strong><span> Retorna um float com o valor do atributo cambio</span></span></p>
<p><span><strong><span>setQuantidade:</span></strong><span> Permite atualizar o valor do atributo quantidade</span></span></p>
<p><span><strong><span>setCambio:</span></strong><span> Permite atualizar o valor do atributo cambio</span></span></p>
<p><span><strong><span>printConversao:</span></strong><span> Calcula e retorna o valor da conversao entre as moedas.</span></span></p>
<p><span><br />
</span></p>
<p><span><span>Já entendemos o problema e fizemos um diagrama básico da classe, chegou a hora de iniciar a codificação.</span></span></p>
<p style="text-align: justify;"><span><span>O detalhe é que a partir de agora as nossas classes serão separadas em arquivos para facilitar a organização e a reutilização, ta legal, eu sei que já falei isto antes. :)</span></span></p>
<p style="text-align: justify;"><span><span>Os arquivos tem extensões, geralmente para identificar o conteúdo e a sua utilidade, arquivos swf são para Flash, mp3 músicas e por ai vai. Em objective-c por convenção os arquivo com extensão .m irão conter códigos e os .h serão os arquivos de cabeçalho, ou seja a parte da interface declaração da classe, atributos e assinatura dos métodos irão ficar em arquivos .h e a implementação ou a codificação propriamente dita em arquivos .m</span></span></p>
<p><span><span>No nosso exemplo criamos o diagrama para construir a classe ConverteMoeda, de acordo a metodologia explicada, teremos 2 arquivos:</span></span></p>
<p><span><br />
</span></p>
<p><span><span>ConverteMoeda.h</span></span></p>
<p><span><span>ConverteMoeda.m</span></span></p>
<p><span><br />
</span></p>
<p><span><strong><span>Atenção:</span></strong></span></p>
<p><span><span><span><span>A numeração das linhas foram incluidas apenas para facilitar a explicação devem ser incluidas para testar os programas.</span></span></span></span></p>
<p> </p>
<p><span><br />
</span></p>
<p><span><span>Arquivo ConverteMoeda.h</span></span></p>
<p><span><span>01 // &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Inicio da codificação &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</span></span></p>
<p><span><span>02 // Interface Class: ConverteMoeda</span></span></p>
<p><span><span>03 // Arquivo: ConverteMoeda.h</span></span></p>
<p><span><span>04 // Programador: Pierre Freire</span></span></p>
<p><span><span>05 // E-mail: blog@pierrefreire.com.br</span></span></p>
<p><span><span>06 // Versao: 0.01</span></span></p>
<p><span><span>07 //</span></span></p>
<p><span><span>08 #import &lt; objc/Object.h&gt;</span></span></p>
<p><span><span>09 @interface ConverteMoeda:Object</span></span></p>
<p><span><span>10 {</span></span></p>
<p><span><span>11    float quantidade;</span></span></p>
<p><span><span>12    float cambio;</span></span></p>
<p><span><span>13  }</span></span></p>
<p><span><span>14   -(float) getQuantidade;</span></span></p>
<p><span><span>15   -(float) getCambio;</span></span></p>
<p><span><span>16   -(void)  setQuantidade: (float) quantidadeMoeda;</span></span></p>
<p><span><span>17   -(void)  setCambio: (float) cambioMoeda;</span></span></p>
<p><span><span>18   -(float)  printConversao;</span></span></p>
<p><span><span>19 @end</span></span></p>
<p><span><span>//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Fim da codificação &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</span></span></p>
<p><span><br />
</span></p>
<p><span><span>Comentários sobre ConverteMoeda.h</span></span></p>
<p><span><br />
</span></p>
<p><span><span>Linha 01-07: São apenas um comentário no programa</span></span></p>
<p><span><span>Linha 08: Usamos a diretiva #import para incluir a classe Object </span></span></p>
<p><span><span>Linha 09: Inicio da declaração da classe, informamos o seu nome ConverteMoeda e usamos</span></span></p>
<p><span><span>                 a herança para que ele herde caracteristicas da SuperClasse Object, métodos como</span></span></p>
<p><span><span>                init e free que iremos usar são implementados nesta Classe.</span></span></p>
<p><span><br />
</span></p>
<p><span><span>Linha 10-13: Definimos os atributos de nossa classe.</span></span></p>
<p><span><span>Linha 14: Método que vai retornar um float com o valor do atributo quantidade</span></span></p>
<p><span><span>Linha 15: Método que vai retornar um float com o valor do atributo cambio</span></span></p>
<p><span><span>Linha 16: Método que recebe um parametro chamado quantidadeMoeda e atualiza atributo</span></span></p>
<p><span><span>                quantidade.</span></span></p>
<p><span><span>Linha 17: Método que recebe um parametro chamado câmbioMoeda e atualiza atributo cambio</span></span></p>
<p><span><span>Linha 18: Este método vai calcular o valor do câmbio e retornar um float com o resultado.</span></span></p>
<p><span><span>Linha 19: Finaliza o bloco de interface da classe.</span></span></p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
<p><span><span>Definimos o arquivo com a interface de nossa classe, vamos agora criar o arquivo para implementar as funcionalidades que definimos.</span></span></p>
<p><span><span>ConverteMoeda.m</span></span></p>
<p><span><span>01 // &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Inicio da codificação &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</span></span></p>
<p><span><span>02 // Implementation: Class ConverteMoeda</span></span></p>
<p><span><span>03 // Arquivo: ConverteMoeda.m</span></span></p>
<p><span><span>04 // Programador: Pierre Freire</span></span></p>
<p><span><span>05 // E-mail: blog@pierrefreire.com.br</span></span></p>
<p><span><span>06 // Versao: 0.01</span></span></p>
<p><span><span>07</span></span></p>
<p><span><span>08 #import &#8220;converteMoeda.h&#8221;</span></span></p>
<p><span><span>09 </span></span></p>
<p><span><span>10 @implementation ConverteMoeda</span></span></p>
<p><span><span>11</span></span></p>
<p><span><span>12 -(float) getQuantidade</span></span></p>
<p><span><span>13 {</span></span></p>
<p><span><span>14    return quantidade;</span></span></p>
<p><span><span>15  }</span></span></p>
<p><span><span>16</span></span></p>
<p><span><span>17 -(float) getCambio</span></span></p>
<p><span><span>18</span></span></p>
<p><span><span>19  {</span></span></p>
<p><span><span>20     return cambio;</span></span></p>
<p><span><span>21  }</span></span></p>
<p><span><span>22</span></span></p>
<p><span><span>23 -(void) setQuantidade: (float) quantidadeMoeda</span></span></p>
<p><span><span>24  {</span></span></p>
<p><span><span>25     quantidade=quantidadeMoeda;</span></span></p>
<p><span><span>26  }</span></span></p>
<p><span><span>27</span></span></p>
<p><span><span>28   -(void) setCambio: (float) cambioMoeda</span></span></p>
<p><span><span>29  {</span></span></p>
<p><span><span>30      cambio=cambioMoeda;</span></span></p>
<p><span><span>31   }</span></span></p>
<p><span><span>32</span></span></p>
<p><span><span>33  -(float) printConversao;</span></span></p>
<p><span><span>34</span></span></p>
<p><span><span>35  {</span></span></p>
<p><span><span>36      return cambio*quantidade;</span></span></p>
<p><span><span>37  }</span></span></p>
<p><span><span>38</span></span></p>
<p><span><span>39 @end</span></span></p>
<p><span><span>40  //&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Fim da codificação &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</span></span></p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
<p><span><span><span>Linha 01-07:</span> São apenas um comentário no programa</span></span></p>
<p><span><span><span>Linha 08</span>: Usamos a diretiva #import para incluir a interface que definimos ConverteMoeda.h</span></span></p>
<p><span><span><span>Linha 10</span>: Iniciamos o bloco de implementação da classe</span></span></p>
<p><span><span><span>Linha 12-15:</span> Implementamos o método getQuantidade onde retornamos um float com o valor</span></span></p>
<p><span><span>                      do atributo quantidade.</span></span></p>
<p><span><span><span>Linha 17-21</span> Implementamos o método getCambio onde retornamos um float com o cambio</span></span></p>
<p><span><span><span>Linha 23-26</span> Implementamos o método setQuantidade onde recebemos o parâmetro</span></span></p>
<p><span><span>                    quantidadeMoeda e atualizamos o valor do atributo quantidade</span></span></p>
<p><span><span><span>Linha 28-31</span> Implementamos o método setCambio onde recebemos o parâmentro cambioMoeda</span></span></p>
<p><span><span>                    e atualizamos o valor do atributo cambio.</span></span></p>
<p><span><span><span>Linha 33-41</span> Implementamos o método printConversao onde multiplicamos o cambioXquantidade</span></span></p>
<p><span><span>                    e retornamos o valor da conversão.</span></span></p>
<p><span><span><span>Linha 39</span>  Fechamos o bloco de implementação com @end.</span></span></p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
<p><span><span>Finalizamos a nossa classe, dividimos em 2 arquivos, o converteMoeda.h e o converteMoeda.m e agora podemos utilizar esta classe onde for necessário.</span></span></p>
<p><span><br />
</span></p>
<p><span><span>Vamos criar agora um arquivo chamado CalculaMoeda.m  para testar a nossa classe.</span></span></p>
<p> </p>
<p><span>CalculaMoeda.m</span></p>
<p> </p>
<p><span><span>01  // Programa Conversao de moedas</span></span></p>
<p><span><span>02  // Arquivo: CalculaMoeda.m</span></span></p>
<p><span><span>03  // E-mail: blog@pierrefreire.com.br</span></span></p>
<p><span><span>04  // Versao: 0.01</span></span></p>
<p><span><span>05</span></span></p>
<p><span><span>06  #import &lt;  stdio.h &gt;</span></span></p>
<p><span><span>07  #import &#8220;converteMoeda.h&#8221;</span></span></p>
<p><span><span>08  int main (int argc, char *argv[])</span></span></p>
<p><span><span>09  {</span></span></p>
<p><span><span>10       // Cria um objeto do tipo ConverteMoeda</span></span></p>
<p><span><span>11       // Aloca um espaco para o objeto dolar e o inicializa</span></span></p>
<p><span><span>12          ConverteMoeda *dolar=[[ConverteMoeda alloc] init];</span></span></p>
<p><span><span>13</span></span></p>
<p><span><span>14      // Usando metodo setQuantidade do objeto dolar</span></span></p>
<p><span><span>15      // Estamos informando a quantidade de dolares que queremos converter</span></span></p>
<p><span><span>16         [dolar setQuantidade: 12];</span></span></p>
<p><span><span>17</span></span></p>
<p><span><span>18     // Usando metodo setCotacao do objeto dolar</span></span></p>
<p><span><span>19     // Vamos informar o valor da cotacao, vamos imaginar em REAIS</span></span></p>
<p><span><span>20        [dolar setCambio: 2.30];</span></span></p>
<p><span><span>21     // Usando o metodo printSaldo</span></span></p>
<p><span><span>22     // Imprimindo o resultado</span></span></p>
<p><span><span>23        printf(&#8220;Quantidade de dolares&#8230;&#8230;&#8230;&#8230;%10.2f\n&#8221;,[dolar getQuantidade]);</span></span></p>
<p><span><span>24        printf(&#8220;Taxa de cambio em Reais&#8230;&#8230;.%10.2f\n&#8221;,[dolar getCambio]);</span></span></p>
<p><span><span>25        printf(&#8220;Valor da conversao&#8230;&#8230;&#8230;&#8230;&#8230; %10.2f\n&#8221;,[dolar printConversao]);</span></span></p>
<p><span><span>26</span></span></p>
<p><span><span>27      // Liberando o objeto da memoria &#8211; Metodo free</span></span></p>
<p><span><span>28        [dolar free];</span></span></p>
<p><span><span>29        return 0;</span></span></p>
<p><span><span>30   }</span></span></p>
<p><span><br />
</span></p>
<p> </p>
<p><span><span><span>Linha 01-05</span>: São simples comentários do programa</span></span></p>
<p><span><span><span>Linha 06:</span> Importando a biblioteca stdio.h, para usarmos a função prinft no programa.</span></span></p>
<p><span><span><span>Linha 07</span>: Importando a nossa classe ConverteMoeda para que possamos usa-la no programa.</span></span></p>
<p><span><span><span>Linha 08</span>: Declara o inicio da função main responsável por iniciar a execução do programa.</span></span></p>
<p><span><span><span>Linha 09:</span> Delimitador do bloco de inicio do programa</span></span></p>
<p><span><span><span>Linha 12:</span> Nesta linha declaramos o ponteiro *dolar sendo do tipo ConverteConta, e alocamos e inicializamos o objeto. Em relação aos artigos anteriores executamos estes passos em uma única linha. Para relembrar esta linha poderia ser escrita da seguinte forma também.</span></span></p>
<p><span><span>  <span>IMPLEMENTAÇAO 01:</span></span></span></p>
<p><span><span>   ConverteMoeda *dolar;</span></span></p>
<p><span><span>   dolar = [ConverteMoeda alloc];</span></span></p>
<p><span><span>   dolar = [dolar init]; </span></span></p>
<p><span><span> <span> IMPLEMENTAÇAO 02:</span></span></span></p>
<p><span><span>   ConverteMoeda *dolar=[[ConverteMoeda alloc] init];</span></span></p>
<p><span><span> </span></span></p>
<p><span><span><span><span> </span></span></span><span><span>A implementação 02 passará a ser usada neste e nos próximos artigos</span>.</span></span></p>
<p><span><br />
</span></p>
<p><span><span><span>Linha 16</span>: Nesta linha usamos o método setQuantidade para indicar a quantidade de doláres que</span></span></p>
<p><span><span>queremos calcular.</span></span></p>
<p><span><span><span>Linha 20:</span> Usamos o método setCambio com o valor da cotação da moeda.</span></span></p>
<p><span><br />
</span></p>
<p><span><span><span>Linha 23</span>: Usamos a função printf para imprimir na tela a quantidade de dolares, usando o método getQuantidade.</span></span></p>
<p><span><span><span>Linha 24:</span> Usamos a função printf para imprimir na tela o valor do cambio usando o getCambio</span></span></p>
<p><span><span><span>Linha 25:</span> Imprime o valor da conversão usando o  método printConversão.</span></span></p>
<p><span><span>OBS: o parametro %10.2f, indica que o número vai ter 10 digitos no máximo e 2 casas decimais o f vem de float e o \n indica uma quebra de linha.</span></span></p>
<p><span><br />
</span></p>
<p><span><span><span>Linha 28:</span> Usamos o método free para liberar o objeto, vale a pena comentar que este método podemos usar porque nossa classe ConverteMoeda herda de Object que implementa esta método.</span></span></p>
<p><span><br />
</span></p>
<p><span><span><span>Linha 29</span>: Esta linha retorna o controle ao SO indica que tudo terminou bem.</span></span></p>
<p> </p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
<p><span><span>Para compilar:</span></span></p>
<p><span><br />
</span></p>
<p><span><span>gcc CalculaMoeda.m ConverteMoeda.m -o moeda -lobjc</span></span></p>
<p><span><br />
</span></p>
<p><span><span>gcc: Invoka o compilador gcc</span></span></p>
<p><span><span>CalculaMoeda.m e converteMoeda: São os arquivo com os fontes</span></span></p>
<p><span><span>-o moeda: Indica o nome do arquivo de saida, o executavel, escolha fica a criterio</span></span></p>
<p><span><span>-lobjc: Indica que deve ser usado as bibliotecas objective-c</span></span></p>
<p><span><br />
</span></p>
<p><span><span>Para executar:</span></span></p>
<p><span><span>./moeda</span></span></p>
<p><span><span><br />
</span></span></p>
<p><span><span><span><span>Resultado:</span></span></span></span></p>
<p><span><span><span><span>Quantidade de dolares&#8230;&#8230;&#8230;&#8230;     12.00</span></span></span></span></p>
<p><span><span><span><span>Taxa de cambio em Reais&#8230;&#8230;.      2.30</span></span></span></span></p>
<p><span><span><span><span>Valor da conversao&#8230;&#8230;&#8230;&#8230;&#8230;      27.60</span></span></span></span></p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
<p><span><span><span> </span>Agora com este exemplo simples, aprendemos como dividir as classes em arquivos separados de interface e implementação e usa-la em outro programa.  Existem muitas coisas a saber sobre classes, fizemos apenas uma pequena introdução, futuramente iremos tratar deste assunto de forma mais profunda. Nos próximos artigos falaremos sobre os tipos, estruturas de controle e de decisões para que possamos finalizar a parte básica da linguagem.</span></span></p>
<p>Qualquer dúvida entrem em contato:</p>
<p> </p>
<p> </p>
<p> </p>
<p>Abraço a todos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/serie-objective-c-06-separando-os-arquivos-de-implementacao-e-interface/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Instalando banco de dados PostgreSQL no Mac OS</title>
		<link>http://www.pontogeek.com.br/blog/instalando-banco-de-dados-postgresql-no-mac-os/</link>
		<comments>http://www.pontogeek.com.br/blog/instalando-banco-de-dados-postgresql-no-mac-os/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 14:09:36 +0000</pubDate>
		<dc:creator>Pierre Freire</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[banco]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[Pierre Freire]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[rodrigo merino]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.rodrigomerino.com.br/site/?p=4585</guid>
		<description><![CDATA[Amigos, hoje completo a primeira semana escrevendo para este blog, gostaria de agradecer mais uma vez ao Rodrigo Merino, Gilson, Whinston, Tiago que fazem parte da equipe deste blog e a principalmente a todos leitores que sempre me incentivam com comentários, mandando e-mail trocando informações e me passando dicas. Meus sinceros agradecimentos a todos.  Hoje [...]]]></description>
			<content:encoded><![CDATA[<p style="justify;">Amigos, hoje completo a primeira semana escrevendo para este blog, gostaria de agradecer mais uma vez ao Rodrigo Merino, Gilson, Whinston, Tiago que fazem parte da equipe deste blog e a principalmente a todos leitores que sempre me incentivam com comentários, mandando e-mail trocando informações e me passando dicas. Meus sinceros agradecimentos a todos.  Hoje tive uma nova experiência,  tive a necessidade de usar um banco de dados, para testar alguns conceitos com o  Objective-c, então resolvi instalar o Postgresql nativamente no Mac, e fiz este mini-tutorial. E para descontrair, no final do post, vou colocar umas dicas sobre como tornar seu cão mais inteligente, fiz este vídeo e gostaria de dividir a dica com vocês, assim vocês também ficarão conhecendo o Pierre. Não esqueçam de postar nos comentários, suas experiências, tanto com o vídeo, como com a instalação do banco. Vamos nessa.<span id="more-4585"></span></p>
<p>Todos os meus artigos:</p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/11/desenvolvimento-de-sistemas-para-ambiente-apple/">Desenvolvimento de sistemas para ambiente Apple</a></p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/11/configurando-um-ambiente-de-desenvolvimento-para-mac-ipod-e-iphone/">Configurando um ambiente de desenvolvimento para Mac, iPod e iPhone</a></p>
<p>Série objective-c</p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/11/objective-c-01-conceitos-iniciais-e-primeira-aplicacao-via-console-de-texto/">Artigo 01 &#8211; Conceitos Iniciais e Primeira Aplicação Via Console de Texto</a></p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/12/serie-objective-c-02-primeira-aplicacao-compilada-via-xcode/">Artigo 02 &#8211; Primeira Aplicação Compilada Via XCode</a></p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/12/serie-objective-c-3-exercicios-de-revisao/">Artigo 03 &#8211; Exercícios de revisão</a></p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/12/objective-c-4-orientacao-a-objetos/">Artigo 04 &#8211; Orientação a Objetos</a></p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/12/objective-c-05-estrutura-logica-de-um-programa/">Artigo 05 &#8211; Estrutura Lógica de um Programa</a></p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/12/meu-primeiro-livro-sobre-mac-os-x-a-primeira-vez-a-gente-nunca-esquece/">Meu primeiro livro sobre Mac OS X, A primeira vez a gente nunca esquece!!!</a></p>
<p><a href="http://www.rodrigomerino.com.br/site/2008/12/acessar-mac-via-windows/">Acessar Mac via Windows</a></p>
<h3><strong>Instalando Postgresql no Mac</strong></h3>
<p><strong>01 &#8211; Acessamos o site http://www.postgresql.org/download e clicamos em Mac OS X.</strong></p>
<p><a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem19.png"><img class="aligncenter size-medium wp-image-4586" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem19.png" alt="" width="360" height="240" /></a><strong>02 &#8211; Chegamos a esta página, onde existem os pacotes pré-compilados para Mac OS X, clicamos em Download Mac OS X 10.4+ ou versões mais novas, no meu caso, foi testado no Mac OS X 10.5.5, esta página nos mostra os pacotes disponiveis para Mac OS, o mantenedor  deste pacote é o Dave Page.</strong></p>
<p><a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem24.png"><img class="aligncenter size-medium wp-image-4588" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem24.png" alt="" width="360" height="240" /></a></p>
<p><strong>03 &#8211; Chegamos a EnterpriseDB, empresa onde trabalha o mantenedor dos pacotes, clique no instalador para Mac OS X.</strong></p>
<p><a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem38.png"><img class="aligncenter size-medium wp-image-4623" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem38.png" alt="" width="360" height="240" /></a></p>
<p><strong>04 &#8211; A versão é a 8.3.5-1 e o tamanho é de 40 mb, agora vai tomar um café e relaxa um pouco.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem43.png"><img class="aligncenter size-medium wp-image-4595" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem43.png" alt="" width="360" height="240" /></a></p>
<p><strong>05 &#8211; Quando terminar de baixar, você clica no arquivo que ele abre a imagem para você conforme a figura abaixo:</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem52.png"><img class="aligncenter size-medium wp-image-4596" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem52.png" alt="" width="360" height="240" /></a></p>
<p><strong>06 &#8211; Neste caso não é apenas arrastar para aplicativos, você vai acionar o instalador dele, clica e aquela típica mensagem do Mac OS, sempre que você abre um aplicativo pela primeira vez. Você concorda.</strong></p>
<p><a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem61.png"><img class="aligncenter size-medium wp-image-4597" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem61.png" alt="" width="360" height="240" /></a></p>
<p><strong>07 &#8211; Por questões de segurança o Mac OS exige que você digite a senha do seu usuário, aquele que você loga no sistema.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem71.png"><img class="aligncenter size-medium wp-image-4598" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem71.png" alt="" width="360" height="240" /></a></p>
<p><strong>08 &#8211; O instalador faz algumas alterações no /etc/sysctl.conf do Mac OS, para otimizar alguns recurso do Postgresql, ele altera e pede para que você reinicie o sistema, isto mesmo, vamos lembrar do Windows ( risos ), não vai prejudicar o seu sistema, ele mostra que você pode deletar o arquivo depois também se quiser desfazer a operação, mas não se preocupe não vai doer. ( risos )</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem81.png"><img class="aligncenter size-medium wp-image-4599" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem81.png" alt="" width="360" height="240" /></a></p>
<p><strong>09 &#8211; Você ja voltou do reboot? Nossa que rápido, então execute novamente o instalador, até chegar nesta tela, onde iremos iniciar a configuração do banco.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem91.png"><img class="aligncenter size-medium wp-image-4600" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem91.png" alt="" width="360" height="240" /></a></p>
<p><strong>10 &#8211; Nesta tela, ele pede para você indicar o diretório ( pasta ) onde sera instalado o banco, eu deixei no padrão</strong>.<br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem101.png"><img class="aligncenter size-medium wp-image-4601" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem101.png" alt="" width="360" height="240" /></a></p>
<p><strong>11 &#8211; Este tela, quer saber onde ficará a pasta, onde os dados serão armazenados, em muitos casos, os administradores definem uma partição separada para armazenar as informações do banco, eu deixei no padrão escolhido pelo instalador.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem111.png"><img class="aligncenter size-medium wp-image-4602" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem111.png" alt="" width="360" height="240" /></a></p>
<p>12 &#8211; Para quem já usou um banco de dado, sabe que todo banco tem um SuperUsuário, aquele que pode fazer tudo no banco até apagar ele ( que medo ), então esta é  senha dele. O nome do superusuário é <strong>postgres</strong>. Neste caso você esta definindo a senha do superusuário <strong>postgres</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem121.png"><img class="aligncenter size-medium wp-image-4603" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem121.png" alt="" width="360" height="240" /></a></p>
<p style="justify;"><strong>13 &#8211; Aqui você define a porta que o banco vai escutar para receber conexões, a porta de conexão padrão do postgres é a 5432, você pode até mudar, desde que ela não esteja ocupada por outro serviço omo por exemplo a 22 do ssh ou a 80 do apache. Te aconselho a deixar a padrão neste caso.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem131.png"><img class="aligncenter size-medium wp-image-4604" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem131.png" alt="" width="360" height="240" /></a></p>
<p><strong>14 &#8211; As configurações regionais do banco, vamos deixar no locale padrão.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem142.png"><img class="aligncenter size-medium wp-image-4606" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem142.png" alt="" width="360" height="240" /></a></p>
<p><strong>15 &#8211; Agora que respondemos a estas perguntas, manda o instalador trabalhar :). Estamos prontos. Clique em Next para o próximo passo.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem151.png"><img class="aligncenter size-medium wp-image-4607" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem151.png" alt="" width="360" height="240" /></a></p>
<p><strong>16 &#8211; A festa começou, ele esta instalando o banco, olhe a tela abaixo, cara vai fazer algo útil enquanto ele trabalha, já sei, vai ler os outros posts do blog. :)</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem161.png"><img class="aligncenter size-medium wp-image-4608" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem161.png" alt="" width="360" height="240" /></a></p>
<p><strong>17 &#8211; Olha o elefante ai gente, isto quer dizer que chegamos a Africa? Não o elefante é o simbolo do Postgres, ele esta falando para você que o banco foi instalado com sucesso, olhe que esta marcada a opção Launch Stack Builder at exit, ou seja assim que clicar em finish ele já inicia o banco para você.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem171.png"><img class="aligncenter size-medium wp-image-4609" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem171.png" alt="" width="360" height="240" /></a></p>
<p><strong>18 &#8211; Na parte de aplicativos, você agora pode ver o icone da pasta Postgresq 8.3 instalada, clique nela para expandir.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem181.png"><img class="aligncenter size-medium wp-image-4610" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem181.png" alt="" width="360" height="240" /></a></p>
<p><strong>19 &#8211; Eu sei que você é meio cego:) e não estava vendo direito, por isto eu resolvi ampliar para você, tem algumas opções importantes aqui:</strong></p>
<p><strong>Documentation:</strong> Documentação sobre o Banco</p>
<p><strong>PGAdmin:</strong> um programa gerenciador do Banco, pode usar ele para criar, apagar, selecionar tabelas, usuarios ou seja administrar o banco. É uma interface gráfica.</p>
<p><strong>SQL Shell:</strong> Um cliente em modo texto, extremamente poderoso e altamente recomendado o aprendizado para administrar o banco.</p>
<p><strong>Start Server:</strong> Serve para iniciar os serviços do banco, ou seja colocar ele no ar.</p>
<p><strong>Stop Server:</strong> Tem um pirulito se acertar o que isto faz? Parar o banco né filho!!</p>
<p><a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem191.png"><img class="aligncenter size-medium wp-image-4611" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem191.png" alt="" width="360" height="240" /></a></p>
<p><strong>19 &#8211; Vamos iniciar o banco para testar? Pierre, eu já iniciei quando fechei o instalador. Ta, mas quero iniciar de novo, faz o seguinte, para ele então. :)</strong></p>
<p>Clica em <strong>Start Server</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem20.png"><img class="aligncenter size-medium wp-image-4612" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem20.png" alt="" width="360" height="240" /></a></p>
<p><strong>20 &#8211; O Start Server, exige que você digite a sua senha de usuário do Sistema, aqui não é a sua senha do banco, é a senha sua no sistema, aquela que você usa quando instala um programa e faz algumas operações no sistema, quando loga por exemplo.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem211.png"><img class="aligncenter size-medium wp-image-4613" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem211.png" alt="" width="360" height="240" /></a></p>
<p><strong>21 &#8211; Ele vai mostrar esta mensagem, o banco esta no ar.</strong><br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem221.png"><img class="aligncenter size-medium wp-image-4614" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem221.png" alt="" width="360" height="240" /></a></p>
<p>22 &#8211; Existem duas formas de acessar o banco via a interface gráfica, PGAdmin ou através do modo texto, vamos usar o modo texto, acesse a opção <strong>SQL Shell ( psql )</strong>, naquele menu dos aplicativos onde tem a pasta Postgresql que  mostrei antes. Quando clicar, ele vai:</p>
<p><strong>Server [localhost]:</strong> Aqui é o endereço de onde esta o banco de dados, no nosso caso esta instalado na nossa maquina, entao pode colocar localhost ou 127.0.0.1 o ip de loopback local.</p>
<p><strong>Database:</strong> Aqui ele pergunta o nome do banco de dados que você quer acessar,  ainda não criamos os nossos bancos de dados, não é o escopo deste artigo, mas quando você instala o postgres ele cria um banco de modelo, ele se chama template1, coloque este.</p>
<p><strong>Username:</strong> Cara pálida, este é o nome do usuário que você escolheu quando estava instalando o banco, lembra que te falei que o superusuário do banco se chama postgres, coloca ele.</p>
<p><strong>Port:</strong> Já falamos sobre isto né? Coloque a porta que você escolheu ou deixe a padrao 5432</p>
<p><strong>Password:</strong> Aqui é a senha, não é a senha do Sistema, aqui é a senha que você escolheu para o usuário postgres, lembra??</p>
<p>Resumindo:</p>
<p>Server [localhost]: localhost</p>
<p>Database [postgres]: template1</p>
<p>Port [5432]: 5432</p>
<p>Username [ postgres ]: postgres</p>
<p>Password for user postgres: **** ( Esta aqui você que colocou, o problema é teu ) :)<br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem231.png"><img class="aligncenter size-medium wp-image-4615" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem231.png" alt="" width="360" height="240" /></a></p>
<p>23 &#8211; Se aparecer a tela abaixo, você conseguiu!! Esta conectado no banco.<br />
<a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem241.png"><img class="aligncenter size-medium wp-image-4616" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/imagem241.png" alt="" width="360" height="240" /></a></p>
<p>Vamos ficando por aqui, as vezes precisamos de feedbacks para continuarmos escrevendo, além da série sobre objective-c que estou escrevendo, vocês gostariam de alguns artigos sobre banco de dados? Não sei até que ponto seria interessante, aguardo as sugestões de vocês.</p>
<p>Abraços.</p>
<p>Aproveitem e vejam o que acontece nas horas vagas de um nerd.</p>
<p><a href="http://videolog.uol.com.br/video.php?id=318035">Video sobre treinamento de como aumentar a inteligência do seu cachorro</a></p>
<p>Perguntas:</p>
<p>01 &#8211; Pierre, agora que instalei o banco o que faço?</p>
<p>R &#8211; Este artigo tinha este foco, a instalação do banco, caso ache útil alguns artigos sobre como usar o banco e uma breve introdução sobre SQL, comente para quem sabe criarmos uma série neste sentido.</p>
<p>02 &#8211; E a série sobre objective-c?</p>
<p>R &#8211; Estou preparando novos artigos, e instalar um banco é importante porque futuramente poderemos fazer alguns posts falando do uso dele com Objective-c e Cocoa.</p>
<p>03 &#8211; É você mesmo no video?</p>
<p>R &#8211; Sim, as vezes tenho um tempo livre e quando falta o que fazer, gravo vídeos e blogo com os amigos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/instalando-banco-de-dados-postgresql-no-mac-os/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Artigo 05 &#8211; Estrutura Lógica de um Programa</title>
		<link>http://www.pontogeek.com.br/blog/objective-c-05-estrutura-logica-de-um-programa/</link>
		<comments>http://www.pontogeek.com.br/blog/objective-c-05-estrutura-logica-de-um-programa/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 21:19:35 +0000</pubDate>
		<dc:creator>Pierre Freire</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[iPhone/iPod]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[Pierre Freire]]></category>

		<guid isPermaLink="false">http://www.rodrigomerino.com.br/site/?p=4465</guid>
		<description><![CDATA[Estamos de volta e agora chegamos ao artigo número 5 da série objective-c, para reforçar os estudos do post anterior onde apresentamos a orientação a objetos, vamos falar sobre cada parte da estrutura de um programa feito com objective-c, é importante que postem suas dúvidas, criticas e sugestões nos comentários para que possamos ir melhorando [...]]]></description>
			<content:encoded><![CDATA[<p style="center;"><a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/objtective.jpg"><img class="aligncenter size-medium wp-image-4478" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/objtective.jpg" alt="" width="120" height="120" /></a></p>
<p style="justify;">Estamos de volta e agora chegamos ao artigo número 5 da série objective-c, para reforçar os estudos do post anterior onde apresentamos a orientação a objetos, vamos falar sobre cada parte da estrutura de um programa feito com objective-c, é importante que postem suas dúvidas, criticas e sugestões nos comentários para que possamos ir melhorando ou pelo menos tentando. Vamos ao post&#8230;</p>
<blockquote><p><span id="more-4465"></span></p></blockquote>
<p>Leitura recomendada:</p>
<p>Posts anteriores da série:</p>
<p>Desenvolvimento de sistemas para o mundo Apple<br />
Configurando um ambiente de desenvolvimento para iPod, iPhone e Mac<br />
Objective-c 01 &#8211; Conceitos iniciais e primeira aplicação via console de texto<br />
Objective-c 02 &#8211; Primeira aplicação compilada via XCode<br />
Objective-c 03 &#8211; Exercícios de revisão<br />
Objective-c 04 &#8211; Orientação a objetos<br />
Estes artigos você encontra no item programação, aqui no blog.</p>
<p>No último artigo nós vimos os primeiros passos em orientação a objetos e escrevemos o primeiro programa, hoje irei fazer uma revisão rápida sobre a estrutura lógica de um programa em objective-c, é importante que leiam o artigo <em><strong>Série objective-c 4 &#8211; Orientação a objetos</strong></em> para terem um melhor aproveitamento deste artigo.<br />
Hoje iremos ver mais detalhes da estrutura lógica de um programa objective-c</p>
<p>Existem 3 seções fundamentais em um programa:</p>
<p>1. @interface section<br />
2. @implementation section<br />
3. program  section</p>
<p>A @interface section é onde você descreve a classe, uma espécie de contrato, onde você define o que será implementado na sua classe, informa o nome da classe, seus atributos, métodos.<br />
A @implementation section é onde codificamos os métodos que foram definidos na interface.<br />
programa section é o inicio do programa em si, onde definimos a função main e o que ela vai executar.</p>
<p>Cada seção tem suas tarefas bem definidas em objective-c, inclusive é recomendavel que elas sejam divididas em arquivos diferentes ou seja um arquivo para @interface section, outro para @implementation e mais um para o programa principal. No nosso exemplo inicial usamos apenas um, mas no decorrer deste curso iremos aprender a usa-los separados.</p>
<p><strong>1. @interface section</strong></p>
<p>Quando você deseja criar uma classe, primeiro você define a sua interface, o nome da classe, de qual classe ela vai herdar funcionalidades ( não obrigatório ), quais os atributos e métodos que esta classe irá ter, esta é a parte de interface que devemos escrever em um programa objective-c.</p>
<p>@interface ClassName: ParentClassName<br />
{<br />
atributos;<br />
}<br />
métodos;<br />
@end</p>
<p>// Exemplo prático</p>
<p>@interface Funcionario: Object<br />
{<br />
int  cpf<br />
int anoNascimento;<br />
}<br />
-(void) setCpf: (int) nCpf;<br />
-(void) setAnoNascimento: (int) nAno;<br />
-(void) printFicha;<br />
@end</p>
<p>Definimos uma classe chamada Funcionario que vai herdar caracteristicas de uma super classe chamada Object, esta classe vai ter os atributos  cpf e anoNascimento e 3 métodos de instância setCpf, setAnoNascimento e printFicha.</p>
<p>Esta é a seção interface de um programa objective-c, leia este artigo e estude o exemplo do artigo anterior.</p>
<p><strong>2. @implementation section</strong></p>
<p>A seção de implementação é onde você vai escrever o código dos métodos que foram definidos na interface, caso você defina um método na interface, mas não escreva sua implementação na hora da compilação, será dado um aviso que o método definido na interface não foi implementado, mas o programa vai ser compilado, caso por algum razão da vida, queira definir um método e não implementa-lo totalmente, você pode definir a assinatura do método e a parte da codificação entre {} deixar em branco.</p>
<p>@implementation ClassName;<br />
métodos;<br />
@end</p>
<p>Exemplo prático</p>
<p>@implementation Funcionario;<br />
-(void) setCpf: (int) nCpf<br />
{<br />
cpf = nCpf;<br />
}</p>
<p>-(void) setAnoNascimento: (int) nAno<br />
{<br />
ano=nAno;<br />
}</p>
<p>-(void) printFicha<br />
{<br />
printf(&#8220;Ficha do funcionario\n&#8221;);<br />
printf(&#8220;CPF: %i&#8221;,cpf);<br />
printf(&#8220;Ano Nascimento:%i&#8221;,ano);<br />
}</p>
<p>@end</p>
<p>@implementation Funcionario;<br />
Iniciamos a implementação dos métodos definidos na classe Funcionário.</p>
<p>-(void) setCpf: (int) nCpf<br />
Esta é a assinatura do método setCpf definido na interface funcionário.<br />
-   O sinal de &#8211; indica que é um método de instância, caso fosse estático seria +<br />
(void) se refere ao retorno do método, neste caso void indica que ele nao retorna nada<br />
setCpf:  Nome do método<br />
(int) nCpf informa que na hora da chamada, este método recebe um parametro inteiro<br />
{} O código para implementação do método deve estar entre chaves</p>
<p>// A implementação dos outros métodos&#8230;</p>
<p>@end Finaliza o bloco de implementação.</p>
<p><strong>3. Program Section</strong></p>
<p>Esta é a parte onde se inicia o seu programa a partir da função main.</p>
<p>int main (argc,char argv[])<br />
{<br />
Funcionario *pierre;<br />
pierre=[Funcionario alloc];<br />
pierre=[pierre init];<br />
[pierre setCpf 12345674831];<br />
[pierre setAnoNascimento 1969];<br />
[pierre printFicha];<br />
[pierre free];<br />
return 0;<br />
}</p>
<p>Este linha indica que pierre é um objeto do tipo funcionário, ele é usado para guardar valores da classe Funcionário, o * indica que ele é um ponteiro, iremos ver sobre ponteiros mais adiante.<br />
Funcionario *pierre;</p>
<p>Nesta linha nós estamos alocando um espaço da memória para o objeto pierre, ou seja foi disponibilizada uma área da memória para este objeto, não podemos ainda acessar seus atributos e métodos porque eles ainda não foram inicializados.<br />
pierre=[Funcionario alloc];</p>
<p>Depois de alocar espaço na memória, inicializamos o objeto ou seja tornamos acessiveis as suas propriedades e métodos.<br />
pierre=[pierre init]</p>
<p>Agora com o objeto instanciado, estamos usando os métodos que implementamos, o método setCpf e passando o parametro 12345674831.<br />
[pierre setCpf 12345674831]</p>
<p>Usando método setAnoNascimento e passando o parametro 1969. Em Java poderia ser algo do tipo pierre.setAnoNascimento(1969)<br />
[pierre setAnoNascimento 1969]</p>
<p>Abaixo usamos o método printFicha como podem ver ele não requer parametros.<br />
[pierre printFicha]</p>
<p>Abaixo usamos o método free, este método a exemplo do alloc e do init, não foi implementado por nós, mas sim herdado da classe Object, analisem a parte de interface, para comprovarem este fato, já deu para perceber como a herança é um conceito importante em OOP. Este método libera a memória usada pelo objeto, geralmente usamos quando não precisamos mais do objeto no nosso programa.<br />
[pierre free]</p>
<p>É o retorno da função main.<br />
return 0;</p>
<p>Chegamos ao fim de mais um artigo da série objective-c, espero que tenha ficado claro estes conceitos iniciais da estrutura lógica de um programa em objective-c. Agora é continuar os estudos e praticando sempre.</p>
<p>Abraços,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/objective-c-05-estrutura-logica-de-um-programa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Artigo 04 &#8211; Orientação a Objetos</title>
		<link>http://www.pontogeek.com.br/blog/objective-c-4-orientacao-a-objetos/</link>
		<comments>http://www.pontogeek.com.br/blog/objective-c-4-orientacao-a-objetos/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 11:05:41 +0000</pubDate>
		<dc:creator>Pierre Freire</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[iPhone/iPod]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[Pierre Freire]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.rodrigomerino.com.br/site/?p=4432</guid>
		<description><![CDATA[A série objective-c continua, e hoje iremos conhecer a estrutura básica de um programa feito nesta linguagem, até o momento os programas eram basicamentes codificados usando a sintaxe do C Ansi, como disse antes objective-c herdou  a simplicidade, velocidade do C e hoje iremos conhecer a orientação objetos, paradigma que ela herdou da Smalltalk, estes [...]]]></description>
			<content:encoded><![CDATA[<p style="center;"><a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/objtective1.jpg"><img class="aligncenter size-medium wp-image-4499" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/objtective1.jpg" alt="" width="120" height="120" /></a></p>
<p>A série objective-c continua, e hoje iremos conhecer a estrutura básica de um programa feito nesta linguagem, até o momento os programas eram basicamentes codificados usando a sintaxe do C Ansi, como disse antes objective-c herdou  a simplicidade, velocidade do C e hoje iremos conhecer a orientação objetos, paradigma que ela herdou da Smalltalk, estes conceitos irão nos acompanhar até chegarmos aos nossos exemplos em Cocoa, objetivo este que iremos alcançar até 2097&#8230; Vamos a mais um tutorial.<span id="more-4432"></span></p>
<p><strong>Leitura recomendada:</strong></p>
<p><strong>Posts anteriores da série:</strong></p>
<p>Desenvolvimento de sistemas para o mundo Apple<br />
Configurando um ambiente de desenvolvimento para iPod, iPhone e Mac<br />
Objective-c 01 &#8211; Conceitos iniciais e primeira aplicação via console de texto<br />
Objective-c 02 &#8211; Primeira aplicação compilada via XCode<br />
Objective-c 03 &#8211; Exercícios de revisão</p>
<p>Estes artigos você encontra no item programação, aqui no blog.</p>
<p style="justify;">Hoje iremos falar sobre <strong>orientação a objetos</strong> no objective-c. Iremos trabalhar com um exemplo simples e ilustrar os conceitos de classe, objetos métodos e atributos.<br />
Aos que não tem  familiaridade com este paradigma de programação, recomendo ler materiais sobre o assunto, pois o domínio da programação orientada a objetos é vital no desenvolvimento de aplicações em objective-c.</p>
<p>Vejam os link abaixo:<br />
<a href="http://pt.wikipedia.org/wiki/Orientação_a_objeto">Orientação a objetos Wikipédia</a></p>
<p><a href="http://www.dca.fee.unicamp.br/cursos/POOCPP/node3.html">Artigo orientação a objetos</a></p>
<p>Até agora vimos exemplos extremamente simples e usando apenas a função main, nada diferente dos programas feitos em C ansi.<br />
Vamos estudar alguns aspectos mais específicos do objective-c, em especial a orientação a objetos. Vamos escrever um pequeno programa que armazena e exibe o saldo de uma conta corrente. Como se trata de um exemplo,  nesta versão, não iremos contemplar, saques, depósitos, apenas o número da conta e saldo.<br />
Abaixo temos um diagrama de classe bem simples, do que iremos implementar, recomendo darem uma olhada em UML em especial diagrama de classes para quem tiver dúvidas.</p>
<p><a href="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/diagramaconta1.png"><img class="aligncenter size-medium wp-image-4433" src="http://www.pontogeek.com.br/blog/wp-content/uploads/2008/12/diagramaconta1.png" alt="" /></a></p>
<p>Diagrama da Classe Conta:</p>
<p>No diagrama acima, estamos definindo a classe Conta:</p>
<p>Nome da nossa classe<br />
Class Conta</p>
<p>São definidos 2 atributos, <strong>saldo e conta</strong>, private indica que eles serão acessiveis apenas dentro da classe, isto mostra um exemplo de um dos conceitos de OOP o encapsulamento, logo a seguir definimos os tipos destes atributos int e float.<br />
<strong>private int: conta<br />
private float: saldo</strong></p>
<p>Métodos da classe<br />
Os métodos trazem funcionalidades as classes,  nesta diagrama de classe definimos 3 métodos:<br />
setConta, setSaldo e printSaldo. Eles tem escopo público(public), diferente dos nossos atributos, eles podem ser acessados de fora da nossa classe,  o parametro void indica que eles não terão retorno algum. Os métodos setConta e setSaldo serão chamados mas terão um parametro obrigatório na hora da chamada respectivamente int e float.</p>
<p><strong>public void setConta(int)<br />
public void setSaldo(float)<br />
public void printSaldo()</strong></p>
<p>Codificando em objective-c</p>
<p>Agora que entendemos o nosso diagrama de classe, temos os atributos e os métodos definidos vamos escrever o nosso primeiro programa em objective-c com programação orientada a objetos.</p>
<p>Use o seu editor ou IDE favorito e vamos iniciar os trabalhos.<br />
É importante saber que um programa em objective-c tem 3 partes bem definidas:</p>
<p><strong>01. Definição da interface das classes<br />
02. Implementação dos métodos definidos na interface<br />
03. A função main e o ínicio do programa em si.</strong></p>
<p>Listagem do programa em azul:</p>
<p><strong>// Programa exemplo orientação a objetos<br />
// Programador: Pierre Freire<br />
// E-mail: blog@pierrefreire.com.br<br />
// Versao: 0.01</strong></p>
<p><strong>//&#8212;&#8212;&#8212;&#8212; Definindo as diretrizes &#8212;&#8212;&#8212;&#8212;-<br />
#import &lt;stdio.h&gt;<br />
#import &lt;objc/Object.h&gt;</strong></p>
<p><strong>//&#8212;&#8212;&#8212;&#8212;- Definição da interface das classes &#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p><strong>@interface Conta:Object<br />
{<br />
int conta;<br />
float saldo;<br />
}<br />
-(void)  setConta: (int) numberConta;<br />
-(void)  setSaldo: (float) valorOperacao;<br />
-(void)  printSaldo;<br />
@end</strong></p>
<p><strong>//&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; Implementação dos métodos definidos na classe &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p><strong>@implementation Conta<br />
-(void) setConta: (int) numberConta<br />
{<br />
conta=numberConta;<br />
}</strong></p>
<p><strong>-(void) setSaldo: (float) valorOperacao<br />
{<br />
saldo=valorOperacao;<br />
}</strong></p>
<p><strong>-(void) printSaldo;<br />
{<br />
printf(&#8220;Extrato bancario \n\n&#8221;);<br />
printf(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\n&#8221;);<br />
printf(&#8220;Conta:%i\n&#8221;,conta);<br />
printf(&#8220;Saldo:%f\n&#8221;,saldo);<br />
}<br />
@end</strong></p>
<p><strong>//&#8212;&#8212;&#8212;&#8212;- Programa principal &#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p><strong>int main (int argc, char *argv[])<br />
{<br />
// Cria um objeto do tipo Conta<br />
Conta *itau;</strong></p>
<p><strong>// Aloca um espaco para o objeto itau e inicializa<br />
itau = [Conta alloc];<br />
itau = [itau init];</strong></p>
<p><strong>// Usando metodo setConta do objeto itau<br />
[itau setConta: 12];</strong></p>
<p><strong>// Usando metodo setSaldo do objeto itau<br />
[itau setSaldo: 200.00];</strong></p>
<p><strong>// Usando o metodo printSaldo<br />
[itau printSaldo];</strong></p>
<p><strong>// Liberando o objeto da memoria &#8211; Metodo free<br />
[itau free];<br />
return 0;<br />
}</strong></p>
<p><strong></strong></p>
<p>Entendendo o código</p>
<p><strong>01 &#8211; Definindo as diretrizes do pré-processador</strong><br />
//&#8212;&#8212;&#8212;&#8212; Definindo as diretrizes &#8212;&#8212;&#8212;&#8212;-<br />
#import &lt;stdio.h&gt;<br />
#import &lt;objc/Object.h&gt;</p>
<p>Como comentamos anteriormente este parte do código, definimos as diretrizes do pré-processador, neste caso, incluimos a biblioteca stdio.h porque estamos usando a função printf e a Object.h porque estamos usando a classe Object.</p>
<p><strong>02 &#8211; Definindo a interface da classe</strong></p>
<p>//&#8212;&#8212;&#8212;&#8212;- Definição da interface das classes &#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>@interface Conta:Object<br />
{<br />
int conta;<br />
float saldo;<br />
}<br />
-(void)  setConta: (int) numberConta;<br />
-(void)  setSaldo: (float) valorOperacao;<br />
-(void)  printSaldo;<br />
@end</p>
<p>A definição da interface da classe é uma espécie de contrato, onde você define o nome da sua classe, se ela herda característica de outra classe os atributos que a compoem e os métodos que ela irá ter.  Ou seja definimos apenas a estrutura da classe.</p>
<p>Definimos a interface, o nome da classe será Conta e ela é subclasse de Object ou seja ele herda todos os métodos e atributos desta classe. Definimos os atributos conta e saldo sendo tipo int ( inteiro) e float respectivamente.</p>
<p>@interface Conta:Object<br />
{<br />
int conta;<br />
float saldo;<br />
}</p>
<p>Definimos os 3 métodos da classe o sinal de &#8211; indica que será um método de instância ou seja ele só pode ser acessado depois de instanciada o objeto da classe, mas adiante veremos mais detalhes sobre isto. setConta e setSaldo necessitam de um parametro do tipo int e a variavel usada para este parametro é definida logo adiante numberConta e valorOperação respectivamente. O @end fecha o bloco.<br />
-(void)  setConta: (int) numberConta;<br />
-(void)  setSaldo: (float) valorOperacao;<br />
-(void)  printSaldo;<br />
@end</p>
<p><strong>03 &#8211; Implementação dos métodos definidos na classe</strong></p>
<p>Inicio do bloco de implementação da classe Conta<br />
@implementation Conta</p>
<p>Implementação do método setConta, o método não retorna nada (void) na sua chamada ele recebe um inteiro(int) que será armazenado na variavel numberConta no corpo do método definido pelos &#8220;{}&#8221; ele armazena no atributo conta o número passado por parâmetro.<br />
-(void) setConta: (int) numberConta<br />
{<br />
conta=numberConta;<br />
}</p>
<p>Implementação do método setSaldo, o método não retorna nada (void) na sua chamada ele recebe um float(float) que será armazenado na variavel valorOperacao no corpo do método definido pelos &#8220;{}&#8221; ele armazena no atributo saldo o número passado por parâmetro.</p>
<p>-(void) setSaldo: (float) valorOperacao<br />
{<br />
saldo=valorOperacao;<br />
}</p>
<p>Este método nada retorna (void) não recebe parametros e simplesmente imprime as informações armazenadas por setConta e setSaldo.</p>
<p>-(void) printSaldo;<br />
{<br />
printf(&#8220;Extrato bancario \n\n&#8221;);<br />
printf(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\n&#8221;);<br />
printf(&#8220;Conta:%i\n&#8221;,conta);<br />
printf(&#8220;Saldo:%f\n&#8221;,saldo);<br />
}<br />
@end</p>
<p><strong>4 &#8211; Programa principal</strong><br />
Nesta parte do código é de fato onde se inicia a execução do nosso programa, vamos ver passo a passo o que acontece.</p>
<p>Função main, é o inicio do programa, ela retorna um inteiro ao seu final e alguns parametros podem ser passados via linha de comando, mais adiante veremos como isto funciona.<br />
int main (int argc, char *argv[])<br />
{</p>
<p>Nesta linha criamos uma variavel chamada itau, que guardará valores da classe Conta, ou seja poderemos acessar os métodos e atributos desta classe atraves deste objeto, o * informa que itau é também um ponteiro.<br />
Conta *itau;</p>
<p>Antes de usarmos o objeto é necessário alocar espaço na memória para ele.<br />
itau = [Conta alloc];</p>
<p>Após alocar espaço inicializamos as variaveis que fazem parte do objeto, no nosso exemplo os atributos conta e saldo.<br />
itau = [itau init];</p>
<p>Tudo pronto, começamos a usar o nosso objeto, acessamos o método setConta definido na classe e passamos o parâmetro 12 para ele. Algumas linguagens se usam o ponto, por exemplo em Java esta chamada poderia ser itau.setconta(12), abaixo a chamada deste método em objective-c.<br />
[itau setConta: 12];</p>
<p>Aqui estamos executando o método setSaldo e passando o valor 200.00, como ele aceita um float podemos passar a parte decimal.<br />
[itau setSaldo: 200.00];</p>
<p>Agora que preenchemos os atributos do objeto conta e saldo, usamos o método print para imprimir o resultado na console.<br />
[itau printSaldo];</p>
<p>Já usamos o objeto para atribuir os valores e imprimir, agora usamos o método free para liberar a memória, este método não foi criado por você, como a nossa classe Conta herda Object ela pode usar este método que pertence a Object, este é o conceito de herança, não tivemos o trabalho de implementar este método, simplesmente herdamos ele de outra classe.<br />
[itau free];</p>
<p>Estamos finalizando a função main e na declaração dela ela exige que se retorne um inteiro, estamos retornando o valor zero, que na verdade é um código para informar ao Sistema operacional que o programa terminou com sucesso.<br />
return 0;<br />
}</p>
<p>Resultado do programa.</p>
<p>Extrato bancario<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Conta:12<br />
Saldo:200.000000</p>
<p>Bem, ficamos por aqui, estude o exemplo, crie um programa qualquer parecido e poste suas dúvidas nos comentários ou me mande um e-mail.<br />
Na próxima aula iremos fazer alguns exercícios e incrementaremos o nosso programa de conta, adicionando novos métodos. E estude orientação a objetos.</p>
<p>Durante o curso iremos estudar outros conceitos de OOP, isto foi apenas uma pequena introdução de como se usar OOP em objective-c.<br />
Espero que esteja sendo útil para alguém estes tutoriais.</p>
<p>Abraços.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pontogeek.com.br/blog/objective-c-4-orientacao-a-objetos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

