Arquivo de oop

Herança – orientação a objetos com python

Posted in Linux, Programação, Python with tags , , , , , on 22 / junho / 2008 by medeubranco

Atenção: se você ainda não sabe nada sobre orientação a objetos, leia o artigo anterior.

Uma característica legal de programação orientada a objetos é a Herança. Uma classe pode herdar características de outra (superclasse) e incluir suas próprias. A superclasse é mais genérica, a subclasse, que herda da superclasse, é mais especializada.

Usando o exemplo clássico dos livros e tutoriais de programação, imaginemos a superclasse “Animal”; “Mamífero” é uma subclasse de “Animal” e herda suas características. Mas “Mamífero” tem suas próprias características. “Felino” é uma subclasse de “Mamífero”; “Gato” é uma subclasse de “Felino”.

Herdando as características de “felino”, “Gato” herda também as de “Mamífero” e “Animal”. Mas gato mia e arranha o sofá, coisa que nem todo animal faz.

Em Python seria mais ou menos assim:

# definindo a classe Animal:
class Animal:
    def __init__(self):
        # codigo  para o init aqui
    # metodos de Animal aqui

#definindo a classe Mamifero, herdando de Animal
class Mamifero(Animal):
    def __init__(self):

# definindo Felino
class Felino(Mamifero):

# definindo Gato
class Gato(Felino):

No artigo sobre orientação a objetos, nós criamos a classe TiaVelha.

Agora vamos criar uma classe nova. É a Fofoqueira. Uma Fofoqueira é basicamente uma Tia Velha, mas que faz fofocas – nem toda tia velha faz fofocas. A Fofoqueira é especializada no leva-e-traz.

Acho que ficou implícito que, para criar uma Fofoqueira, basta pegar uma Tia Velha e adicionar a ela o leva-e-traz.

Vamos ao código. Se quiser executar o exemplo, primeiro crie uma pasta para nosso exercício. Salve nela o código da TiaVelha, do outro artigo, com o nome tiavelha.py.

Os métodos da Fofoqueira são leva(fofoca) e traz().

O método leva(fofoca) adiciona uma fofoca qualquer ao repertório de fofocas da Fofoqueira. A Fofoqueira não inventa nada; só repassa o que viu ou ouviu.

No método traz(), a fofoqueira solta de uma vez todas as fofocas do seu repertório.

from tiavelha import *
class fofoqueira(TiaVelha):
    def __init__(self,nome,idade):
        TiaVelha.__init__(self,nome, idade)
        self.fofocas=[]

    def leva(self,fofoca):
        self.fofocas.append(fofoca)

    def traz(self):
        for fofoca in self.fofocas:
            print fofoca

Na linha 1 importamos o conteudo do ‘módulo’ tiavelha. A classe TiaVelha agora está disponível no nosso código.

Na linha 2 a classe fofoqueira é definida; TiaVelha entre parêntesis indica que fofoqueira herda de TiaVelha.

Na linha 3 precisamos chamar o método __init__ da superclasse, pois __init__ sendo redefinido em fofoqueira substitui o método com o mesmo nome da superclasse.

Das linhas 7 a 12 colocamos os métodos típicos da fofoqueira.

Os métodos apresentar_se() e falar(), da TiaVelha estão disponíveis para fofoqueira.

Salve o códico como fofoqueira.py na mesma pasta onde salvou tiavelha.py.

Para concluir, vamos fazer um código que usa a classe fofoqueira:

import fofoqueira
lina=fofoqueira.fofoqueira('Alvelina',32)
lina.apresentar_se()
lina.falar()
lina.traz()
lina.leva( "A Luiza trocou de namorado de novo" )
lina.leva( "O Pedro terminou com a amante" )
lina.traz() 

Orientação a objetos com python para iniciantes

Posted in Linux, Programação, Python with tags , , , , , on 22 / junho / 2008 by medeubranco

Python é uma linguagem orientada a objetos. Nos artigos anteriores, não usei essa característica da linguagem para manter o “direto ao ponto”.

Este artigo é para quem ainda não sabe nada de OOP (ou POO), como é o caso do colega que o motivou.

Indo direto ao ponto, vamos pegar um “objeto” conhecido e criar uma classe que o represente.

A nossa classe vai contemplar seus atributos e seu comportamento (o que o nosso objeto faz).

Nosso objeto vai ser a tia velha. Seus atributos serão o nome e idade (que faz dela tia velha), além das coisas que ela fala (coisas típicas de tia). Seu comportamento, ou ação, é falar aleatoriamente as coisas que toda tia velha fala.

Repare que o que foi dito sobre a classe “tia velha” se aplica a toda e qualquer tia velha, independente de nome, idade ( pode ter tia velha de vinte e poucos anos, acredite ) ou de quem é o sobrinho.

vamos ao código

import random

# inicio da definicao da classe
class TiaVelha:
    def __init__(self, nome, idade):
        """
        inicializador da classe.
        cada tia velha criada
        serah criada por este metodo init
        """

        #definindo os atributos
        self.nome=nome
        self.idade=idade
        self.frases=[]

        #criando o repertorio de frases
        self.frases.append( "Como voce cresceu!" )
        self.frases.append( "Voce precisa arrumar uma namoraaaada!" )
        self.frases.append( "Voce ainda nao arrumou emprego?!!" )
        self.frases.append( "Respeita sua mae, menino!" )
        self.frases.append( "Gracinha!" )

    def falar(self):
        """
        metodo principal da tia velha
        """
        x=len(self.frases)
        n=int(random.random()*x-1)
        print self.frases[n]

    def apresentar_se(self):
        print   """
                Ola.
                Meu nome eh """ + self.nome + """
                e tenho """ + str(self.idade)  + """ anos.
                Sou uma tia velha e o que mais faco eh falar
                """

# o codigo abaixo somente
# sera executado se este
# arquivo for executado
# diretamente.
#
# nao o serah se a classe
# TiaVelha for importada
# para dentro de outro
# programa python
if __name__=='__main__':

    # criando uma 'nova' tia velha
    # com nome 'Odila' e idade 67
    # eh neste momento que __init__()
    # serah chamado
    odila=TiaVelha('Odila',67)

    # executando um metodo
    odila.apresentar_se()

    print
    print
    print

    # fazendo a tia odila falar 15 vezes
    for x in range(15):
        odila.falar()

A linha 1 import random só entrou neste programa porque no método falar(self) foi preciso usar números aleatórios.

Explicar o resto acho que é redundância.

Este artigo teve a intenção de apresentar orientação a objetos a quem ainda nada sabia a respeito.

Pesquisa e treinamento são necessários para se aprofundar no assunto.