<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Programacao on Peczenyj's Blog</title><link>http://pacman.blog.br/categories/programacao/</link><description>Recent content in Programacao on Peczenyj's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 21 May 2008 13:47:00 -0300</lastBuildDate><atom:link href="http://pacman.blog.br/categories/programacao/atom.xml" rel="self" type="application/rss+xml"/><item><title>Hello World orientado a objetos</title><link>http://pacman.blog.br/blog/2008/05/21/hello-world-orientado-objetos/</link><pubDate>Wed, 21 May 2008 13:47:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2008/05/21/hello-world-orientado-objetos/</guid><description>&lt;div class='post'>
Hoje em dia é raro um desenvolvedor conhecer bem apenas uma linguagem. Em nome da multidisciplinaridade, decidi mostrar algums exemplos do mesmo programa: uma classe HelloWord com um construtor que recebe uma mensagem ("ola mundo") e um método show() que imprime essa mensagem.&lt;br />&lt;br />Vejamos um exemplo em C++&lt;br />&lt;br />&lt;pre>&lt;code>#include &amp;lt;iostream&amp;gt;&lt;br />#include &amp;lt;string&amp;gt;&lt;br />using namespace std;&lt;br />&lt;br />class HelloWorld{&lt;br /> string mensagem;&lt;br /> public:&lt;br /> HelloWorld(string mensagem) { // construtor!&lt;br /> this-&amp;gt;mensagem = mensagem;&lt;br /> }&lt;br /> &lt;br /> void show() { // metodo show&lt;br /> cout &amp;lt;&amp;lt; "mensagem: " &amp;lt;&amp;lt; this-&amp;gt;mensagem &amp;lt;&amp;lt; endl;&lt;br /> }&lt;br />};&lt;br />int main()&lt;br />{&lt;br /> HelloWorld obj("ola mundo");&lt;br /> obj.show();&lt;br /> return(0);&lt;br />}&lt;br />&lt;/code>&lt;/pre>&lt;br />&lt;br />Agora o mesmo código em Java:&lt;br />&lt;br />&lt;pre>&lt;code>package Hello;&lt;br />&lt;br />public class HelloWorld{&lt;br /> private String mensagem;&lt;br /> public HelloWorld(String mensagem){ &lt;br /> this.mensagem = mensagem;&lt;br /> }&lt;br /> public void show() { &lt;br /> System.out.println("mensagem: " + mensagem);&lt;br /> }&lt;br /> public static void main(String [] args){&lt;br /> HelloWorld obj = new HelloWorld("ola mundo");&lt;br /> obj.show();&lt;br /> }&lt;br />}&lt;/code>&lt;/pre>&lt;br />&lt;br />Agora, percebam a simplicidade do Ruby:&lt;br />&lt;pre>&lt;code>class HelloWorld&lt;br /> def initialize(mensagem)&lt;br /> @mensagem = mensagem &lt;br /> end&lt;br /> def show &lt;br /> puts "mensagem: #{@mensagem}"&lt;br /> end&lt;br />end&lt;br />&lt;br />obj = HelloWorld.new "ola mundo"&lt;br />obj.show&lt;/code>&lt;/pre>&lt;br />&lt;br />Agora em Perl (sim, Perl!)&lt;br />&lt;pre>&lt;code>package HelloWorld;&lt;br />&lt;br />sub new&lt;br />{&lt;br /> my ($class, $mensagem) = @_;&lt;br /> my $self = { mensagem =&amp;gt; $mensagem };&lt;br /> bless $self, $class; # abençoando a variavel!&lt;br /> return $self;&lt;br />}&lt;br />&lt;br />sub show&lt;br />{&lt;br /> my $self = shift; # sim, ela vem como argumento!&lt;br /> print "mensagem: " . $self-&amp;gt;{mensagem} . "\n";&lt;br />}&lt;br />&lt;br />my $obj = new HelloWorld("ola mundo");&lt;br />$obj-&amp;gt;show(); # parece artificial, não?&lt;br />&lt;br />1;&lt;/code>&lt;/pre>&lt;br />&lt;br />PHP também é: &lt;br />&lt;pre>&lt;code>&amp;lt;?php&lt;br />&lt;br />Class HelloWorld{&lt;br /> var $mensagem = "";&lt;br /> function HelloWorld($mensagem){&lt;br /> $this-&amp;gt;mensagem = $mensagem;&lt;br /> }&lt;br /> function show(){&lt;br /> echo "mensagem : " . $this-&amp;gt;mensagem . "&amp;lt;br/&amp;gt;";&lt;br /> }&lt;br />}&lt;br />&lt;br />$obj = new HelloWorld("ola mundo");&lt;br />$obj-&amp;gt;show();&lt;br />?&amp;gt;&lt;/code>&lt;/pre>&lt;br />&lt;br />Por fim, vamos criar um tipo usando JavaScript&lt;br />&lt;pre>&lt;code>function HelloWorld(mensagem){&lt;br /> this.mensagem = mensagem;&lt;br /> this.show = function(){&lt;br /> alert("mensagem: " + this.mensagem);&lt;br /> }&lt;br />}&lt;br />&lt;br />var obj = new HelloWorld("ola mundo");&lt;br />obj.show();&lt;/code>&lt;/pre>&lt;br />&lt;br />Edit: Python, atendendo a diversos pedidos&lt;br />&lt;pre>&lt;code>class HelloWorld:&lt;br /> def __init__(self, arg):&lt;br /> self.message = arg&lt;br />&lt;br /> def show(self):&lt;br /> print "mensagem: ", self.message&lt;br />&lt;br />hello = HelloWorld("Ola Mundo")&lt;br />hello.show()&lt;/code>&lt;/pre>&lt;br />&lt;br />A diferença entre uma linguagem e outra está (entre outras coisas) na sintaxe: em Perl eu tenho que criar os mecanismos na mão (com bless e receber $self) mas em Java e Ruby é tudo muito natural. Em Javascript eu não tenho uma construtor propriamente dito (muito menos classes) mas uma função (e crio um objeto dando um new nessa função). &lt;br />&lt;br />Vou abordar o tema "herança" no proximo post, espero que seja útil :)&lt;/div>
&lt;h2>Comments&lt;/h2>
&lt;div class='comments'>
&lt;div class='comment'>
&lt;div class='author'>douttorx&lt;/div>
&lt;div class='content'>
Opa cara, que legal o post.&lt;BR/>estava procurando hello world em C++.&lt;BR/>um abraço.&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Cauê&lt;/div>
&lt;div class='content'>
Oi cara!&lt;BR/>Sou do Rio grande do sul e faço faculdade de Eng.Elétrica na Unipampa de Alegrete e vi um post teu em um site sobre um programa em C++ que precisava usar a biblioteca math.&lt;BR/>Tirei uma duvida ali contigo pq não lembrava que tinha que passar o grau pra radianos antes de transformar.&lt;BR/>Eu gostaria que se quando eu tiver alguma duvida eu posso te avisar e quem sabe evoluir meus conhecimentos em C++.&lt;BR/>Abraço.&lt;BR/>Meu msn é : caue_cmm@hotmail.com&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Marcelo Martins&lt;/div>
&lt;div class='content'>
Bah, Perl dói o olho. hehe&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Airton Arantes&lt;/div>
&lt;div class='content'>
Só para complementar o post do amigo,Olhem esse post no meu blog:&lt;BR/>&lt;BR/>http://defopenblog.wordpress.com/2008/05/07/e-eu-que-pensei-que-ja-tinha-visto-de-tudo/&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
LG, pena que o comentario destruiu a indentação (que é fundamental no Python). Também esqueci do C#, mas é 99% igual ao Java.&lt;BR/>&lt;BR/>Só não consegui fazer um exemplo em SmallTalk :(&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>lg&lt;/div>
&lt;div class='content'>
Tiago,&lt;BR/>&lt;BR/>Muito bacana seu post. &lt;BR/>Colaborando com a proposta do seu texto, fiz um código, em Python, que ficou assim:&lt;BR/>&lt;BR/>class helloWord():&lt;BR/> def __init__(self, msg):&lt;BR/> self.hello_msg = msg&lt;BR/> def show(self):&lt;BR/> print self.hello_msg&lt;BR/> &lt;BR/>a = helloWord("Ola Mundo !")&lt;BR/>a.show()&lt;BR/>&lt;BR/>Abraços,&lt;BR/>Luiz Guilherme &lt;BR/>lg.aldabalde em gmail.com&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Gallimimus&lt;/div>
&lt;div class='content'>
Pô Thiago faltou em Shell Script ahahahah, abraços e parabéns pelo post.&lt;BR/>&lt;BR/>Carlos Ferreira&lt;BR/>http://carnivorosemdentes.blogspot.com/&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>TDD com Perl</title><link>http://pacman.blog.br/blog/2008/05/02/tdd-com-perl/</link><pubDate>Fri, 02 May 2008 15:00:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2008/05/02/tdd-com-perl/</guid><description>&lt;div class='post'>
É possivel fazer Test Driven Development com Perl? Mas claro :)&lt;br />&lt;br />Artigo interessante sobre &lt;a href="http://perldoc.perl.org/Test/More.html">Test::More&lt;/a>:&lt;br />&lt;a href="http://www.testingreflections.com/node/view/5333">http://www.testingreflections.com/node/view/5333&lt;/a>&lt;br />&lt;br />Tutorial bem sucinto:&lt;br />&lt;a href="http://www.wgz.org/chromatic/perl/IntroTestMore.pdf">http://www.wgz.org/chromatic/perl/IntroTestMore.pdf&lt;/a>&lt;br />&lt;br />Excelente apresentação:&lt;br />&lt;a href="http://wellington.pm.org/archive/200606/tdd/">http://wellington.pm.org/archive/200606/tdd/&lt;/a>&lt;/div>
&lt;h2>Comments&lt;/h2>
&lt;div class='comments'>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
Trabalho que é coisa séria ninguem comenta... ;-)&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Programando em C para console - parte 1</title><link>http://pacman.blog.br/blog/2008/04/02/programando-em-c-para-cons/</link><pubDate>Wed, 02 Apr 2008 14:10:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2008/04/02/programando-em-c-para-cons/</guid><description>&lt;div class='post'>
(Depois de um fecundo primeiro de Abril... )&lt;br />&lt;br />Cada vez mais eu me espanto com a quantidade de novatos que tentam fazer programas para o "modo console" que não fazem o menor sentido.&lt;br />&lt;br />Programas com menuzinho (1 - saque , 2 - deposito, 3 - sair) ou do estilo "digite um numero (q para sair)" são totalmente contra-produtivos. O novato perde TEMPO fazendo um monte de código desnecessário quando esquece o que deveria fazer (o tal do &lt;span style="font-style:italic;">algoritmo&lt;/span>).&lt;br />&lt;br />Veja um exemplo: um programa que receba uma quantidade variavel de números e que imprima a soma dos mesmos. IMHO a forma mais interessante para fazer isso é pegar os números como argumentos do programa principal. Vc cria um programa console absolutamente limpo e facil de scriptar, por exemplo.&lt;br />&lt;br />Veja só:&lt;br />&lt;br />&lt;pre>&lt;code>#include &amp;lt;stdio.h&amp;gt;&lt;br />&lt;br />int main(int argc, char *argv[]){&lt;br /> double soma = 0.0;&lt;br />&lt;br /> printf("A soma dos numeros eh %g\n",soma);&lt;br />&lt;br /> return 0;&lt;br />}&lt;/code>&lt;/pre>&lt;br />&lt;br />Feito esse simples arquivo, vamos compilar&lt;br />&lt;pre>$ gcc -Wall soma.c&lt;br />$ ./a.out 1 2 3 4 5 &lt;br />A soma dos numeros eh 0&lt;/pre>&lt;br />&lt;br />Ai vc fala "po, ta errado!", mas claro, eu primeiro escrevi a base do meu programa. Perceba que eu compilei com a opção -Wall, que me informa todos os &lt;span style="font-style:italic;">warnings&lt;/span> que a compilação pode gerar (o que sempre é uma excelente pratica, eu procuro compilar sempre com 0 warnings).&lt;br />&lt;br />Feito isso, vamos definir 2 coisas:&lt;br /> - O algoritmo da soma e&lt;br /> - Possiveis fluxos de excessão.&lt;br />&lt;br />Vou partir do suposto que, se vc digitar alguma coisa que não seja um numero, eu vou ignorar e considerar como 0. Caso eu não informe nenhum numero ao programa, isso significa que estou faltando com alguma coisa, nesse caso vou informar uma mensagem elucidativa sobre o uso do programa.&lt;br />&lt;br />&lt;pre>&lt;code>#include &amp;lt;stdio.h&amp;gt;&lt;br />#include &amp;lt;stdlib.h&amp;gt;&lt;br />&lt;br />int main(int argc, char *argv[]){&lt;br /> int i;&lt;br /> double soma = 0.0;&lt;br />&lt;br /> if(argc == 1){&lt;br /> fprintf(stderr,"Faltando Argumentos!\n");&lt;br /> fprintf(stderr,"Uso: %s x1 [ x2 .. xN ]\n",argv[0]);&lt;br /> return 1;&lt;br /> }&lt;br />&lt;br /> for(i=1;i&amp;lt;argc;i++) &lt;br /> soma += atof(argv[i]);&lt;br />&lt;br /> printf("A soma dos numeros eh %g\n",soma);&lt;br />&lt;br /> return 0;&lt;br />}&lt;/code>&lt;/pre>&lt;br />&lt;br />Todos os argumentos que eu passo para o programa, incluindo o nome do mesmo, ficam no vetor &lt;span style="font-weight:bold;">argv&lt;/span>, e o número de argumentos fica na variavel &lt;span style="font-weight:bold;">arcc&lt;/span>. Dessa forma, o nome do programa é o argv[0] e, se eu não passar nenhum argumento adicional, argc será 1. A função atof converte a string para um número de ponto flutuante e retorna 0 se não for possivel converter.&lt;br />&lt;br />Simples, não? Agora vamos executar:&lt;br />&lt;br />&lt;pre>$ ./a.out &lt;br />Faltando Argumentos!&lt;br />Uso: ./a.out x1 [ x2 .. xN ]&lt;br />$ echo $?&lt;br />1&lt;br />$ ./a.out 1 2 3 4 5&lt;br />A soma dos numeros eh 15&lt;br />$ echo $?&lt;br />0&lt;/pre>&lt;br />&lt;br />A mensagem de uso utiliza uma notação no manual de alguns programas do mundo unix: colocar os argumentos opcionais entre colchetes. Eu informo que preciso de pelo menos &lt;span style="font-weight:bold;">um&lt;/span> argumento. Caso eu entre no fluxo de excessão, o meu main retorna um valor diferente de 0 para o sistema operacional que pode ser capturado pela variavel de ambiente $? (nesse caso estou em um linux utilizando o bash, em outros sistemas mais exotéricos como o Windows eu não imagino como vc poderia capturar essa informação, tampouco imagino se ela seria util).&lt;br />&lt;br />Perceba que eu posso criar um script extremamente simples para utilizar esse programa, assim como testar o resultado é uma tarefa de um grep (ou diff). Eu poderia juntar um script de teste e um makefile nesse post mas estou esperando um exemplo um pouco mais interessante.&lt;br />&lt;br />Eu criei um programa sucinto, facil de entender e muito util, sem ter que perguntar para o usuario nada. transformar esse programa num que calcula a média, por exemplo, é uma tarefa de colocar apenas uma linha (na verdade uma subtração e uma divisão) a mais. Espero que os programadores novatos se inspirem nessa forma de pensar e que utilizem os programas básicos do unix como o grep, cat, diff, cp, etc, para seus futuros trabalhos.&lt;/div>
&lt;h2>Comments&lt;/h2>
&lt;div class='comments'>
&lt;div class='comment'>
&lt;div class='author'>Felipe&lt;/div>
&lt;div class='content'>
Aguardando....&lt;BR/>&lt;BR/>OFF: As mentiras de ontem forma muito engraçadas, a do Java mesmo :-)&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
Felipem, o GDB por si só precisaria de um post exclusivo. Tenho que pensar bem no exemplo para que seja util.&lt;BR/>&lt;BR/>Estou pensando num algoritmo de ordenação com algum &lt;I>errinho&lt;/I>, ou algum processo recursivo como calcular fibonacci, etc.&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Felipe&lt;/div>
&lt;div class='content'>
Poucos sabem o que é um UNIX. Programam no DOS usando um while(1) para não fechar a tela do DOS, não sabem nem ir no cmd e digitar o nome do programa, eles clicam no executável.&lt;BR/>&lt;BR/>O C é uma linaguagem que os programadores mais comuns não sabem/se interessam. Ler o TCPL sem entender o que é um wc, grep, sort... é IMHO impossível.&lt;BR/>&lt;BR/>Aguardo os posts sobre getopt e GDB(ah sim GDB não está na lista de "promessas", mas vai ter, vai?)&lt;/div>
&lt;/div>
&lt;div class='comment'>
&lt;div class='author'>Tiago Peczenyj&lt;/div>
&lt;div class='content'>
Duas coisas que esqueci de comentar: &lt;BR/>&lt;BR/>1) As mensagens de erro vão para a saida de erro (stderr)&lt;BR/>&lt;BR/>2) A mensagem "A soma dos numeros eh " é totalmente desnecessária. Inclusive seria mais sucinto se a resposta fosse apenas o valor numérico.&lt;BR/>&lt;BR/>fica para a proxima então: scripts de teste, makefile, getopt (posso querer utilizar uma opção -v [verbose]) e, se der tempo, localização!&lt;/div>
&lt;/div>
&lt;/div></description></item></channel></rss>