Aula 15 – Python – Orientação a Objeto 01

More videos
Views
   

Aula 15 – Python – Orientação a Objeto

Programação orientada a objetos

Python - Orientação a Objeto

Python – Orientação a Objeto

Aula anterior

Próxima aula

Página principal

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

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

Orientação a objetos em python

Orientação a objetos em python

  • 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:

Jogo de Xadrez

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.

Herança Múltipla

Herança Múltipla

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)

Nos vemos na próxima aula e continuaremos a aprender sobre OO em python.

Esse são meus link de afiliados na Hostinger: Hostinger

Curta a página do Código Fluente no Facebook
https://www.facebook.com/Codigofluente-338485370069035/

Meu link de referidos na digitalocean .

Quem se cadastrar por esse link, ganha $100.00 dólares de crédito na digitalocean:

Digital Ocean

E o da one.com:

One.com

Obrigado, até a próxima e bons estudos. 😉

Aula anterior

Próxima aula

Página principal

(Visited 126 times, 1 visits today)
About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>