Modelagem de Software - UFU



centercenterModelagem de SoftwareExercícios de UML2019William Chaves de Souza CarvalhoUniversidade Federal de Uberl?ndia09/09/20199500095000Modelagem de SoftwareExercícios de UML2019William Chaves de Souza CarvalhoUniversidade Federal de Uberl?ndia09/09/2019Sumário TOC \o "1-3" \h \z \u Introdu??o PAGEREF _Toc18940293 \h 2Exercícios de Diagramas de Use Cases PAGEREF _Toc18940294 \h 21.1Exercício Ilustrativo – Vídeo Locadora PAGEREF _Toc18940295 \h 21.2Supermercado PAGEREF _Toc18940296 \h 22Exercícios de Diagramas de Seqüência de Análise PAGEREF _Toc18940297 \h 42.1Exercício Ilustrativo – Vídeo Locadora PAGEREF _Toc18940298 \h 42.2Supermercado PAGEREF _Toc18940299 \h 43Exercícios de Diagramas de Classes PAGEREF _Toc18940300 \h 43.1Exercício Ilustrativo – Vídeo Locadora PAGEREF _Toc18940301 \h 43.2Exercício Ilustrativo – Dividindo o Supermercado em Pacotes PAGEREF _Toc18940302 \h 43.3Supermercado PAGEREF _Toc18940303 \h 44Exercícios de Diagramas de Projeto PAGEREF _Toc18940304 \h 44.1Componente de Banco de Dados PAGEREF _Toc18940305 \h 44.2Exercício Ilustrativo – Janela Principal da Vídeo Locadora PAGEREF _Toc18940306 \h 54.3Exercício Ilustrativo – Realizando uma Loca??o PAGEREF _Toc18940307 \h 54.4Devolvendo uma Loca??o PAGEREF _Toc18940308 \h 54.5Pagamento da Loca??o PAGEREF _Toc18940309 \h 54.6Exercício Ilustrativo – Inicializa??o do Supermercado PAGEREF _Toc18940310 \h 54.7Supermercado PAGEREF _Toc18940311 \h 55Resolu??o dos Exercícios de Diagramas de Use Cases PAGEREF _Toc18940312 \h 55.1Resolu??o do Exercício Ilustrativo – Vídeo Locadora PAGEREF _Toc18940313 \h 55.2Resolu??o do Exercício do Supermercado PAGEREF _Toc18940314 \h 86Resolu??o dos Exercícios de Diagramas de Seqüência de Análise PAGEREF _Toc18940315 \h 176.1Resolu??o do Exercício Ilustrativo – Vídeo Locadora PAGEREF _Toc18940316 \h 177Resolu??o dos Exercícios de Diagramas de Classes PAGEREF _Toc18940317 \h 197.1Resolu??o do Exercício Ilustrativo – Vídeo Locadora PAGEREF _Toc18940318 \h 198Resolu??o dos Exercícios de Diagramas de Projeto PAGEREF _Toc18940319 \h 228.1Resolu??o do Componente de Banco de Dados PAGEREF _Toc18940320 \h 228.2Resolu??o do Exercício Ilustrativo – Janela Principal da Vídeo Locadora PAGEREF _Toc18940321 \h 248.3Resolu??o do Exercício Ilustrativo – Realizando uma Loca??o PAGEREF _Toc18940322 \h 31Introdu??o Esta é a sua apostila de exercícios. Nela est?o contidos os enunciados de todos os exercícios utilizados durante a disciplina, e quase todas as resolu??es. Exercícios de Diagramas de Use CasesExercício Ilustrativo – Vídeo LocadoraVocê foi contratado para modelar um sistema de controle para uma pequena vídeo locadora. O proprietário, e único funcionário da empresa, lhe disse que seu negócio é centrado no registro de empréstimos e devolu??es de fitas de vídeo.Todas as fitas ficam em exposi??o na loja, de forma que os clientes possam pegar as fitas que desejam locar e leva-las até o caixa para a efetiva??o do empréstimo. Seu cliente n?o aceita reservas de fitas.Na devolu??o, a locadora n?o aceita devolu??es parciais. Assim, todas as fitas emprestadas s?o devolvidas juntas no momento da devolu??o.O pagamento da loca??o pode ser feito tanto no momento do empréstimo como da devolu??o, ao gosto do cliente. Todas as formas de pagamento s?o aceitas. A forma de registrar pagamento sempre é a mesma, independente da forma de pagamento.Outra atividade importante do negócio é a compra e registro de novas fitas. O cliente n?o deseja efetuar o controle da compra pelo sistema. Ele deseja apenas poder registrar as novas fitas compradas no sistema.Crie, com as funcionalidades descritas acima, um diagrama de use cases.Dica: Por uma quest?o de simplicidade n?o se preocupe com quest?es como cálculo de multas ou renova??es de loca??es.SupermercadoUm grande supermercado deseja construir um sistema para informatizar as principais áreas de seu negócio: vendas, estoque, cadastro de clientes e compras.A área de vendas é responsável por efetuar vendas diretas ao cliente. O cliente escolhe as mercadorias que deseja comprar nas prateleiras e as coloca em seu carrinho. Quando acabar de escolher todas as mercadorias que deseja, o cliente dirige-se ao caixa, que registra as mercadorias escolhidas pelo cliente no sistema. A cada mercadoria registrada pelo caixa, uma imagem da mercadoria, juntamente com seu nome e pre?o deve ser exibida ao cliente. Quando todas as mercadorias forem registradas, o total da venda deve ser exibido para o cliente.A cada mercadoria que for registrada pelo caixa, uma baixa de estoque deve ser registrada automaticamente.O pagamento das mercadorias compradas pelo cliente pode ser feito de três formas distintas: dinheiro, cart?o de crédito ou cheque. Para pagamento em dinheiro, nada especial acontece, e o pagamento é registrado normalmente.Para pagamento em cart?o de crédito, um pedido de autoriza??o deve ser feito à operadora de cart?o de crédito. O equipamento do caixa é capaz de fazer a conex?o com a operadora para solicitar a autoriza??o, bastando ao caixa passar o cart?o do cliente no equipamento.Para pagamento em cheque, é necessário que o cliente esteja cadastrado no supermercado. Caso o cliente n?o esteja cadastrado, ele deve ser encaminhado ao departamento de cadastro de clientes. Se o cliente já estiver cadastrado, o caixa pede autoriza??o no sistema para efetuar o recebimento em cheque. Caso o sistema negue o recebimento em cheque, o caixa deve encaminhar cliente para o gerente de vendas.O departamento de cadastro de clientes é responsável por cadastrar todos os clientes que compram em cheque no supermercado. No momento do cadastro do cliente, uma verifica??o de crédito é feita junto ao SERASA. Independente da situa??o do cliente no SERASA, seu cadastro sempre é efetuado. Se a situa??o do cliente junto ao SERASA for ruim, o cliente já é marcado como mau pagador.A outra responsabilidade do departamento de cadastro de clientes é autorizar recebimentos em cheque. Se o cliente estiver marcado como mau pagador, a autoriza??o de recebimento em cheque é negada. Note que a consulta ao SERASA é realizada apenas no momento do cadastro do cliente. Depois do cadastro, o supermercado assume o risco de fazer o controle de crédito do cliente.O departamento de cadastro de clientes somente retira um cliente da situa??o de mau pagador com autoriza??o do gerente de vendas.O departamento de estoque é responsável por fazer o controle dos estoques de prateleira e de armazém. O estoque de prateleira é formado pelas mercadorias que est?o nas prateleiras e podem ser compradas pelos clientes. O estoque de armazém é composto por mercadorias de reposi??o para as prateleiras.Sempre que um produto atingir seu estoque mínimo em prateleira, o responsável do departamento de estoque deve ser avisado de que uma reposi??o deve ser feita.Para fazer a reposi??o, o estoquista deve retirar produtos do armazém, dando baixa neste estoque, e colocar estes produtos na prateleira, dando entrada neste estoque.Sempre que a quantidade de um produto no armazém cair abaixo do estoque mínimo, um pedido de compra deve ser feito, automaticamente, para o departamento de compras.Sempre que uma compra for recebida pelo departamento de compra, o departamento de estoque deve ser acionado para dar entrada no estoque de armazém aos produtos comprados.Finalmente, o departamento de compras é responsável por comprar novas mercadorias de reposi??o para o estoque de armazém.Para efetuar uma compra, uma cota??o deve ser realizada com todos os fornecedores dos produtos a serem comprados. A compra deve ser realizada do fornecedor com o melhor pre?o.No recebimento dos produtos comprados, o departamento de estoque deve ser avisado para fazer a estocagem dos as funcionalidades descritas, monte os diagramas de use cases do negócio do supermercado.Dica: crie um diagrama de use cases para cada área do supermercado.Exercícios de Diagramas de Seqüência de AnáliseExercício Ilustrativo – Vídeo LocadoraBaseado no diagrama de use cases construído para o exemplo da vídeo locadora modelado na sess?o anterior, modele os diagramas de seqüência de análise para este diagrama.SupermercadoBaseado nos diagramas de use cases construídos para o exercício do supermercado modelado na sess?o anterior, modele os diagramas de seqüência de análise para estes diagramas.Exercícios de Diagramas de ClassesExercício Ilustrativo – Vídeo LocadoraA partir dos diagramas de seqüência de análise construídos para o exemplo da vídeo locadora na sess?o anterior, encontre as classes candidatas e crie um diagrama de classes conceitual.Exercício Ilustrativo – Dividindo o Supermercado em PacotesCrie um pacote para cada área do supermercado, e organize nestes pacotes os diagramas que aforam criados até agora.SupermercadoA partir dos diagramas de seqüência de análise construídos para o exercício do supermercado na sess?o anterior, encontre as classes candidatas e crie um diagrama de classes conceitual.Exercícios de Diagramas de ProjetoComponente de Banco de DadosPara modelarmos os diagramas de projeto da vídeo locadora e do supermercado, usaremos uma única classe com persistência de aplica??o: a classe BD. Esta classe terá as seguintes características:Ela irá trabalhar com um sistema de login chamado shadow login. Neste sistema há, no banco de dados, um único usuário para a aplica??o. Assim, quando o componente de banco de dados efetuar a conex?o com o banco, esta conex?o será efetuada com o usuário locadora ou com o usuário supermercado. Realizada a conex?o com o banco, a seguran?a de acesso à aplica??o será feita pela própria aplica??o. Haverá, tanto na locadora quanto no supermercado, uma tabela de usuários que conterá todos os usuários com permiss?o de efetuar logon no sistema. A verifica??o de usuário e senha será feita através de um select nesta tabela.Assim, o construtor da classe BD deverá receber dois par?metros, um nome de usuário e uma senha criptografada com os quais será efetuada a conex?o (na prática todos os par?metros de configura??o da conex?o podem ser passados neste construtor).Deve haver um método responsável por realizar a conex?o com o banco de dados utilizando o usuário e a senha passadas como par?metro no construtor.Deve haver um método público para disparar SQL’s no banco. Este método recebe como par?metro uma string contendo o SQL a ser rodado. Seu retorno deve ser booleano, indicando se a query rodou com sucesso ou n?o.Caso a query retorne um result set, este result set ficará armazenado em BD. Para recuperar este result set, crie um método específico. Este método n?o recebe nenhum par?metro, e, por uma quest?o de simplifica??o dos exercícios, ele retornará uma string.Para efetuar controle transacional, ser?o necessários três métodos: um para iniciar uma transa??o, um para efetuar um commit e outro para roll back. Todos estes métodos retornar?o um valor booleano indicando o sucesso ou a falha do controle transacional.Crie, em seu diagrama de classes, a classe BD seguindo as orienta??es dadas.Exercício Ilustrativo – Janela Principal da Vídeo LocadoraTendo por base todos os diagramas que já foram modelados para a vídeo locadora até agora, construa os diagramas de comunica??onecessários para, desde a inicializa??o da aplica??o, abrir a janela principal da vídeo locadora.Exercício Ilustrativo – Realizando uma Loca??oA partir da janela principal da locadora crie os diagramas de comunica??onecessários para:Abrir a janela onde será registrado o novo empréstimo;Registrar as fitas que far?o parte do empréstimo;Calcular o valor total da loca??o;Persistir o empréstimo.Devolvendo uma Loca??oDesenhe os diagramas de comunica??onecessários para efetuar a devolu??o de uma loca??o.Pagamento da Loca??oDesenhe os diagramas de comunica??onecessários para efetuar o pagamento de uma loca??o.Exercício Ilustrativo – Inicializa??o do SupermercadoDesenhe os diagramas de seqüência necessários para fazer a inicializa??o da aplica??o do supermercado.SupermercadoDesenhe os diagramas de projeto para o exercício do supermercado, a partir do diagrama de inicializa??o desenhado no exercício anterior. Fique à vontade para escolher entre diagramas de comunica??oou seqüência.Resolu??o dos Exercícios de Diagramas de Use CasesResolu??o do Exercício Ilustrativo – Vídeo LocadoraO diagrama de use cases para a vídeo locadora é mostrado na figura abaixo:Os cenários para cada use case s?o mostrados abaixo: Use Case Cadastrar clienteFluxo Normal:1 - Verificar documenta??o do cliente: CPF e comprovante de residência.2 - Coletar dados pessoais do cliente.3 - Fornecer o código do cliente ao cliente.Fluxo Alternativo:1.1 - Se o cliente n?o estiver com os documentos necessários, n?o permitir o cadastro do cliente. Use Case Cadastrar fitasFluxo Normal:1 - Somente fitas que acabaram de ser compradas devem ser cadastradas. 2 - Informar dados da fita. Use Case Comprar fitasFluxo Normal:1 - Cotar pre?o da nova fita com os fornecedores.2 - Escolher o fornecedor com o menor pre?o.3 - Efetuar a compra. Use Case Efetuar loca??oFluxo Normal:1 - Localiza o cliente no cadastro de clientes.2 - Cria uma nova loca??o para o cliente.3 - Registra todas as fitas que o cliente escolheu para locar.4 - Calcula o total da loca??o.5 - Verifica se o cliente deseja efetuar o pagamento agora ou na devolu??o. 6 - Se o cliente desejar pagar agora, receber pagamento.Fluxo Alternativo:1.1 - Se o cliente n?o estiver cadastrado, n?o autorizar a loca??o.1.2 - Se o cliente n?o foi encontrado, permite a realiza??o de outra busca. Use Case Receber devolu??oFluxo Normal:1 - Localizar a loca??o. A loca??o pode ser localizada por algumas das fitas que estiverem sendo devolvidas pelo cliente, pelo nome do cliente ou por seu código.2 - Marcar a loca??o como devolvida.3 - Verificar a necessidade de receber pagamento.4 - Se o cliente n?o efetuou o pagamento na loca??o, receber pagamento.Fluxo Alternativo:1.1 - Se a loca??o n?o foi encontrada, n?o autoriza a devolu??o.1.2 - Se a loca??o n?o foi encontrada, permite a realiza??o de outra busca. Use Case Receber pagamentoFluxo Normal:1 - Marca a loca??o como paga.Esta solu??o também mostra que as atividades de cadastro de clientes e de loca??o de fitas s?o independentes e n?o relacionadas. Caso a opera??o de cadastro de cadastro de clientes possa ser efetuada como parte da opera??o de loca??o de fitas, no caso de um cliente que ainda n?o esteja cadastrado estar locando uma fita, o diagrama poderia ser desenhado da seguinte maneira:O cenário do use case Efetuar loca??o ficaria da seguinte forma: Use Case Efetuar loca??oFluxo Normal:1 - Localiza o cliente no cadastro de clientes.2 - Cria uma nova loca??o para o cliente.3 - Registra todas as fitas que o cliente escolheu para locar.4 - Calcula o total da loca??o.5 - Verifica se o cliente deseja efetuar o pagamento agora ou na devolu??o. 6 - Se o cliente desejar pagar agora, receber pagamento.Fluxo Alternativo:1.1 - Se o cliente n?o estiver cadastrado, n?o autorizar a loca??o.1.2 - Se o cliente n?o estiver cadastrado, cadastrar cliente.1.2 - Se o cliente n?o foi encontrado, permite a realiza??o de outra busca.Resolu??o do Exercício do SupermercadoA seguir o diagrama para o departamento de vendas.Repare que neste diagrama, o do departamento de vendas, todos os servi?os prestados por outros departamentos ou para outros departamentos também envolvem a presen?a de um ator que representa o departamento. A vantagem desta representa??o é que todas as intera??es do departamento de vendas com outros departamentos ficam mapeada de uma forma bem simples.Outro detalhe destas intera??es entre departamentos é a utiliza??o, neste diagrama do departamento de vendas, de servi?os que s?o de responsabilidade de outros departamentos. Estes s?o os casos dos use cases Baixar estoque da prateleira e Verificar situa??o do cliente. O primeiro de responsabilidade do Estoque, e o último de responsabilidade do Cadastro de clientes. Assim, estes use cases foram originalmente definidos nos respectivos diagramas de use cases de cada departamento, e utilizados aqui na forma de um atalho (short cut). Repare que o desenho de cada um destes use cases possui um pequeno detalhe gráfico em sua borda inferior esquerda (uma setinha inclinada para a direita) indicando que aqueles use cases s?o atalhos (ou seja, foram definidos em outro diagrama). Este ponto ficará mais claro quando chegarmos aos diagramas do cadastro de clientes e do estoque.A última novidade deste diagrama está nos use cases Providenciar cadastramento e Encaminhar cliente. Note que o nome destes use cases está escrito em itálico no diagrama. Isto significa que a propriedade abstract destes use cases está marcada, ou seja, estes use cases s?o use cases para os quais nenhuma implementa??o (automa??o por software) será fornecida. Eles apenas representam aspectos do negócio que n?o ser?o informatizados mas que s?o importantes para a compreens?o do problema e do ambiente onde o sistema será implantado. VendasA seguir, os detalhes de documenta??o deste diagrama: UseCase Encaminhar clienteFluxo Normal:Se o pagamento em cheque n?o foi autorizado:1- Encaminhar o cliente para a ger?ncia de vendas para análise de sua situa??o.Fluxo Alternativo:1.1- Caso o cliente desista de pagar em cheque, n?o realizar este encaminhamento.abstrato UseCase Pedir autoriza??oFluxo Normal:1- Transmitir os dados do cart?o e o valor da transa??o.2- Obter autoriza??o para a transa??o. UseCase Providenciar cadastramentoFluxo Normal:Se o pagamento em cheque n?o for autorizado por falta de cadastro do cliente:1- Encaminhar o cliente para o departamento de cadastro para cadastramento e análise de crédito.Fluxo Alternativo:1.1- Se o cliente desistir de pagar em cheque, n?o efetuar esta providencia.abstrato UseCase Receber em cart?o de créditoFluxo Normal:1- Pedir autoriza??o para a operadora de cart?o de crédito.2- Emitir comprovantes de pagamento.3- Coletar a assinatura do cliente na guia do supermercado.4- Registra o pagamento em cart?o de crédito.Fluxo Alternativo:1.1- Se a operadora de supermercado n?o autorizar a transa??o, n?o permitir o pagamento em cart?o de crédito. UseCase Receber em chequeFluxo Normal:1- Informa o CPF do cliente.2- Verifica a situa??o do cliente.3- Registra o pagamento em cheque.Fluxo Alternativo:2.1- Se o cliente n?o estiver cadastrado, providenciar cadastramento.2.2- Se o cliente estiver cadastrado, mas a sua situa??o for de mal pagador, encaminhar cliente para a ger?ncia de vendas. UseCase Receber em dinheiroFluxo Normal:1- Informar valor dado pelo cliente.2- Calcular troco.3- Registra o pagamento em dinheiro. UseCase Receber pagamentoFluxo Normal:1- Receber do cliente a espécie do pagamento. abstrato UseCase Vender produtosFluxo Normal:1- Cliente chega com produtos em seu carrinho.2- Registra cada um dos produtos comprados pelo cliente.3- Para cada produto registrado, mostrar uma imagem do produto e seu pre?o.4- Para cada produto registrado, baixar o estoque de prateleira.5- Depois de registrar todos os produtos comprados, calcular o valor total da compra.6- Receber pagamento. Cadastro de clientesAcima está o diagrama para o departamento de cadastro de clientes. Repare que neste diagrama também aparece o use case Verificar situa??o do cliente. No entanto, como as atividades necessárias para esta verifica??o s?o da al?ada do cadastro, este use case foi originalmente definido neste diagrama, e utilizado no diagrama de vendas como um atalho. Note que neste diagrama também representamos a intera??o entre o departamento de vendas e o de cadastro, representando o departamento de vendas como um ator que utiliza os servi?os prestados pelo use case em quest?o.Outra novidade é a presen?a do ator SERASA. Neste caso, representamos um sistema externo como um ator.Abaixo as descri??es dos elementos deste diagrama.Estas descri??es utilizam o conceito de amarra??o temporal entre use cases. Vejamos um exemplo: As atividades do use case Atualizar situa??o do cliente somente devem ser efetuadas depois que uma autoriza??o expressa do gerente de vendas for emitida. Esta autoriza??o está expressa pelo use case Autorizar atualiza??o da situa??o do cliente. Neste caso, n?o deveria existir uma rela??o entre estes dois use cases? Talvez uma rela??o de extens?o, uma vez que a atualiza??o está condicionada à autoriza??o?N?o, de forma alguma deveria existir uma rela??o qualquer entre estes dois use cases. Vejamos o porque. Se nós colocarmos uma rela??o qualquer entre estes dois use cases, estaremos dizendo que, por exemplo, as atividades da atualiza??o da situa??o de clientes fazem parte das atividades da autoriza??o para a atualiza??o, em outras palavras, se usarmos uma associa??o entre estes dois use cases diremos que o ato de autorizar uma atualiza??o também contém o ato de fazer a atualiza??o em si, o que n?o é verdade. O que acontece, de fato, é apenas uma amarra??o temporal, ou seja, o que acontece é que antes da altera??o deve haver uma autoriza??o, e nada mais.Ent?o como representar uma amarra??o temporal num diagrama de use cases? Nós n?o representamos! Um diagrama de use case n?o tem o objetivo de representar a ordem em que os use cases ser?o executados no negócio, portanto, n?o existe um elemento sintático que expresse ordem. Estas amarra??es temporais ser?o representadas posteriormente, nos diagramas de seqüência.No entanto, é importante que estas amarra??es sejam capturadas durante a modelagem dos diagramas de use case. Assim, elas devem ser explicitadas nas descri??es das atividades de um use case. Voltemos ao exemplo acima. Procure, nas descri??es abaixo, a descri??o do use case Atualizar situa??o do cliente. Veja que no fluxo normal desta descri??o há uma cita??o explícita dizendo que este fluxo deve ser executado apenas depois do recebimento de uma autoriza??o. Esta descri??o será utilizada durante a constru??o dos diagramas de seqüência que ser?o abordados no próximo capítulo deste curso.Veja as descri??es dos use cases: UseCase Atualizar situa??o do clienteFluxo Normal:Depois da autoriza??o do gerente de vendas:1- Marca os clientes indicados como mal pagadores.2- Marca os clientes indicados como bons pagadores. UseCase Autorizar atualiza??o da situa??o do clienteFluxo Normal:1- Informa ao cadastro quais s?o os clientes a serem considerados maus pagadores por terem emitido cheques sem fundo para o supermercado.2- Informa ao cadastro quais s?o os clientes a terem sua situa??o de mal pagadores anulada. abstrato UseCase Cadastrar clienteFluxo Normal:1- Coletar dados pessoais do cliente.2- Verificar crédito do cliente.3- Gravar cadastro do cliente. UseCase Verificar créditoFluxo Normal:1- Verificar junto ao SERASA a situa??o do cliente na pra?a. UseCase Verificar situa??o do clienteFluxo Normal:1- Verifica se o cliente está cadastrado.2- Verifica se o cliente está marcado como mal pagador.3- Autoriza o recebimento em cheque.Fluxo Alternativo:1.1- Se o cliente n?o estiver cadastrado, solicita o encaminhamento do cliente para o departamento de cadastro para seu cadastramento e análise de crédito.2.1- Se o cliente estiver marcado como mal pagador, solicitar que o cliente seja encaminhado ao gerente de vendas, que irá analisar a situa??o do cliente. EstoqueAcima está o diagrama para o departamento de estoque. Reparte que neste diagrama a novidade é que existe uma atividade que é inteiramente disparada pelo sistema, ou seja, o ator Estoquista passa a ser um recebedor de estímulos, ao invés de um gerador. Esta situa??o é representada pelos use cases Baixar estoque de prateleira e Solicitar reposi??o de estoque de prateleira. Repare que todas estas atividades s?o disparadas pelo sistema de vendas (representado como um ator) e, num dado momento, acionam o Estoquista.Outro detalhe a lembrar é que o use case Baixar estoque de prateleira já apareceu, como um atalho, no diagrama de vendas. Este é o diagrama de origem deste use case. Repare que neste diagrama os detalhes sobre os pontos de extens?o deste use case est?o modelados, o que n?o acontecia no diagrama de vendas.Finalmente, sobre o que discutimos a respeito da diferen?a entre amarra??es temporais e relacionamentos, no diagrama anterior, repare que as atividades do use case Solicitar reposi??o de estoque de prateleira realmente fazem parte das atividades do use case Baixar estoque de prateleira, o que justifica a presen?a do relacionamento mostrado no diagrama.Abaixo, as descri??es dos use cases deste diagrama: UseCase Baixar estoque de prateleiraFluxo Normal:1- Subtrair do estoque de prateleira de um dado produto, uma dada quantidade.2- Verifica se o estoque de prateleira do produto caiu abaixo do estoque mínimo.3- Se sim, solicitar reposi??o de estoque de prateleira. UseCase Registrar entrada no estoque de armazémFluxo Normal:Depois de guardados os produtos no armazém:1- Para um dado produto, aumentar sua quantidade no armazém em uma dada quantidade. UseCase Repor estoque de armazémabstratoFluxo NormalDepois da notifica??o de chegada de novas mercadorias para estocagem:1- Buscar as novas mercadorias no departamento de compras.2- Transportar as mercadorias ao armazém.3- Armazenar as mercadorias. UseCase Repor estoque de prateleiraabstratoFluxo NormalDepois de atualizado o estoque de prateleira:1- Retirar as mercadorias do estoque de armazém.2- Transportar as mercadorias até as prateleiras.3- Armazena os produtos nas prateleiras. UseCase Solicitar compra de mercadoriasFluxo Normal:1- Enviar ao gerente de compras um pedido de compras de novas mercadorias. UseCase Solicitar reposi??o de estoque de prateleiraFluxo Normal:1- Notificar o estoquista que um dado produto precisa ser reposto na prateleira. UseCase Transferir estoque do armazém para a prateleiraFluxo Normal:Depois de receber a solicita??o de reposi??o do estoque de prateleira:1- Para um dado produto, aumenta sua quantidade no estoque de prateleira em um dado valor.2- Baixa o estoque de armazém deste produto na mesma propor??o.3- Verifica se a quantidade da mercadoria caiu abaixo do estoque mínimo.4- Se sim, solicitar a compra de novas mercadorias. Compras UseCase Efetua comprasFluxo Normal:Depois de feita a cota??o:1- Escolhe um fornecedor e cria um pedido de compra.2- Envia o pedido para o comprador. UseCase Notifica a chagada de novas mercadoriasFluxo Normal:Depois do recebimento das mercadorias compradas:1- Notificar ao estoquista que novas mercadorias aguardam para serem estocadas. UseCase Realiza cota??o de pre?osFluxo Normal:Depois de receber uma solicita??o de compras:1- Verifica quais s?o os fornecedores dos produtos a serem comprados.2- Coleta os pre?os e as formas de pagamento dos fornecedores para os produtos e para as quantidades a serem compradas. UseCase Recebe mercadorias compradasFluxo Normal:1- Confere as mercadorias recebidas com o pedido de compras.2- Marca o pedido como recebido.Fluxo Alternativo:1.1- Se houver qualquer problema detectado pela confer?ncia, n?o recebe as mercadorias.Resolu??o dos Exercícios de Diagramas de Seqüência de AnáliseResolu??o do Exercício Ilustrativo – Vídeo LocadoraOs diagramas de seqüência da vídeo locadora s?o mostrados abaixo. Repare que os nomes destes diagramas s?o os mesmos dos use cases no qual eles se baseiam. Cadastrar cliente Cadastrar fitas Efetuar loca??oEste diagrama modela as atividades que comp?e o use case Efetuar loca??o. Repare, no diagrama de use cases da locadora, que este use case possui um ponto de extens?o. A mensagem que representa este ponto de extens?o é a de número 7. Repare que a condi??o utilizada nesta mensagem é a mesma utilizada no diagrama de use cases. Receber devolu??o Receber pagamentoResolu??o dos Exercícios de Diagramas de ClassesResolu??o do Exercício Ilustrativo – Vídeo LocadoraO diagrama de classes conceitual da vídeo locadora é mostrado na figura abaixo:Repara que as classes foram associadas com rela??es de dependência. Estas associa??es n?o s?o obrigatórias neste diagrama, porém, indicam, já, um planejamento de navegabilidade e visibilidade entre as classes. Durante a fase de projeto, estas dependências podem ser úteis para descobrir associa??es, ou para lembrar de associa??es que já foram descobertas desde a fase de análise.Classe Clientepersistente.Detalhes dos atributosCodigoprivate int CodigoCódigo do cliente, criado no momento em que o cliente é cadastrado.CPFprivate String CPFEnderecoprivate String EnderecoNomeprivate String NomeClasse FitaPersistente.Detalhes dos atributosCodigoprivate int CodigoCódigo da fita, criado no momento em que a fita é cadastrada. Este atributo foi criado por motivo de compatibilidade com o modelo relacional.Nomeprivate String NomeNome do filme presente na fita.Precoprivate float PrecoPre?o atual cobrado pela loca??o da fita.Classe Fita_LocadaPersistente.Detalhes dos atributosCodFitaprivate int CodFitaCódigo da fita que está na loca??o. Este atributo foi criado por motivo de compatibilidade com o modelo relacional.CodLocacaoprivate int CodLocacaoCódigo da loca??o que contém a fita locada. Este atributo foi criado por motivo de compatibilidade com o modelo relacional.Precoprivate float PrecoPre?o pelo qual a fita foi locada para o cliente.Classe Loca??oPersistente.Detalhes dos atributosCodCliprivate int CodCliCódigo do cliente que fez a loca??o. Este atributo foi criado por motivo de compatibilidade com o modelo relacional.Codigoprivate int CodigoCódigo da loca??o, criado no momento em que a loca??o é realizada. Este atributo foi criado por motivo de compatibilidade com o modelo relacional.Dataprivate datetime DataData em que ocorreu a loca??o.Devolucaoprivate datetime DevolucaoData em que ocorreu a devolu??o.Pagoprivate boolean PagoIndica se a loca??o já foi paga.Totalprivate float TotalArmazena o valor total a ser cobrado pela loca??o.Resolu??o dos Exercícios de Diagramas de ProjetoResolu??o do Componente de Banco de DadosO diagrama de classes para o componente de banco de dados é mostrado a seguir:Classe BDClasse responsável por fornecer abstra??o de banco de dados para aplica??es OO.Detalhes dos atributosAplicacaoprivate String AplicacaoNome de usuário da aplica??o que está se conectando com o banco de dados.AutoIncrementprivate int AutoIncrement?ltimo código gerado automaticamente pelo banco, durante a última query disparada.ResultSetprivate String ResultSetResult set retornado pela última query disparada.Senhaprivate String SenhaSenha da aplica??o no banco de dados. Deve estar criptografada.Detalhes dos métodosAbreTranpublic boolean AbreTran()Abre uma transa??o no banco de dados.output:True se sucesso, False se erro.BDpublic BD BD(String Aplicacao, String Senha)O nome de usuário da aplica??o e sua senha devem ser carregados nos atributos de inst?ncia respectivos.Stereotype:constructorinput:Aplica??o: Nome de usuário da aplica??o que está se logando no banco.Senha: Senha, criptografada, da aplica??o no banco de mitpublic boolean Commit()Dispara um commit no banco de dados.output:True se sucesso, False se erro.Conectapublic boolean Conecta()Realiza a conex?o com o banco de dados utilizando o nome de usuário da aplica??o e a senha carregados nos respectivos atributos de inst?ncia.output:True se sucesso, False se erro.Desconectapublic boolean Desconecta()Desfaz a conex?o com o banco de dados.output:True se sucesso, False se erro.Executepublic boolean Execute(String SQL)Dispara, no banco de dados, uma query passada como par?metro. Caso a query retorne algum result set, o result set deve ser armazenado no atributo de inst?ncia ResultSet. Caso a query n?o produza um result set, o conteúdo do atributo de inst?ncia ResultSet deve ser limpo.input:SQL: Query a ser disparada no banco de dados.output:True se a query rodou com sucesso, False se algum erro de banco ocorreu.GetAutoIncrementpublic int GetAutoIncrement()Retorna o conteúdo do atributo AutoIncrement.GetResultSetpublic String GetResultSet()Retorna o result set produzido pela última query disparada.output:Conteúdo do atributo de inst?ncia ResultSet.Rollbackpublic boolean Rollback()Dispara um rollback no banco de dados.output:True se sucesso, False se erro.Resolu??o do Exercício Ilustrativo – Janela Principal da Vídeo LocadoraComo ler um diagrama de projeto? Para entender completamente um diagrama de projeto (diagrama de colabora??o, por exemplo), ao ponto de conseguir produzir código fonte a partir dele, é necessário, sempre, ter à m?o o diagrama de classes respectivo àquele diagrama. Assim, enquanto o diagrama de colabora??o, por exemplo, ilustra a comunica??oentre os objetos, mostrando as mensagens que devem ser disparadas, o diagrama de classes, nos campos descritivos de cada método e de cada atributo, contém detalhes importantes à compreens?o do que o projetista idealizou para aquele método e para aquele atributo.? importante ter em mente que um diagrama de projeto n?o contém todas as informa??es necessárias para a implementa??o. As informa??es ausentes nestes diagramas est?o contidas nos diagramas de classes.O diagrama de comunica??o para a abertura da janela principal é mostrado abaixo: Janela PrincipalPor exemplo, a primeira mensagem do diagrama acima, a mensagem main(). Para saber se existem mais detalhes fora os que s?o ilustrados na figura, olhe no diagrama de classes, mostrado logo no final desta resolu??o. Procure a descri??o do método main na classe Aplica??o. Fa?a isso para todos os métodos em todos os diagramas.O objetivo do diagrama acima é mostrar todas as mensagens que s?o trocadas até a abertura da janela principal da vídeo locadora. Repare que a primeira classe a ser instanciada é a classe BD, criada no exercício anterior. Essa inst?ncia da classe BD será utilizada por todos os objetos que ser?o utilizados neste exercício. Assim, diz-se que o objeto BD é um objeto com persistência de aplica??o, ou seja, ele é instanciado no início da aplica??o e é destruído apenas em seu término. ? neste diagrama, o diagrama de carga da janela principal, que a carga de todos os objetos com persistência de aplica??o é feita.O passo seguinte é realizar a conex?o da aplica??o com o banco de dados, da forma como foi explicada no exercício anterior. Feita a conex?o com o banco, a janela de logon é exibida para o usuário. Repare que a opera??o da janela de logon pelo usuário n?o é mostrada por este diagrama. No entanto, este diagrama mostra o que acontece depois que o usuário interage com e fecha a janela de logon. ? isto o que mostram as mensagens 1.4 e 1.5, ou seja, a mensagem 1.5 só é disparada no momento em que a janela de logon é fechada. Para compreender melhor este processo, veja a descri??o da mensagem 1.4 no diagrama de classes.Um raciocínio similar é apresentado para a janela principal.O último detalhe deste diagrama está no ator que foi utilizado. Repara que o ator que interage com este diagrama n?o é nenhum dos atores que identificamos até agora na etapa de análise. Isto ocorre porque neste diagrama, n?o sabemos qual ator, dos identificados na análise, está utilizando o sistema. Esta descoberta será feita justamente durante o processo de logon. Se o processo de logon for realizado com sucesso, saberemos quem é o ator que interage com o sistema. Assim, Repare que os demais diagramas, que acontecem após o logon, ir?o utilizar atores previamente identificados.O diagrama que implementa o logon é mostrado na figura abaixo: LogOnNeste diagrama acontece a primeira intera??o entre o usuário e o sistema, através da janela de logon. Repare que o preenchimento dos campos usuário e senha da janela n?o é modelado. Isto ocorre porque num diagrama de projeto s?o modelados apenas impulsos do ator que geram rea??es do sistema. Neste caso, como sistema n?o faz nada no momento em que os referidos campos s?o preenchidos, nada é modelado. Repare também que as mensagens que s?o disparadas pelos atores n?o possuem nem par?metros nem tipos de retorno. Isto ocorre porque os impulsos do ator que geram rea??es no sistema geralmente s?o cliques em bot?es, ou o acionamento de comandos via janela. Assim, todos os par?metros fornecidos por um ator s?o fornecidos através do preenchimento de campos em uma janela, e todo retorno é fornecido para os atores na forma de mensagens. Tanto os campos que devem ser preenchidos pelo ator antes do processamento de um método, como as mensagens que o sistema deve exibir ao ator devem ser especificadas na descri??o do método disparado pelo ator.Assim, veja a descri??o do método log():void. Repara que esta descri??o, como já foi dito, contém mais coisas do que as que foram modeladas, como por exemplo, a necessidade de fazer um teste de preenchimento obrigatório nos campos da janela, e a query a ser disparada no banco para fazer o logon.Repare também que vários detalhes foram ignorados por este exercício, como por exemplo, o fato de que o usuário pode optar por pressionar um bot?o de cancelamento na janela de logon, fechando a janela e a aplica??o, ou que nenhum diagrama foi feito para o encerramento da aplica??o. Estes detalhes foram suprimidos este exercício por uma quest?o de simplicidade, mas, em um projeto real, devem ser levados em considera??o e devem ser modelados.O diagrama de classes para esta solu??o é mostrado a seguir:Repare que este diagrama possui classes que n?o foram identificadas durante a etapa de análise. Isto é comum. Estas s?o classes de projeto, ou seja, estas classes n?o foram identificadas durante a etapa de análise por n?o fazer parte do domínio do negócio, ou seja, elas existem apenas para viabilizar a constru??o de uma solu??o, e n?o para representar um conceito importante do negócio.Repare também que neste diagrama já aparecem associa??es entre classes. Estas associa??es foram desenhadas no momento em que foi detectado o envio de uma mensagem de um objeto de uma classe para um objeto de outra classe.Por exemplo, voltemos ao diagrama Janela principal. No momento em que desenhamos a mensagem 1.1, entre os objetos Aplica??o e BD, desenhamos a associa??o entre as classes de ambos no diagrama de classes acima. O mesmo raciocínio foi utilizado para desenhar todos os demais relacionamentos.Por fim, note que neste diagrama de classes n?o aparece nenhuma das classes que foram identificadas na etapa de análise. Aquelas classes se encontram em outro diagrama. ? normal um projeto possuir diversos diagramas de classes, onde cada diagrama mostra somente as classes que aparecem em um dado contexto.Abaixo est?o as descri??es de todos os elementos que aparecem neste diagrama.Classe Aplica??oClasse de controle da aplica??o de vídeo locadora.Detalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.LogOnprivate LogOn LogOnPonteiro para a janela de logon.Principalprivate Principal PrincipalPonteiro para a janela principal.Detalhes dos métodosmainpublic void main()Método para inicializa??o da aplica??o.Carrega as classes com persistência de aplica??o. Neste caso, a única classe deste tipo a ser utilizada será a classe BD.Abre a janela de LogOn. Ao final de sua utiliza??o, a janela de LogOn deve ser destruída.Se o logon for realizado com sucesso, abre a janela principal.No momento em que a janela principal for fechada, ela deve ser destruída e a aplica??o finalizada.Classe LogOnJanela responsável por fazer o Logon do usuário que está abrindo a vídeo locadora.Estereótipo: Janela.Detalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Detalhes dos métodosClosepublic void Close()Fecha a janelaDestroypublic void Destroy()Destrói a janela.Stereotype:destructorlogpublic void log()Gerencia a opera??o de logon no banco de dados.Verifica se o usuário e a senha foram preenchidos na janela. Se n?o foram, exibe uma mensagem de erro ao usuário.Se os campos foram preenchidos, dispara uma query no banco a procura de uma linha na tabela USUARIO que possua o usuário e a senha especificados.Se um erro se acesso ao banco de dados ocorrer, exibe uma mensagem de erro ao usuário.Se o usuário e a senha forem localizados, fecha a janela e sinaliza sucesso. Se n?o forem localizados, exibe uma mensagem de erro ao usuário e mantém a janela aberta.LogOnpublic LogOn LogOn(HYPERLINK " UFU/2013-1/BSI - GSI025 - Modelagem de Software/ProjectReport.rtf" \l "R16"BD BD)Recebe o banco de dados a ser utilizado e o coloca no atributo BD.Stereotype:constructorinput:BD: Banco de dados a ser utilizado.output:Inst?ncia da classe.ShowModalpublic ResultModal ShowModal()Exibe a janela para o usuário e desvia o fluxo de processamento para ela.output:Retorna a forma como a janela foi fechada.Classe PrincipalJanela principal da vídeo locadora. Só deve ser aberta para usuário que passaram pela etapa de logon com sucesso.Estereótipo: Janela.Detalhe dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Detalhes dos métodosDestroypublic void Destroy()Desisntancia a janela.Stereotype:destructorPrincipalpublic Principal Principal(BD BD)Recebe o banco de dados a ser utilizado e o coloca no atributo de inst?ncia BD.Stereotype:constructorinput:BD: Banco de dados a ser utilizado.output:Inst?ncia da classe.ShowModalpublic ModalResult ShowModal()Exibe a janela para o usuário e desvia o fluxo de processamento para ela.output:Retorna a forma como a janela foi fechada.Resolu??o do Exercício Ilustrativo – Realizando uma Loca??oAbaixo, veja o diagrama de seqüência de análise para a realiza??o de uma loca??o, criado em exercícios anteriores, este diagrama será a base para a resolu??o deste exercício. Efetuar loca??oNos exercícios anteriores n?o utilizamos diagramas de seqüência de análise como base para a solu??o porque n?o estávamos modelando nenhum aspecto pertinente ao negócio da locadora. Todos os diagramas que fizemos até agora modelam decis?es puramente de projeto, independentes do negócio. Este exercício aborda a modelagem da primeira faceta do negócio, a loca??o de fitas.No entanto, tanto este exercício quanto os anteriores pertencem ao projeto da vídeo locadora. Assim, devemos aproveitar o que já foi feito até agora, ou seja, já podemos considerar que a aplica??o foi carregada, o logon foi feito, e a janela principal foi aberta. Repare que no diagrama abaixo, o ator, que agora n?o é mais um ator genérico usuário, mas um ator que foi identificado durante o processo de análise, já interage diretamente com a janela principal, que foi aberta no exercício anterior. Abertura da janela de loca??oRepare que este diagrama é extremamente sucinto e pontual, ou seja, ele se presta apenas para mostrar a abertura da janela de loca??o e mais nada. Esta característica dos diagramas de projeto vai acarretar em outra: uma grande quantidade de diagramas de projeto, todos eles sucintos e pontuais. N?o se assuste com isso, estas características s?o esperadas, e mais que esperadas, s?o desejadas neste nível do projeto.O objetivo de um diagrama de projeto é modelar como um dado comportamento at?mico deve ser implementado, assim, toda vez que este comportamento at?mico for necessário, seu diagrama correspondente (e a implementa??o deste diagrama, por sua vez) deve ser referenciado.Vejamos o exemplo da abertura da janela de loca??o. Esta janela será utilizada para três finalidades distintas: efetua??o de loca??es, efetua??o de devolu??es e recebimento de pagamentos. Assim, em cada um dos diagramas que ir?o implementar estas funcionalidades, n?o será necessário representar a abertura da janela de loca??o, que já foi feita no diagrama acima.Ao invés de criarmos um diagrama para a abertura da janela de loca??es, poderíamos ter optado por outras duas solu??es: Representar a abertura desta janela em algum dos diagramas das funcionalidades acima citadas, ou em todos eles. Ambas as solu??es s?o ruins. A primeira por implicar numa dificuldade de localiza??o da modelagem da funcionalidade. Como você vai fazer para, num momento futuro, descobrir em qual diagrama foi modelada a abertura da janela, para efetuar uma possível manuten??o? A segunda por provocar redund?ncia no trabalho de manuten??o. Se a abertura da janela for modificada, todos os diagramas que a implementam ter?o que ser modificados.Assim, todos os diagramas de projeto deste exercício representar?o única e exclusivamente fun??es at?micas.Assim, uma vez aberta a janela de loca??es, o diagrama abaixo representa todas as opera??es disponíveis para a cria??o de uma nova loca??o. Nova Loca??oRepare que apesar da quantidade de mensagens enviadas pelo ator para a janela, este diagrama continua at?mico. Ele mostra o que acontece quando o ator ordena a cria??o de uma nova loca??o, e indica a ordem das mensagens que o ator deve enviar para concretizar a loca??o até seu fechamento. No entanto, a implementa??o de cada uma destas mensagens é mostrada em diagramas distintos.Neste ponto, compare a nossa solu??o com a ordem dos eventos no diagrama de seqüência de análise. No diagrama de seqüência, a localiza??o do cliente vem antes da cria??o da nova loca??o. Aqui no projeto, resolvemos alterar esta ordem, por uma quest?o de ergonomia. Decidimos que seria mais natural para o usuário primeiro ordenar a cria??o de uma nova loca??o para depois obter acesso à op??o que permite a localiza??o de um cliente. Este tipo de decis?o é muito comum na etapa de projeto. No entanto, note que esta decis?o n?o alterou a forma como a opera??o efetuar loca??o do negócio funciona, ela afeta apenas a forma como o software será implementado. Assim, como o negócio n?o sofreu nenhuma altera??o, n?o é necessário alterar os diagramas de análise (use case e seqüência).O diagrama abaixo mostra como a janela de busca de clientes será utilizada para localizar o cliente que está fazendo a loca??o e passá-lo para a classe de negócio Loca??o. Repare que todo o objeto cliente que representa o cliente que está efetuando a loca??o é passado como par?metro. Abertura da janela de localiza??o de clientesJá a forma como a busca é realizada pela janela de busca é mostrada no diagrama abaixo. Repare que este diagrama utiliza uma classe auxiliar de negócio, a classe ListaCliente. Esta classe foi criada para retirar a lógica de negócio da busca de clientes da janela de busca. Se você reparar no diagrama de classes, você verá que a classe ListaCliente se relaciona com diversas inst?ncias da classe Cliente. Isto representa que mais de um cliente pode ser retornado por uma busca. Esta lista de resultados é passada de volta para a janela de busca, e as informa??es relevantes de cada cliente s?o recuperadas para serem exibidas. Mais detalhes sobre cada método, e sobre como cada classe se relaciona com as demais podem ser encontrados no diagrama de classes. Localiza??o de clientesPara que um cliente seja utilizado na loca??o ele deve ser selecionado na janela de busca. Isto é representado no diagrama abaixo. Selecionando um clienteO diagrama abaixo mostra como o cliente retornado pela janela de bisca de clientes é colocado na loca??o. Repare que este diagrama n?o é iniciado por um ator, mas por um objeto. Isto é normal. Diagramas assim representam trocas de mensagens internas ao sistema, sem a interven??o de um elemento externo. Geralmente, diagramas assim implementam detalhes de um diagrama mais genérico que, geralmente, é iniciado por um ator. Neste caso em específico, este diagrama implementa um detalhe do diagrama Abertura da Janela de Localiza??o de Clientes, que é iniciado por um ator. Colocando o cliente na loca??oO diagrama abaixo mostra o processo de inserir fitas em uma loca??o. Este diagrama mostra como a mensagem 3 do diagrama Nova Loca??o é implementada. Repare que no diagrama Nova Loca??o, a mensagem 3 (AddFita) possui uma cláusula de intera??o, o que n?o acontece no diagrama abaixo. Isto é correto. Pense no objetivo de cada um destes diagramas. O diagrama Nova Loca??o visa informar a ordem em que o ator deve fazer as atividades de uma loca??o. Assim, neste caso, é importante informar que a atividade implementada pela mensagem AddFita deve ser executada repetidas vezes, uma para cada fita a ser locada. Já no diagrama abaixo, o objetivo é informar como a mensagem AddFita é implementada, independente de quantas vezes ela será chamada, ou eu que momento ela será utilizada. Assim, a cláusula de repeti??o que é vital no primeiro diagrama, é supérflua neste. Adicionando uma fita na loca??oEste também é o primeiro diagrama onde aparece a maior parte das classes que foram identificadas nos passos de análise. N?o esque?a de atualizar seu diagrama de classes adicionando associa??es entre as classes que forem trocando mensagens. Concluindo uma loca??o Cálculo do total da loca??oNeste ponto, todo o processo de loca??o já foi concluído, restando apenas gravar o que foi feito. O diagrama abaixo retrata este processo de persistência das informa??es. Persistindo a loca??oRepare que cada classe possui a responsabilidade de persistir suas próprias informa??es. Repare também que o controle transacional fica a cargo da classe Loca??o, que é responsável por tudo que diz respeito a uma loca??o.Abaixo, veja como ficou o diagrama de classes para esta solu??o.Repare que existe uma dependência entre a classe Atendimento e a classe Fita (a linha pontilhada no diagrama). Esta dependência surgiu do diagrama Adicionando uma Fita na Loca??o. Repare que neste diagrama a classe Atendimento recebe um ponteiro para um objeto da classe fita que representa a fita que acabou de ser inserida na loca??o, com o objetivo de recuperar as informa??es da fita para serem exibidas na janela. No entanto, a classe Atendimento n?o possui, entre seus atributos, um ponteiro para a classe Fita. Isto significa que este ponteiro é mantido em uma variável local ao método AddFita. Este fato é representado no diagrama de classes como a dependência mostrada neste diagrama.Abaixo, as descri??es dos elementos do diagrama de classes acima. Elementos que já apareceram em diagramas de classes de outros exercícios foram suprimidos.Classe AtendimentoJanela de manipula??o de loca??es. Esta janela faz novas loca??es, registra devolu??es e pagamentos.Stereotype:JanelaDetalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.BuscaClienteprivate BuscaCliente BuscaClientePonteiro para a janela de busca de clientes para a loca??o.Locacaoprivate Locacao LocacaoPonteiro para a classe de negócio que representa uma loca??o.Novaprivate boolean NovaIndica se uma nova loca??o está sendo criada na janela.Detalhes dos métodosAddFitapublic void AddFita()Controla a adi??o de uma fita na loca??o. Este método somente deve estar disponível para novas loca??es, identificadas pelo flag Nova.O código da fita deve ser fornecido na janela. Caso n?o tenha sido fornecido um código de fita, uma mensagem de erro deve ser fornecida ao usuário.O nome da fita e o pre?o da loca??o da fita devem ser exibidos na janela.Atendimentopublic Atendimento Atendimento(BD BD)O banco de dados passado como par?metro deve ser colocado no atributo de inst?ncia BD.Stereotype:constructorinput:BD: Banco de dados.output:Inst?ncia da classe.BuscaClientepublic void BuscaCliente()Este método só deve ser executado para novas loca??es. Uma nova loca??o é verificada pelo flag Nova. Ele é responsável por localizar o cliente que está fazendo a nova loca??o.Se um erro ocorrer durante a localiza??o do cliente, uma mensagem de erro deve ser exibida ao usuário.Destroypublic void Destroy()Destrói a janela.Stereotype:destructorFechaLocacaopublic void FechaLocacao()Este método só deve estar disponível para novas loca??es. Uma nova loca??o é identificada pelo atributo Nova.Este método deve ser disparado após a concord?ncia com do usuário com o valor da loca??o e com as fitas a serem locadas.Este método é responsável por persistir toda a loca??o.O flag Nova deve ser desmarcado em caso de sucesso. Em caso de falha, uma mensagem de erro deve ser mostrada ao usuário.NovaLocacaopublic void NovaLocacao()Inicia uma nova loca??o.Deve abrir um formulário vazio para a loca??o e colocar o flag Nova em TRUE.ShowModalpublic ModalResult ShowModal()Exibe a janela para o usuário e desvia o fluxo de processamento para ela.output:Retorna a forma como a janela foi fechada.Classe BuscaClienteJanela para localiza??o de clientes cadastrados.Stereotype:JanelaDetalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Listaprivate Lista ListaLista de objetos da classe cliente que foram encontrados como resultado de uma busca. Uma lista vazia significa que nenhum cliente foi encontrado.Associates:ClienteListaClienteprivate ListaCliente ListaClientePonteiro para a classe cliente que fará a busca.Detalhes dos métodosBuscapublic void Busca()Verifica se alguma chave de busca foi fornecida. Se n?o, exibe uma mensagem de erro ao usuário, solicitando o preenchimento de pelo menos uma chave de busca.Localiza todos os clientes cadastrados identificados pela chave de busca fornecida. Se algum erro ocorrer durante a busca, exibe uma mensagem de erro para o usuário.Os clientes encontrados devem ser listados para o usuário.BuscaClientepublic BuscaCliente BuscaCliente(HYPERLINK " UFU/2013-1/BSI - GSI025 - Modelagem de Software/ProjectReport.rtf" \l "R28"BD BD)O banco de dados passado como par?metro deve ser colocado no atributo de inst?ncia BD.Stereotype:constructorinput:BD: Banco de dados a ser utilizado.output:Inst?ncia da classe.Closepublic void Close()Fecha a janela.Destroypublic void Destroy()Destrói a janela. Deve destruir todos os clientes da lista de clientes encontrados, com exce??o do cliente selecionado.Stereotype:destructorGetClienteSelecionadopublic Cliente GetClienteSelecionado()Retorna o ponteiro para o cliente que foi selecionado na janela.Selecionapublic void Seleciona()Seleciona um dos clientes da lista de retorno como o cliente a ser utilizado pela janela chamadora.Este método deve fechar a janela e setar o par?metro de retorno informando que um cliente foi selecionado.ShowModalpublic ModalResult ShowModal()Exibe a janela para o usuário e desvia o fluxo de processamento para ela.output:Retorna a forma como a janela foi fechada.Classe ClienteDetalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Detalhes dos métodosClientepublic Cliente Cliente(BD BD)O banco de dados passado como par?metro deve ser colocado no atributo de inst?ncia BD.Stereotype:constructorinput:BD: Banco de dados a ser utilizado.output:Inst?ncia da classe.Destroypublic void Destroy()Destrói a inst?ncia.Stereotype:destructorGetCodigopublic int GetCodigo()Retorna o conteúdo do atributo Código.GetNomepublic String GetNome()Recupera o conteúdo do atributo Nome.SetCodigopublic void SetCodigo(int cod)Altera o conteúdo do atributo Codigo.input:cod: Novo código.SetCPFpublic void SetCPF(String CPF)Altera o conteúdo do atributo CPF.input:CPF: Novo CPF.SetEnderecopublic void SetEndereco(String endereco)Altera o conteúdo do atributo Endereco.input:endereco: Novo endere?o.SetNomepublic void SetNome(String nome)Altera o conteúdo do atributo Nome.input:nome: Novo nome.Classe FitaDetalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Locadaprivate boolean LocadaIndica se a fita está locada ou n?o.Detalhes dos métodosCarregaDadospublic boolean CarregaDados()Busca os dados da fita do banco de dados.output:TRUE se sucesso, FALSE se erro.Fitapublic Fita Fita(int cod, BD BD)O código da fita deve ser colocado no atributo Código, e o banco de dados no atributo BD.Stereotype:constructorinput:Cod: Código da fita.BD: Banco de dados a ser utilizado.output:Inst?ncia da casse.GetNomepublic String GetNome()Retorna o conteúdo do atributo Nome.GetPrecopublic float GetPreco()Retorna o conteúdo do atributo Preco.Persistepublic boolean Persiste()Controla a persistência das altera??es feitas nas informa??es da fita.output:TRUE se sucesso, FALSE se erro.SetLocadapublic void SetLocada(boolean Locada)Altera o conteúdo do atributo Locada.input:Locada: Novo valor do atributo Locada.Classe FitaLocadaDetalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Fitaprivate Fita FitaPonteiro para a fita que está sendo locada.Detalhes dos métodosAddFitapublic Fita AddFita()Adiciona uma nova fita na loca??o. A fita a ser adicionada é a cujo código foi passado no construtor. A fita deve ser marcada como locada. O pre?o da loca??o da fita deve ser recuperado e colocado no atributo Preco.output:Retorna o ponteiro da fita que está sendo locada. Se algum erro ocorrer, retorna NIL.FitaLocadapublic FitaLocada FitaLocada(int codFita, BD BD)Coloca o código da fita passado como par?metro em CodFita, e o banco de dados em BD.Stereotype:constructorinput:CodFita: Código da fita que está sendo inserida na loca??o.BD: Banco de dados a ser utilizado.output:Inst?ncia da classe.GetPrecopublic float GetPreco()Retorna o conteúdo do atributo Preco.PersisteLocacaopublic boolean PersisteLocacao()Controla a persistência das fitas locadas em uma nova loca??o.output:TRUE se sucesso, FALSE se erro.SetCodLocacaopublic void SetCodLocacao(int cod)Altera o conteúdo do atributo CodLocacao.input:Cod: Novo código da loca??o.Classe ListaClienteClasse de controle, responsável por controlar a busca de clientes cadastrados, criando uma inst?ncia para cada cliente localizado.Detalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Listaprivate Lista ListaLista de objetos da classe cliente que foram encontrados como resultado de uma busca. Uma lista vazia significa que nenhum cliente foi encontrado.Associates:ClienteMethod DetailBuscapublic boolean Busca(String nome, int cod)Localiza clientes no banco de dados que tenha parte do nome igual ao passado como par?metro, ou que tenha o código passado como par?metro.Todos os clientes encontrados devem ser instanciados e inseridos numa lista de resposta (atributo Lista).input:nome: Nome de cliente a ser buscado.Cod: Código de cliente a ser buscado.output:TRUE se a busca foi realizada com sucesso, FALSE se algum erro ocorreu.Destroypublic void Destroy()Destrói a janela.Stereotype:destructorGetListapublic Lista GetLista()Retorna o conteúdo do atributo Lista.ListaClientepublic ListaCliente ListaCliente(BD BD)O banco de dados passado como par?metro deve ser colocado no atributo de inst?ncia BD.Stereotype:constructorinput:BD: Banco de dados a ser utilizado.output:Inst?ncia da classe.Classe LocacaoDetalhes dos atributosBDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Clienteprivate Cliente ClientePonteiro para um objeto da classe cliente representando o cliente da loca??o.FitaLocadaprivate Lista FitaLocadaLista de ponteiros das fitas locadas na loca??o.Associates:FitaLocadaDetalhes dos métodosAddFitapublic Fita AddFita(int p0)Responsável por informar à loca??o que uma nova fita está sendo inserida.input:Cod: Código da fita que será inserida na loca??o.output:Retorna o ponteiro da fita que está sendo locada. Se algum erro ocorrer, retorna NIL.CalculaTotalpublic void CalculaTotal()Calcula o valor total da loca??o e armazena seu valor no atributo Total.Locacaopublic Locacao Locacao(BD BD)Stereotype:constructorPersisteLocacaopublic boolean PersisteLocacao()Responsável por gravar uma nova loca??o no banco de dados.output:TRUE se sucesso, FALSE se erro.SetClientepublic void SetCliente(HYPERLINK " UFU/2013-1/BSI - GSI025 - Modelagem de Software/ProjectReport.rtf" \l "R30"Cliente Cliente)Indica quem é o cliente da loca??o, colocado o ponteiro do objeto cliente no atributo Cliente. Deve colocar em CodCli o código do cliente.input:Cliente: Cliente dono da loca??o.Classe PrincipalDetalhes dos atributosAtendimentoprivate Atendimento AtendimentoPonteiro para a janela de manipula??o de loca??es.BDprivate BD BDPonteiro para o banco de dados que guarda a conex?o que será utilizada em toda a aplica??o. Este banco de dados deve ser passado como par?metro para as demais classes do sistema.Method DetailDestroypublic void Destroy()Destrói a janela.Stereotype:destructorLocacaopublic void Locacao()Abre a janela de loca??es, permitindo a cria??o de novas loca??es, o registro de pagamento e a devolu??o de loca??es.Quando a janela de loca??es for fechada, ela deve ser destruída.Principalpublic Principal Principal(BD BD)Recebe o banco de dados a ser utilizado e o coloca no atributo de inst?ncia BD.Stereotype:constructorinput:BD: Banco de dados a ser utilizado.output:Inst?ncia da classe.ShowModalpublic ModalResult ShowModal()Exibe a janela para o usuário e desvia o fluxo de processamento para ela.output:Retorna a forma como a janela foi fechada. ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download