domingo, 9 de março de 2008

Padrão Especialista ( na prática )

Aula 8 (em Laboratório)


Nesta aula vimos a aplicação prática do padrão especialista, a implementação em código. Vamos pegar como exemplo uma parte de um modelo que tem como objetivo calcular o total de uma venda, especificando cada produto, a quantidade de cada produto, e o sub-total de cada item de venda, este diagrama contêm 3 classes somente, são essas classes:

Partiremos do princípio de todo esquema para uma venda, saber o total dela, portanto, qual a classe responsável por conhecer o total de uma venda? A classe responsável terá que conhecer todas as instâncias ItemVenda da Venda e o subtotal de cada uma delas, portanto a classe Venda é uma forte candidata pois uma Venda contém ItemVenda. Definida a classe que calcula o total de uma venda, vamos definir a classe responsável por conhecer o subtotal de uma venda, para isso é necessário saber a quantidade de cada produto, quem detém estas informações é a classe ItemVenda, portanto esta é a classe responsável por implementar o método de calcular subtotal. Mas para implementar este método a classe ItemVenda precisa conhecer o preço unitário de cada produto, e é aí que entra a responsabilidade da classe produto, que é obter especificação do produto para mandar como resposta para a classe ItemVenda quando esta enviar uma mensagem para obter o preço de cada produto.

No final, com todos os métodos em suas respectivas classes, o diagrama ficou assim:

Implementando em código:

public class Produto
{
private integer idProduto;
private string descricao;
private double valorUnitário;

public string getdescricao(){
return descricao;
}

public void setDescricao(string valor){
valor=descricao;
}
}


public class ItemVenda{
private double qtde;
private Produto p;

public void setP (Produto p) {
this.p = p;
}


public class Venda {
private Set itemVendaList=new HashSet();
private Date dataVenda;
private integer idvenda;


public criarItemvenda (Produto P, double qtde)
{
Itemvenda i =new ItemVenda();
i .setP(p);
i.setQtde(qtde);
itemVendaList.add(i);

}
}


observação: nos diagramas as classes "LinhaDeVenda" e "EspecificaçãoProduto" são as mesmas classes "ItemVenda" e "Produto" do trecho de código

Nenhum comentário: