Aula 8 - pacotes e orientação a objetos

Jacques Wainer

2024

Orientação a objetos

Orientação a objetos é uma técnica de pensar programas grandes (com muitos programadores trabalhando nele)

Exemplo:

Esse jeito de pensar no programa ou no sistema (um conjunto de programas) parece tornar o processo de especificar e escrever esses programas mais rápido e menos sujeito a erros.

Há linguagens de programação que se baseiam nessas ideias: Java, C++.

OO em Python

Python normalmente não é usado em sistemas grandes com muitos programadores onde OO faz mais sentido

Mesmo assim Python inclui coisas de OO que acabam aparecendo em duas situações

Sintaxe de OO

Define uma classe

class Funcionario(Pessoa):
   ...(campos)
   ...(funcoes/metodos/comportamentos)

Em Python normalmente não da para definir os campos (nome, endereco-rua, etc)

Dá para definir funções que só funcionam para objetos dessa classe. Essas funções são os métodos que vimos na aula de listas e outras. Esses métodos são definidos dentro da classe.

Nomes de classe começam com letra maiúscula

class Funcionario(Pessoa):

    def pagar():
       ...
       

Usando classes e objetos em Python

x = Funcionario()

x.nome = "Jacques"

x.rua = "Rua ABC"

x.salario = 30000.0

x.paga()
x = Funcionario("Jacques","Rua ABC",34,30000.0)
objeto.campo
x.paga()

x.troca_de_endereco("Rua Oliveira",34, "123456-010")

que é a notação de método que vimos nas aulas de lista, strings e dicionários

 x.append(56)
 
 y.split()

OO e dicionarios

OO é mais complicado, mas a parte de campos/atributos de um objeto sao parecidos com dicionarios, mas o jeito de escrever é diferente

x = Funcionario()
 
x.nome = "Jose"
print(x.nome)

y={}
y["nome"] = "Jose"
print(y["nome"])

OO em Python

OO em python é super livre. Vc pode colocar qualuqer valore nos campos, pode criar campos novos

x = Funcionario()
x.nome=34
x.nariz = [4,5]

Pacotes

Uma serie de funcoes/metodos sobre um particular assunto estao agrupados em pacotes (tambem chamados de bibliotecas)

pip install requests

No programa

É preciso importar o pacote (interno ou externo) explicitamente no programa

import pacote

import pacote as pct

from pacote import funcao1, funcao2

No 1o vc importa todo o pacote mas para chamar uma funcao do pacote vc precisa se referir a ele

x = pacote.funcao1(34, 7)

(notaçao de metodo mas não vale a pena considerar que pacote é um objeto)

No 2o vc usa a abreviação pct em vez do nome completo pacote

x = pct.funcao1(34, 7)

No 3o metodo, vc pode usar funcao1 diretamente, sem o nome ou abreviação do pacote

x=funcao1(34, 7)

pacotes e OO

na grande maiora, a interação com pacotes mais complicados é feita atravez de um objeto que tem campos e metodos.

escreva uma funcao em python que dado um url retorna um string com o texto daquela pagina
import requests

def get_page_content(url):
    response = requests.get(url)
    return response.text

# Exemplo de uso
url = "https://www.google.com"
content = get_page_content(url)
print(content)
no programa acima, retorne o texto da pagina sem os marcadores de HTML
import requests
from bs4 import BeautifulSoup

def get_page_content(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    text = soup.get_text()
    return text

# Exemplo de uso
url = "https://www.google.com"
content = get_page_content(url)
print(content)

outro exemplo

escreva uma funcao que recebe uma matriz quadrada e retorna a inversa dessa matriz
import numpy as np

def matriz_inversa(matriz):
    try:
        inversa = np.linalg.inv(matriz)
        return inversa
    except np.linalg.LinAlgError:
        return None