quarta-feira, 21 de maio de 2008

Hello World orientado a objetos

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.

Vejamos um exemplo em C++

#include <iostream>
#include <string>
using namespace std;

class HelloWorld{
string mensagem;
public:
HelloWorld(string mensagem) { // construtor!
this->mensagem = mensagem;
}

void show() { // metodo show
cout << "mensagem: " << this->mensagem << endl;
}
};
int main()
{
HelloWorld obj("ola mundo");
obj.show();
return(0);
}


Agora o mesmo código em Java:

package Hello;

public class HelloWorld{
private String mensagem;
public HelloWorld(String mensagem){
this.mensagem = mensagem;
}
public void show() {
System.out.println("mensagem: " + mensagem);
}
public static void main(String [] args){
HelloWorld obj = new HelloWorld("ola mundo");
obj.show();
}
}


Agora, percebam a simplicidade do Ruby:
class HelloWorld
def initialize(mensagem)
@mensagem = mensagem
end
def show
puts "mensagem: #{@mensagem}"
end
end

obj = HelloWorld.new "ola mundo"
obj.show


Agora em Perl (sim, Perl!)
package HelloWorld;

sub new
{
my ($class, $mensagem) = @_;
my $self = { mensagem => $mensagem };
bless $self, $class; # abençoando a variavel!
return $self;
}

sub show
{
my $self = shift; # sim, ela vem como argumento!
print "mensagem: " . $self->{mensagem} . "\n";
}

my $obj = new HelloWorld("ola mundo");
$obj->show(); # parece artificial, não?

1;


PHP também é:
<?php

Class HelloWorld{
var $mensagem = "";
function HelloWorld($mensagem){
$this->mensagem = $mensagem;
}
function show(){
echo "mensagem : " . $this->mensagem . "<br/>";
}
}

$obj = new HelloWorld("ola mundo");
$obj->show();
?>


Por fim, vamos criar um tipo usando JavaScript
function HelloWorld(mensagem){
this.mensagem = mensagem;
this.show = function(){
alert("mensagem: " + this.mensagem);
}
}

var obj = new HelloWorld("ola mundo");
obj.show();


Edit: Python, atendendo a diversos pedidos
class HelloWorld:
def __init__(self, arg):
self.message = arg

def show(self):
print "mensagem: ", self.message

hello = HelloWorld("Ola Mundo")
hello.show()


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).

Vou abordar o tema "herança" no proximo post, espero que seja útil :)

7 comentários:

Gallimimus disse...

Pô Thiago faltou em Shell Script ahahahah, abraços e parabéns pelo post.

Carlos Ferreira
http://carnivorosemdentes.blogspot.com/

lg disse...

Tiago,

Muito bacana seu post.
Colaborando com a proposta do seu texto, fiz um código, em Python, que ficou assim:

class helloWord():
def __init__(self, msg):
self.hello_msg = msg
def show(self):
print self.hello_msg

a = helloWord("Ola Mundo !")
a.show()

Abraços,
Luiz Guilherme
lg.aldabalde em gmail.com

Tiago Peczenyj disse...

LG, pena que o comentario destruiu a indentação (que é fundamental no Python). Também esqueci do C#, mas é 99% igual ao Java.

Só não consegui fazer um exemplo em SmallTalk :(

Airton Arantes disse...

Só para complementar o post do amigo,Olhem esse post no meu blog:

http://defopenblog.wordpress.com/2008/05/07/e-eu-que-pensei-que-ja-tinha-visto-de-tudo/

Marcelo Martins disse...

Bah, Perl dói o olho. hehe

Cauê disse...

Oi cara!
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.
Tirei uma duvida ali contigo pq não lembrava que tinha que passar o grau pra radianos antes de transformar.
Eu gostaria que se quando eu tiver alguma duvida eu posso te avisar e quem sabe evoluir meus conhecimentos em C++.
Abraço.
Meu msn é : caue_cmm@hotmail.com

douttorx disse...

Opa cara, que legal o post.
estava procurando hello world em C++.
um abraço.