2024
Orientação a objetos é uma técnica de pensar programas grandes (com muitos programadores trabalhando nele)
a principal ideia é que os dados são “objetos” de uma “classe” particular e que as informações desses objetos e o “comportamento” desses objetos são pensados/especificados na descrição da classe
uma ideia também importante é que essas classes estão organizadas em termos de hierarquias do tipo “é-um” que organiza a especificidade das informações e dos comportamentos:
Exemplo:
Pessoa
: nome, data de nascimento, endereço-rua,
endereço-numero, endereço-CEP. Há um “comportamento”/programa para
trocar o endereço que verifica que o CEP se refere a rua
correto.
Funcionario
: é uma Pessoa, que ainda mais tem
informações sobre CPF, lotação, cargo, salario, conta-bancaria (além das
informações de Pessoa. Ha programas específicos para Funcionários para
pagar o salario.
Professor
: é um Funcionário, que contem ainda
informações específicas de professores, e programas específicos
Aluno
: é um tipo de Pessoa mais informações sobre
cursos e disciplinas
Bolsista
é um Aluno e também um Funcionário
etc
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++.
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
quando o ChatGPT tem que ler/usar um dado que contem vários componentes (com o nome desses componentes)
nos pacotes do Python
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():
...
x = Funcionario()
x.nome = "Jacques"
x.rua = "Rua ABC"
x.salario = 30000.0
x.paga()
cria-se um objeto chamando a classe como se fosse uma função
normalmente nessa criação do objeto passa-se alguns valores para a Classe/Função
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 é 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 é super livre. Vc pode colocar qualuqer valore nos campos, pode criar campos novos
x = Funcionario()
x.nome=34
x.nariz = [4,5]
Uma serie de funcoes/metodos sobre um particular assunto estao agrupados em pacotes (tambem chamados de bibliotecas)
alguns pacotes ja vem junt com uma instalação padrão do Python
outros pacotes são externos ao Python e devem ser instalados explicitamente
pip install requests
É 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)
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)
response
. É um objeto que foi criado pela função
get
do pacote requests
- ele tem um campo
text
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)
veja forma de importar usando o from xxx import yyy
veja o soup
é um objeto criado pelo
BeautifulSoup()
que é o nome da classe (começa com
maiúsculo)
veja que o programa chama o método get_text
do
objeto soup
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
veja o uso do import as
neste caso o pacote np
tem um sub-pacote
linalg
e desse sub-pacote estamos chamando a função
inv