Entendendo Orientação a Objetos em Python com um Exemplo de Vendas
Boa noite Devs!
Vamos explorar um exemplo simples, mas muito útil, que demonstra como organizar seu código usando classes e objetos.
Conceitos Básicos de Orientação a Objetos
Orientação a Objetos (OO) é uma forma de organizar e estruturar o código em torno de "objetos", que podem representar coisas do mundo real, como produtos, vendas, ou categorias, ou até mesmo conceitos abstratos. Esses objetos são criados a partir de classes, que são como "moldes" que definem o que os objetos podem fazer e que informações eles guardam.
Exemplo de Vendas
Neste exemplo, construir um sistema simples que gerencia vendas dentro de categorias. Vamos usar duas classes principais: Venda e Categoria. A classe Venda vai representar uma única venda, enquanto a classe Categoria vai representar uma categoria de produtos e manterá uma lista de vendas associadas a ela.
class Venda:
def __init__(self, produto, quantidade, valor):
self.produto = produto
self.quantidade = quantidade
self.valor = valor
class Categoria:
def __init__(self, nome):
self.nome = nome
self.vendas = []
def adicionar_venda(self, venda):
if isinstance(venda, Venda):
self.vendas.append(venda)
def total_vendas(self):
total = sum(venda.valor for venda in self.vendas)
return total
def main():
categorias = []
for i in range(2):
nome_categoria = input()
categoria = Categoria(nome_categoria)
for j in range(2):
entrada_venda = input()
produto, quantidade, valor = entrada_venda.split(',')
quantidade = int(quantidade.strip())
valor = float(valor.strip())
venda = Venda(produto.strip(), quantidade, valor)
categoria.adicionar_venda(venda)
categorias.append(categoria)
for categoria in categorias:
print(f"Vendas em {categoria.nome}: {categoria.total_vendas():.1f}")
if __name__ == "__main__":
main()
Classe Venda
class Venda:
def __init__(self, produto, quantidade, valor):
self.produto = produto
self.quantidade = quantidade
self.valor = valor
O que faz:
A classe Venda é responsável por representar uma venda. Cada venda tem três
atributos:
- produto: o nome do produto vendido.
- quantidade: quantos itens foram vendidos.
- valor: o preço total da venda.
Construtor:
- O método __init__ é o que chamamos de construtor. Ele é chamado automaticamente quando criamos uma nova venda, inicializando os atributos produto, quantidade e valor.
Classe Categoria
class Categoria:
def __init__(self, nome):
self.nome = nome
self.vendas = []
def adicionar_venda(self, venda):
if isinstance(venda, Venda):
self.vendas.append(venda)
def total_vendas(self):
total = sum(venda.valor for venda in self.vendas)
return total
O que faz:
A classe Categoria mantém uma lista de todas as vendas que pertencem a essa categoria.
Ela tem:
- nome: o nome da categoria (por exemplo, "Eletrônicos").
- vendas: uma lista que guarda todas as vendas associadas a essa categoria.
Método adicionar_venda:
- Este método adiciona uma nova venda à lista vendas da categoria, mas apenas se a venda for realmente uma instância da classe Venda.
Método total_vendas:
- Este método calcula e retorna o total das vendas na categoria, somando o valor de cada venda na lista vendas.
Função main()
def main():
categorias = []
for i in range(2):
nome_categoria = input()
categoria = Categoria(nome_categoria)
for j in range(2):
entrada_venda = input()
produto, quantidade, valor = entrada_venda.split(',')
quantidade = int(quantidade.strip())
valor = float(valor.strip())
venda = Venda(produto.strip(), quantidade, valor)
categoria.adicionar_venda(venda)
categorias.append(categoria)
for categoria in categorias:
print(f"Vendas em {categoria.nome}: {categoria.total_vendas():.1f}")
O que faz:
A função main() controla o fluxo do programa:
- Cria uma lista categorias para guardar as categorias.
- Pede ao usuário para inserir o nome de duas categorias e cria objetos Categoria para elas.
- Pede ao usuário para inserir duas vendas para cada categoria.
- Adiciona as vendas às suas respectivas categorias.
- Calcula e exibe o total de vendas para cada categoria.
Conclusão
Este exemplo simples mostra como pode organizar seu código usando classes e objetos. A classe Venda encapsula os detalhes de uma única venda, enquanto a classe Categoria agrupa e gerencia essas vendas. Usando a orientação a objetos, seu código fica mais organizado e fácil de entender e manter.🚀