Diagrama de classes para biblioteca

Olá pessoal,

Fiz uma entrevista agora e fiquei um pouco em dúvida sobre o design de um sistema de bibliotecas, era pra fazer um digrama de classes.

Criei a classe Livro (título, autor, prateleira, categoria como atributos). Porém nos requisitos pedia que eles queriam ter várias cópias de um mesmo Livro e queriam manter registro disso. Essa era uma dúvida: manter o atributo na classe Livro (numeroCopia seria bom?) Não teria duplicacao de dados?

E que para cada 100 empréstimos feitos daquela cópia, a cópia deveria ser substituída (por estar velho).
Fiquei em dúvida nisso tb! Acabei criando uma classe Emprestimo que mantinha um relacionamento 1 para * com o Livro . Pensando melhor agora, seria melhor ter criado um atributo estático na classe Livro para manter o número de cópias? Eu também deveria saber quantas cópias do livro estavam disponíveis para empréstimo naquele momento.

Esboço do Diagrama:

Obrigado!

Estaria duplicando dados pois o único atributo que mudaria entre as cópias de um Livro seria o numeroCopia.
O ideal nesse caso seria isolar o que varia em uma nova classe por exemplo CopiaLivro com o atributo numeroCopia e também o relacionamento com o Livro ao qual pertence.

Foi uma boa solução criar a classe Emprestimo, além de ser bom uso de OO deixa a intenção do sistema explícito. Você teria que mudar esse relacionamento para a nova classe CopiaLivro que representa o livro de fato que foi levado no empréstimo. A classe Livro passaria a ser apenas de metadados.

Para saber quantas cópias estão disponíveis basta iterar sobre CopiaLivro verificando se possuem emprestimos em aberto (copiaLivro.isDisponivel() --itera sobre emprestimos—> emprestimo.isDevolvido()).

1 curtida

Ótimo!
Obrigado, Alessandro, é uma boa solução essa mesmo!