Aula 15 – Python – Orientação a Objeto 01
Aula 15 – Python – Orientação a Objeto
Programação orientada a objetos
Que fazer esse curso com certificação?
Acesse:
https://workover.com.br/python-codigo-fluente
Voltar para página principal do blog
Todas as aulas desse curso
Aula 14 Aula 16
Antes de começar, quero deixar meu link de afiliados na Hostinger: Hostinger
Dêem um joinha 👍 na página do Código Fluente no Facebook
Facebook
Meu link de referidos na digitalocean pra vocês.
Quem se cadastrar por esse link, ganha $100.00 dólares de crédito na digitalocean:
Digital Ocean
Esse outro é da one.com:
One.com
Automatize tarefas do dia a dia com python:
Conceito
Programação orientada a objetos é um dos paradigmas de programação.
Alguns dos principais paradigmas utilizados hoje no mercado:
- Funcional
- Lógico
- Declarativo
- Imperativo
- Orientado a objetos
- Orientado a eventos
Programação orientada a objetos é uma das muitas técnicas utilizadas para modelar sistemas complexos, descrevendo uma coleção de objetos que interagem através de seus dados e comportamento.
Tudo em python é objeto
Python é essencialmente orientado a objeto, assim como Ruby.
Todos os tipos herdam da classe object, até mesmo os tipos numéricos.
Faça o seguinte teste no console python:
isinstance(1, object)
Saída: True
Objetos e classes
Como exemplo, podemos supor que as maçãs vão ficar em barris e laranjas em cestas.
Agora, temos quatro tipos de objetos: maçãs, laranjas, cestas e barris.
Na modelagem orientada a objetos, o termo usado para tipos de objetos é classe.
Em termos técnicos, agora temos quatro classes de objetos.
Classes descrevem objetos
Objetos são instâncias de classes que podem ser associadas umas às outras.
Especificando atributos e comportamentos
- Uma instância de objeto é um objeto específico com seu próprio conjunto de dados e comportamentos;
- Nós também podemos especificar o tipo para cada atributo;
- Existem atributos implícitos que pode tornar explícita as associações;
- Comportamentos são ações chamadas métodos.
Ocultando detalhes e criando a interface pública
A interface é a coleção de atributos e métodos que outros objetos podem usar para interagir com esse objeto.
Elas não precisam, e muitas vezes não são permitidas, acessar o funcionamento do objeto.
Ex: A interface para a televisão é o controle remoto, cada botão no controle remoto representa um método que pode ser chamado no objeto televisão.
O ocultamento de informações também é conhecido como encapsulamento.
O modelo é uma abstração de um conceito real.
Composição e herança
Composição é o ato de reunir vários objetos para compor um novo.
Um objeto pode herdar recursos e comportamentos de um outro. Ex. Jogo de Xadrez:
Herança fornece abstração
O polimorfismo é a capacidade de tratar uma classe de forma diferente, dependendo de qual subclasse é implementada. No exemplo do xadrez: o tabuleiro não precisa saber com que tipo de peça está lidando. Tudo o que tem fazer é chamar o método de movimento e a subclasse adequada vai cuidar de mover como um cavalo, ou um peão, ou um bispo, etc.
Polimorfismo é uma palavra que raramente é usada em programação Python.
Herança múltipla
Permite que uma subclasse herde a funcionalidade de várias classes pai.
Partiu prática! 😉
Criando classes Python
class MyFirstClass:
pass
Instanciando a classe, isto é, criando dois objetos do tipo MyFirstClassna memória.
a = MyFirstClass()
b = MyFirstClass()
A classe é como se fosse a fôrma do objeto a ser criado.
print(a) ## <__main__.MyFirstClass object at 0xb7b7faec>
print(b) ## <__main__.MyFirstClass object at 0xb7b7fbac>
Criando a classe ponto
class Point:
pass
Adicionando atributos
p1 = Point()
p2 = Point()
p1.x = 5
p1.y = 4
p2.x = 3
p2.y = 6
print(p1.x, p1.y)
print(p2.x, p2.y)
Fazendo algo
class Point:
def reset(self):
self.x = 0
self.y = 0
O argumento self no método é simplesmente uma referência ao próprio objeto de onde o método está sendo invocado.
p = Point()
p.reset()
print(p.x, p.y)
# Mesmo comportamento
p = Point()
Point.reset(p)
print(p.x, p.y)
Chamando um método no objeto p automaticamente passa esse objeto para o método.
Múltiplos argumentos para um método
import math
class Point:
def move(self, x, y):
self.x = x
self.y = y
def reset(self):
self.move(0, 0)
def calculate_distance(self, other_point):
return math.sqrt((self.x - other_point.x)**2 + (self.y - other_point.y)**2)
point1 = Point()
point2 = Point()
point1.reset()
point2.move(5,0)
print(point2.calculate_distance(point1))
assert (point2.calculate_distance(point1) == point1.calculate_distance(point2))
point1.move(3,4)
print(point1.calculate_distance(point2))
print(point1.calculate_distance(point1))
# Exceção #
point = Point()
point.x = 5
print(point.x)
print(point.y)
Como não definimos o y, na hora do print(point.y) ele dá essa exceção:
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
AttributeError: ‘Point’ object has no attribute ‘y’
Construtor
Múltiplos argumentos para um método
class Point:
def __init__(self, x, y): # def __init__(self, x=0, y=0)
self.move(x, y)
def move(self, x, y):
self.x = x
self.y = y
def reset(self):
self.move(0, 0)
# Construindo um Ponto
point = Point(3, 5)
print(point.x, point.y)