Cursos / Informática para Internet / Desenvolvimento Web I / Aula

arrow_back Aula 12 - Desenvolvendo uma livraria virtual – Parte 1

Modelagem do negócio II

Os livros serão escolhidos pelo usuário e acondicionados em um carrinho de compras virtual. Dessa forma, precisamos modelar também uma classe para representar esse carrinho virtual e seu conteúdo. Como um carrinho de compras possui itens a serem comprados, com informação sobre o tipo do produto e a quantidade a ser comprada, primeiro modelamos a classe ItemCompra, como mostrado na Listagem 2. O atributo item armazena o livro escolhido e o atributo quantidade indica a quantidade desse livro a ser comprada.

Listagem 2 - Classe responsável por representar um item (produto, quantidade) do carrinho de compras.

Com relação ao carrinho de compras, podemos modelá-lo por meio da classe CarrinhoCompras, mostrada na Listagem 3.

Pode-se dizer que um carrinho de compras possui uma lista ou um conjunto de itens (ItemCompra) a serem comprados. Esse pensamento está correto. Entretanto, o conteúdo do carrinho de compras foi modelado como um mapeamento (interface Map, linha 6) de String em objetos do tipo ItemCompra. O motivo disso será discutido adiante.

O uso de <String, ItemCompra> (Java Generics) é opcional, mas fortemente recomendado, já que garante que o tipo da chave do mapeamento seja String - mesmo tipo do atributo idLivro, que é o identificador de um livro - e que o valor associado a cada chave seja do tipo ItemCompra.

Importante!

Para maior esclarecimento sobre esse assunto, leia a referência sobre Java Generics indicada nas leituras complementares.

Decidimos utilizar um Map porque as operações de adicionar ou de remover um livro do carrinho requerem a busca no carrinho pelo objeto ItemCompra relacionado àquele livro. Isso pode ser visto nos métodos adicionar() e remover(), definidos, respectivamente, nas linhas 12 e 22. Sobre o primeiro método, ele recebe o livro escolhido pelo usuário (representado pelo parâmetro book) e realiza a busca para verificar se já existe um objeto ItemCompra para o livro recebido como parâmetro.

Observe, na linha 13, o uso do método containsKey() existente na classe Map (variável items). Esse método retorna true, se existir, no mapeamento, uma entrada que mapeie o código do livro (book.getIdLivro()) no objeto ItemCompra associado a esse produto. Se esse for o caso, isso quer dizer que o cliente já tinha selecionado esse livro antes, então, simplesmente, recuperamos o objeto ItemCompra (método items.get(book.getIdLivro()) associado ao código do livro sendo comprado e incrementamos sua quantidade no carrinho de compras. Caso contrário, criamos um novo objeto ItemCompra (linha 17) e o adicionamos no mapeamento (linha 18). Note que mapeamos o objeto utilizando o método put() do mapeamento (linha 18), em que mapeamos o código do livro (book.getIdLivro()) no objeto criado (novoItem).

O uso do mapeamento na implementação do carrinho de compras facilita e torna mais eficiente a implementação das operações do carrinho, as quais poderiam ser feitas também por meio de listas ou conjuntos.

Versão 5.3 - Todos os Direitos reservados