FLISOL-2013


python orientado a objetos


Luan Fonseca <luanfonceca@gmail.com>

Quem sou eu


  •  Luan fonseca, 20 anos, programador desde 2010;
  • Graduando em Enhgenharia de Software/UFRN, formado como Técnico de Infomática para Internet com ênfase WEB pelo IDM;
  • Desenvolvedor de Software na empresa Multmeio;
  • Entusiasta e evangelista Python e Open-source.


Porque você deve me ouvir


  1. Já estive no seu lugar;
  2. Me mostraram o Python igual agora;
  3. Open-source is awesooome!
  4. As empresas daqui precisam mais de programadores  pagam bem, se merecido, óbvio.

Quem usa python


          

Onde pode ser usado

  • Desenvolvimento WEB (Django, Flask, ZOPE, Web2py, Pyramid);
  • Desenvolvimento Desktop (PyQT, PyGTK );
  • Na Ciência (SciPy, BioPython, AstroPy);
  • Jogos e Multmidia (PyGame, PyMedia, PyOpenGL, Python GStreamer, PIL);


Primeiro "Hello world"

Em Java
public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello, World!!!");
    }
}


Em Python

print "Hello, World!!!"

Um pouco de Código

nome = "Luan"idade = 20peso = 70.3gosta_de_python = Trueinteresses = ["Python", "Software Livre", 42]
informacoes = {    'nome': nome,    'interesses': interesses,    'idade': idade,
    'empresa': 'Multmeio',
    'funcao': 'Desenvolvedor',
}
def exibir_nome(nome):
print "Seu nome: " + nome

Condicionais

if condicao:     print "Faca algo"
if condicao:    print "Condicao resultou em True"
else:    print "Condicao resultou False"

if condicao1:    print "Condicao1 resultou em True"
elif condicao2:    print "Condicao2 resultou em True"
else:    print "Nenhuma das condicoes resultou em True"
while True: print "Rodando para sempre"

Orientação a Objetos

Classe
É uma estrutura que visa abstrair e imitar o comportamento de coisas reais.

Objeto
O mais básico tipo de coisa, qualquer instancia de qualquer coisa.

Instância
O Resultado, o objeto, criado pela Classe, com seus atributos e comportamento.

Orientação a Objetos

def
Palavra-chave usada para criar métodos..

self
Dentro das funções de uma classe, 'self' é uma variável para a instancia/objeto que está sendo acessado.

cls
Dentro das funções de escopo de classe, 'cls' é uma variável para a Classe que está sendo acessada.

Orientação a Objetos

O conceito de uma Classe herdar atributos e métodos de outra classe.

O conceito que uma Classe pode ser composta por outras Classes.

O conceito que objetos de uma mesma hierarquia são tratados como se fossem do mesmo "tipo".

Orientação a Objetos

O conceito de que uma Classe pode ter atributos/métodos inacessíveis por outras Classes.

Atributo Publico
Afirma que um atributo Publico pode ser acessado por qualquer outra classe.

Atributo Privado
Afirma que um atributo Privado só pode ser acessado pela própria classe.

ORIENTAÇÃO A OBJETOS


class Pessoa():
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade
def informacoes(self): print "Nome: %s\nIdade: %s" % ( self.nome, self.idade )

>>> p = Pessoa(nome="Joao", idade=20)>>> p. informacoes()Nome: Joaoidade: 20

Orientação a Objetos


Herança


class Pessoa(object):
    def __init__(self, nome):
        self.nome = nome

    def falar(self):
        print "%s diz: Ola!" % self.nome

class Crianca(Pessoa):
    def __init__(self, nome, idade):
        super(Crianca, self).__init__(nome)
        self.idade = idade

    def falar(self):
        super(Crianca, self).falar()
        print "Eu tenho %s anos." % self.idade

Orientação a Objetos


Composição/Agregação


class Pessoa(object):
    def __init__(self, nome):
        self.nome = nome

    def falar(self):
        print "%s diz: Ola!" % self.nome

class Carro(object):
    def __init__(self, nome, dono):
        self.nome = nome
        self.dono = Pessoa(dono)

Orientação a Objetos


Encapsulamento


class Encapsulada(object):
    def __init__(self, privado):
        self._privado = privado

    @property
    def privado(self):
        return self._privado

    @privado.setter
    def privado(self, value):
        self._privado = value

Orientação a Objetos


Polimorfismo


class Animal(object):
    def __init__(self, nome):
        self.nome = nome

    def falar(self):
        raise NotImplementedError(
            "Subclasses precisam implementar o metodo abstrato"
        )

class Gato(Animal):
    def falar(self):
        return '%s: Meow! Meow!' % self.nome

class Cachorro(Animal):
    def falar(self):
        return '%s: Woof! Woof!' % self.nome

Orientação a Objetos


Projetinho


class ItemNaoEncontrado(Exception):
    pass

class Lista(object):
    def __init__(self, nome, itens=[]):
        self.nome = nome
        self.itens = itens

    def incluir(self, item):
        if type(item) in (list, tuple):
            self.itens.extend(item)
        else:
            self.itens.append(item)
        print self.itens

Orientação a Objetos


Projetinho


                        # Continuação #
    def excluir(self, indice):
        try:
            del self.itens[indice]
            print self.itens
        except IndexError:
            raise ItemNaoEncontrado(
                "Indice invalido. Nenhum item encontrado."
            )

    def excluir_todos(self):
        self.itens = []
        print self.itens

    @property
    def qtd_itens(self):
        return len(self.itens)

python orientado a objetos

By Luan Fonseca de Farias