Você está na página 1de 20

Inteligência Artificial

Python POO

Professor: Carlos Alberto


Email: carloswgama@gmail.com
POO
Paradigmas de Programação
• O que é um paradigma?

• Paradigma, nada mais é do que um padrão/modelo.

• Por tanto, paradigma de programação nada mais é do que um padrão(modelo) a ser seguido na
programação.

• Em programação existem diversos tipos de paradigmas:


▫ Estrutura
▫ Funcional
▫ Programação Orientada a Objeto
▫ Programação Orientada a Features
▫ Programação Orientada a Delta
▫ ...
O que é Programação Orientada a Objeto?
• Como vimos anteriormente, POO é um Paradigma de Programação.

• Nesse Paradigma tentamos simular o mundo real, onde tudo é um objeto.

• Porém apesar de tudo ser objeto, eles podem variar. Exemplos:


▫ Quadro
▫ Cadeira
▫ CPU
▫ Pessoa

• E cada objeto pode ter características (atributos) e ações (métodos) quem podem realizar.
O que é Programação Orientada a Objeto?
• Em POO podemos possuir classe e objetos.
Classe Pessoa {
• A classe é um modelo que define o que um objeto pode fazer e suas String nome;
características: int idade;
apresentar()
}

• O objeto é uma variável do código que respeita o modelo da classe:

Objeto de Pessoa { Objeto de Pessoa {


nome: "Carlos"; nome: "Maria";
idade: 30; idade: 20;
apresentar() apresentar()
} }
POO em Python
• Em Python para criar uma classe devemos definir a seguinte sintaxe:

class NomeClasse:
Caso criar
Para o método precise usamos
um método, acessar outros métodos
a palavra def
def metodo(parametroOpcional): oumétodo
O atributos da classe,
pode o primeiro parâmetro
ter opcionalmente parâmetros
#conteudos do método
Igual a criardeve
umaser self.
função
Se seu método não tiver nenhuma linha, o
É equivalente
Python vai dar ao this do Java, PHP,
erro.
def metodo2(): JavaScript...
pass
Nesse caso usamos a palavra pass, em métodos
Porémpara
vazios na hora do objeto
não dar erro. usar, ignoramos esse
def metodo3(self, paramOpc): parâmetro:
#conteudos Oobjeto.metodo3(‘valor’)
mesmo vale para uma classe vázia
Praticando
• Crie uma classe Pessoa, que deve ter um método apresentar.

• O método apresentar por enquanto está vazio, mas no futuro irá acessar atributos da classe

class Pessoa:

def apresentar(self):
pass
Extra – Documentando Classes
• Caso deseje, pode documentar a classe no Python com três aspas:
def apresentar(self, nome, idade):
'''
Classe que apresenta a pessoa
Attributes:
nome(string): Nome da pessoa
idade(int): Idade da pessoa
'''
pass
• A vantagem é que ao usar algum editor é possível saber para que ele serve aquele método:
Construtor
• O que é o Construtor de uma classe?
▫ É o método que é executado junto da criação do objeto.
▫ Pode receber os parâmetros de inicialização do objeto.

• Em python para criar um construtor, usamos o método __init__:

class NomeClasse:

def __init__(self, param1, param2):


self.param1 = param1
self.param2 = param2
Atributos
• Os atributos da classe podem ser criados tanto dentro do construtor (__init__) quanto da
classe:
class NomeClasse:

atributo1 = 0
def __init__(self, atributo2, atributo3 = 2):
self.atributo2 = param2
self.atributo3 = param3
self.atributo4 = []
Praticando
• Crie o construtor de pessoa, que deve receber nome e idade, e salvá-los como atributos da
classe.
class Pessoa:

def __init__(self, nome, idade):


self.nome = nome
self.idade = idade

def apresentar(self):
pass
Instanciando objeto
• Para instanciar um objeto basta importar, se em arquivos diferentes, e criar uma variável que
irá receber o nome da classe com parênteses (sem new):

obj = NomeClasse()
#Caso tenha parametros, passe, ignorando o self
obj = NomeClasse(10, 'teste')

• Também ignoramos o self nos métodos ao executá-los

class NomeClasse:
obj = NomeClasse()
def metodo(self, inteiro):
obj.metodo(10)
#faz algo
Praticando
• Atualize o método apresentar para que ele exiba o texto “Olá, meu nome é %NOME% e tenho
%IDADE% anos”, onde %NOME% e %IDADE% são os atributos da classe.
class Pessoa:

def __init__(self, nome, idade):


self.nome = nome
self.idade = idade

def apresentar(self):
print('Olá, meu nome é', self.nome, 'e tenho', self.idade, 'anos’)

#===== Usando =====#


pessoa = Pessoa('Carlos', 30)
pessoa.apresentar()
Atributos e métodos privados
• EM programação é comum usarmos underline duplo (__) sempre que queremos informar que
um conteúdo é privado, não faz parte diretamente do escorpo ou colocamos em um inicio de
lista com maior destaque.

• Em Python para tornar um método ou atributo privado, usamos o underline duplo:

class NomeClasse:
atributo1 = None #Publico
__atributo2 = None #Privado
atributo3 = None #Publico
Get e Set
• Sempre que um atributo tiver que ser acessado externamente, deixe-o publico.
• Se não tiver, torne-o privado.

• NÃO PRECISA tornar todos atributos privados e criar getters e setters.

• Por caso precise manipular um atributo ao recuperar ou editar seu valor, torne-o privado e use
as anotações de getter e setter.
Getter
• Para criar um Getter pode usar a anotação @property em cima do método get:

@property
obj = NomeClasse()
def atributo2(self):
print(obj.atributo2)
return self.__atributo2
Setter
• Para o seter usamos a anotação @nome_atributo.setter

@atributo2.setter obj = NomeClasse()


def atributo2(self, valor): obj.atributo2 = 5
self.__atributo2 = valor print(obj.atributo2) #Exibe 5
Herança (Polimorfismo)
• Em Python, caso você deseje que uma classe herde características de outra, devemos por a
classe mãe entre parênteses ao declarar a filha:
class ClasseMae:
atributo1 = None class ClasseFilha(ClasseMae):

def metodo1(self): def metodo2(self):


pass pass
Enum
• O Enum é um tipo de classe que tem o papel de definir valores predefinidos para um atributo.

• Para criar um enum, basta criar uma classe que herde de Enum do pacote enum e informar os
valores como atributos da classe:

from enum import Enum from enum import Enum

class ClasseEnum(Enum): class CodigoHttp(Enum):


VALOR1 = 1, OK = 200,
VALOR2 = 2 NOT_FOUND = 404,
ERROR_SERVIDOR = 500
variavel = ClasseEnum.VALOR1
print(variavel) #ClasseEnum.VALOR1
print(variavel.name) #VALOR1
print(variavel.value) #1
Praticando
• Crie uma classe enum Genero, que deve limitar os valores a HOMEM, MULHER, OUTRO

from enum import Enum

class Genero(Enum):
HOMEM = 1,
MULHER = 2,
OUTRO = 3

Você também pode gostar