Classe generica

This commit is contained in:
Emersonjsc 2025-07-06 22:58:09 -03:00
parent 50b23b07ef
commit 8b96e873ee
1 changed files with 23 additions and 16 deletions

View File

@ -1,29 +1,36 @@
from typing import Generic, TypeVar, List
from persistencia.excecoes import EntidadeNaoEncontradaException from persistencia.excecoes import EntidadeNaoEncontradaException
from modelo.entidade import Entidade
class Persistente: T = TypeVar('T', bound=Entidade)
class Persistente(Generic[T]):
def __init__(self): def __init__(self):
self.lista = [] self.__lista: List[T] = []
def inserir(self, obj): def inserir(self, obj: T) -> None:
self.lista.append(obj) self.__lista.append(obj)
def alterar(self, id_, novo_obj): def alterar(self, id_: int, novo_obj: T) -> None:
antigo = self.buscar_por_id(id_) if id_ != novo_obj.id:
self.lista.remove(antigo) raise ValueError("O id do novo objeto deve ser o mesmo do objeto a ser alterado.")
self.lista.append(novo_obj)
antigo_obj = self.buscar_por_id(id_)
index = self.__lista.index(antigo_obj)
self.__lista[index] = novo_obj
def remover(self, id_): def remover(self, id_: int) -> None:
obj = self.buscar_por_id(id_) obj = self.buscar_por_id(id_)
self.lista.remove(obj) self.__lista.remove(obj)
def buscar_por_id(self, id_): def buscar_por_id(self, id_: int) -> T:
for obj in self.lista: for obj in self.__lista:
if obj.id == id_: if obj.id == id_:
return obj return obj
raise EntidadeNaoEncontradaException(f"ID não encontrado: {id_}") raise EntidadeNaoEncontradaException(f"ID não encontrado: {id_}")
def listar_todos(self): def listar_todos(self) -> List[T]:
return self.lista return self.__lista
def __str__(self): def __str__(self) -> str:
return "\n".join(str(obj) for obj in self.lista) return f"Persistente para o tipo '{T}' com {len(self.__lista)} objetos."