sábado, janeiro 20, 2007

Python Orientado a Objetos

Hoje vai a primeira dica enviada por um visitante do blog, um amigo, Flavio Ribeiro. Foi ele quem me aprensentou a linguagem Python, quando começamos o curso de Sistemas em Telecomunicações no CEFET-PB, e assim como eu, adora a linguagem e quer aprender cada vez mais sobre ela.

Bem, Python é uma linguagem Orientad a Objetos, e aqui Flavio dar uma introdução de como funciona esse tipo de programação:



Python Orientado a Objetos

Olá a todos, hoje vou tentar *introduzir* alguns conceitos de orientação a objetos e creio que isso também me ajudará a tirar algumas dúvidas sobre essa poderosa forma de programação.

A programação orientada a objetos visa prioritariamente o reaproveitamento de código, além de deixar o código mais legivel, elegante e (claro) menor.

Tudo comeca com uma Classe. Ela serve como fábrica de objetos (calma, jájá explico o que é um objeto), e é a base da POO. Tratando isso de uma maneira mais simples, vamos imaginar que você quer criar um joguinho onde terão vários personagens.

class Personagem:
""" Classe que cria personagens do jogo """
def __init__(self,Nome,Poder):
""" Método construtor da classe, onde recebe os parametros Nome e Poder de cada bonequinho """
self.Nome = Nome
self.Poder = Poder
print 'Criando personagem ',Nome,' com poder ',Poder
def Correr(self):
print self.Nome,' está correndo!'
def Chute(self,Adversario):
print self.Nome,' Deu um chute em ',Adversario

Vamos agora explicar: Uma classe chamada Personagem foi criada, e para que ela fabrique algum bonequinho, precisa satisfazer os parametros do método construtor (__init__). A fabricação dele é o que chamamos de objeto ou instância de classe, e agora iremos criar um:

>>> Smurf = Personagem('Papai Smurf',30)
>>> Criando personagem Papai Smurf com poder 30

Viu? Agora temos um objeto chamado Smurf, ou seja, demos vida ao Papai Smurf e ele está pronto pra correr!

>>> Smurf.Correr()
>>> Papai Smurf está correndo!

Agora, para o chute, você deve ter visto que na definição do metodo tem um parametro Adversario, notou? Então teremos que dizer quem vamos chutar!

>>> Smurf.Chute('Gargamel')
>>> Papai Smurf Deu um chute em Gargamel

Deu pra entender como funciona? Da mesma forma que criamos o objeto Smurf, poderemos criar mais inumeros personagens usando apenas essa classe Personagem, usando esses mesmos comandos que digitei acima.

Ainda tem dúvidas não é? O que aquele self representa? O que são aquelas três aspas no inicio dos métodos e da classe? Toda classe precisa de parametros iniciais?

Vamos lá:
O self representa uma váriavel de objeto. Sem o self, quando fossem criados dois ou mais objetos as variaveis iriam sempre ser alteradas e citando como exemplo o código acima, se o ultimo bonequinho chamado 'Tux' fosse criado, todos os outros bonequinhos iam passar a chamar-se Tux também, assim como iam passar a ter o mesmo poder do Tux. Com o self, cada váriavel corresponde ao seu objeto!

As três aspas são chamadas de Doc String. Quando um programa é muito extenso, essas doc strings são de extrema necessidade para que o programador se oriente, elas documentam o código. Olha só como funciona usando o mesmo código acima:

>>> Personagem.__doc__
>>> ' Classe que cria personagens do jogo '

Sacou?

Quanto a ultima pergunta, Não. Não é preciso que toda classe receba dados iniciais, eles podem ser manipulados após a criação dos objetos apenas adicionando metodos de set. Eu poderia criar mais um método ali chamado 'RecebeNome' onde só após a criação do objeto eu iria dar nome a ele.

Bem, pretendo continuar a fazer mini-tutoriais como esse a medida que eu for tomando maior conhecimento da linguagem python. Dessa vez foi apenas um esquente, e espero que tenha ajudado alguem.


9 comentários:

Bruno Linhares disse...

Ow... Sem dúvida ajudou! Ficou mais claro para mim a definição de Classes, e como utilizá-las.

Rinaldi disse...

legal! :D

mas poderia arrumar o problema de indentação na tag code!!!

a falta dela, atrapalha o entendimento

Jader Rubini disse...

Ajudou sim!
Parabéns pelo artigo e continue sim. ;)
Um abraço

Linux Dummy disse...

Finalmente consegui entender esse bendito self e o funcionamento das classes!
obrigado mais uma vez amigo!

Abraços!

Unknown disse...

Valew!! Ajudou sim. Será que existem outros tutoriais como esses?
Td de bom
Rodrigo

Anônimo disse...

Até antes de ler esse artigo eu estava voando sobre programação a objetos, principalmente sobre o self, agora clareou geral.

Se tivesse uma continuação seria ultra bem vindo XD

Anônimo disse...

Cara, me ajudou mesmo. Estou começando com python e entendi perfeitamente.

teste_blogger disse...
Este comentário foi removido pelo autor.
Flávio Ribeiro disse...

Slides de um minicurso de Introdução a Linguagem de Programação Python: http://www.slideshare.net/flavioribeiro/introduo-a-linguagem-de-programao-python-presentation