Começando com Python #3/undefined

Continuando a nossa série de posts sobre como aprender Python, vamos agora começar a falar de OO com Python. Para quem não viu os outros posts, pode ler o primeiro post aqui e o segundo aqui.

Não, eu não esqueci de continuar postando sobre python, apenas demorei um pouco na seqüência.

Objetos são a unidade fundamental de qualquer sistema orientado a objetos. Orientação a objetos é um termo que descreve uma série de técnicas e soluções para problemas computacionais. No nosso caso específico, vamos falar apenas de programação Orientada a Objetos, que é um paradigma de programação no qual um programa é estruturado em objetos, e que enfatiza abstração, encapsulamento, polimorfismo e herança. Em Python, tudo é um objeto (tipos, valores, classes, funções, métodos e, é claro, instâncias).

Em Python, a estrutura essencial para definir novos objetos é a classe. As classes são definidas em código-fonte, onde recebem um nome identificador e encapsulam um conjunto de atributos (dados) e métodos (operações). Vejamos a estrutura simples de uma classe em Python:

[code]class MinhaClasse:
    atributo1 = valor;
    atributo2 = valor;
    def metodo1(self):
        #faz alguma coisa
    def metodo2(self, atributo1):
        #faz alguma coisa[/code]

Vejamos uma classe funcional agora:

[code]class HelloWorld:
    'Minha Primeira Classe em Python'
    i = 123
    def funcao(self):
        return 'Hello World!!!'[/code]

As classes suportam dois tipos distintos de operações, são elas: instanciação e referência a atributos.

A referência a atributos possui uma sintaxe padrão para os objetos de classses em Python: obj.atributo. Sendo obj o seu objeto classe e atributo algum atributo válido, seja ele um atributo (variável) do seu objeto classe ou um objeto função (operação). Usando a classe acima podemos referenciar HelloWorld.i e HelloWorld.funcao, estas referências serão válidas e retornarão um inteiro (123) e um objeto função, respectivamente.

A instanciação do objeto classe é como nas demais linguagens orientadas a objetos, nós vamos basicamente iniciar um objeto de um determinado tipo (o tipo é o objeto classse) e atribuir a algum atributo. A instanciação (calling) de uma classe, por default, cria um objeto vazio. Por exemplo, para instanciarmos nossa classe de exemplo:

[code]x = HelloWorld()[/code]

Porém, muitas classes podem precisar criar um novo objeto em um estado inicial pré-determinado. Para estes casos, existe um método especial que pode ser definido pela classe, é o método __init__(), conforme próximo exemplo. O método __init__() é o construtor da classe e poderá ter ou não atributos, isso vai depender das necessidades de cada classe.

[code]class HelloWorld:
    'Minha Primeira Classe em Python'
    i = 123
    def __init__(self):
        self.i = 123456
    def funcao(self):
        return 'Hello World!!!'[/code]

Agora, após esta alteração em nossa classe, caso ocorra uma referência ao atributo i sem que haja uma instanciação da classe, o valor retornado será 123, mas caso a classe tenha sido instanciada, o valor retornado será 123456.

[code]print HelloWorld.i
123
x= HelloWorld()
print x.i
123456[/code]

– E aquela String perdida ali no começo da classe?“, você já se perguntou isso? Aquela String é chamada de docstring e pode ser acessada através do atributo __doc__, que no nosso caso irá retornar a String “Minha Primeira Classe em Python”. As docstring podem ser inseridas no início de funções, classes e métodos, é uma convenção criada para documentação. Esta documentação poderá ser consultada depois usando o pydoc com o comando help. Abaixo acesso direto ao atributo __doc__ da classe.

[code]print HelloWorld.__doc__
Minha Primeira Classe em Python[/code]

Consulta ao help da classe usando o pydoc.

[code]help(HelloWorld)
Help on class HelloWorld in module __main__:class HelloWorld
 |  Minha Primeira Classe em Python
 |
 |  Methods defined here:
 |
 |  __init__(self)
 |
 |  funcao(self)
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  i = 123[/code]

Nós poderíamos ter definido mais informações de documentação nesta classe, nos métodos __init__() e funcao por exemplo. Se fosse o caso, basta adicionar os comentários entre aspas () na primeira linha de cada método.

Herança, herança múltipla, exceções e definições de escopo de atributos e métodos serão abordados no próximo post, já estou achando esse aqui muito longo, esta continuação já está em draft e sairá mais rápido! :D

Call4Papers: II EJES

O ESJUG (Grupo de Usuários Java do Espírito Santo) está organizando o seu segundo evento anual, o II EJES em parceria com a SBC na realização do ERI 2007 e a chamada de trabalhos (Palestras e Tutoriais) já está aberta, confira abaixo as regras de submissão e os prazos e mande-nos a sua.

Apresentação

A Secretaria Regional do Espírito Santo da Sociedade Brasileira de Computação (SBC) e o Grupo de Usuários de Java do Estado do Espírito Santo (ESJUG) têm o prazer de convidar Membros da Comunidade em Geral, Alunos e Professores nas diversas áreas da Computação e Informática e áreas afins de Universidades, Instituições de Ensino e Pesquisa e Empresas a submeterem propostas de
tutoriais e palestras ao II Encontro de Java do Espírito Santo, a realizar-se nos dias 29 e 30 de agosto de 2007 em parceria com a VII Escola Regional de Informática, que acontecerá entre os dias 27 de agosto e 01 de setembro de 2007, na cidade de Vitória, localizada no estado do Espírito Santo.

O II Encontro de Java do Espírito Santo tem como objetivo reunir a comunidade acadêmica, profissionais e usuários de tecnologia para discussão de assuntos relacionados a Java, estimulando assim a disseminação da cultura agregada ao tema. Continue lendo “Call4Papers: II EJES”

Começando com Python #2/undefined

Vamos começar essa segunda parte aprendendo a usar o PyDev, plugin do Eclipse para programar em Python. Existem várias outras alternativas de ambiente de desenvolvimento, para quem não gosta do Eclipse ou não quer usa-lo com Python, pode escolher entre algumas das alternativas que conheço: IDE Eric, Anjuta, BOA Constructor, DrPython e quem gosta de IntelliJ IDEA pode usar o Pythonid como plugin.

Depois de um HelloWorld, uma das coisas mais difíceis é conseguir pensar em algo interessante para continuar os estudos e como ter um ambiente organizado e produtivo. Então veremos o PyDev e depois alguns outros exemplos mais interessantes.

Instalando PyDev

  1. Acesse: http://pydev.sourceforge.net/
    1. Instale pelo update do Eclipse: http://pydev.sourceforge.net/updates/
    2. Ou baixe o zip e faça a instalação manual: http://www.sourceforge.net/projects/pydev/
  2. Pronto! Simples e rápido.

PyDev Features

  • Suporte a Python 2.4, 2.5 e Jython;
  • Code completation e highlighting;
  • Wizards de projetos, módulos, etc;
  • Organize Imports e Autoformat Code;
  • Refactoring;
  • Code Assistant (CTRL+1);
  • Code Folding;
  • Eclipse Tasks integration;
  • Debugger completinho;
  • PyDev Perspective;
  • E muitas outras;

Continue lendo “Começando com Python #2/undefined”

Começando com Python #1/undefined

Pronto, nada melhor do que um feriadão acompanhado daquela viagem pra casa da mamãe hein; descanso, paz e sossego (e sem internet) é o que eu precisava pra repor as baterias e aliviar a maldita gastrite. E num dos vários devaneios diários resolvi que esta seria a semana do Python no blog, vou escrever aqui como eu conheci e aprendi Python.

E tudo começou em 2004, foi quando eu realmente me interessei por Python, até então eu não tinha contato com muitas linguagens de script além de JavaScript, PHP e Shell. Durante o FISL5.0 quando assisti a palestra Matando o Java e mostrando o Python, por Osvaldo Santana Neto e Ruda Moura e que diga-se de passagem foi muito engraçado, neste ano ocorria o primeiro Javali e todo o pessoal do Java resolveu invadir a palestra do Osvaldo e Ruda. Então juntei o incentivo que tive no FISL na palestra mais as cutucadas que sempre ouvia/lia do CV sobre Java e Python, e como ele mesmo dizia: “Para programar em Python é preciso ter culhões” e eu resolvi então testar os meus (sem duplo sentido por favor), e comecei a gostar de Python.

Continue lendo “Começando com Python #1/undefined”