Exercitando UML

download Exercitando UML

of 129

Transcript of Exercitando UML

Ana Cristina Melo

51 exerccios resolvidos inclui questes de concursos pblicos _j apresenta comentrios modelos compatveis com as verses 1.4 e 2.0 da UML

JMU

Apresentao

Minha experincia lecionando disciplinas de modelagem de desenvolvimento de sistemas, com foco em UML, aliada necessidade de ter um material de apoio tcnico mais completo, me levaram a escrever Desenvolvendo Aplicaes com UML1 - do conceituai implementao. Entretanto, passei a perceber outras necessidades em sala de aula, nessa e em outras disciplinas: um material de apoio prtico, que pudesse ser usado para fixao da matria. Notei que essa no era uma necessidade s da docncia, mas tambm do aluno que entende a teoria, mas no consegue sair do ponto zero, no consegue comear. E por que isso? Porque, sem prtica no possvel aprender. Sem exerccios no h como termos certeza do aprendizado. E olhando para minha experincia, h dezoito anos como Analista e Programadora, percebi que tambm temos a necessidade do exemplo. Principalmente quando aprendemos sozinhos. Nesse caso, aprendemos por meio de tentativas e erros, exemplos e exerccios. Assim, espero que esse material atenda a todos: professores, alunos e profissionais da rea. O livro est dividido em captulos, que tratam dos seguintes temas: Captulo 1 - Encontrando classes, atributos e relacionamentos. Capitulo 2 - Desenhando diagrama de classes a partir de minicenrios.' e Desenvolvendo Aplicaes com UML 2.0 (2a edio).

X Exercitando Modelagem em UML

Captulo 3 - Exercitando a identificao de casos de uso. Captulo 4 - Exercitando a Identificao de classes a partir de casos de uso. Capitulo 5 - Alguns exercidos sobre diagrama de mquina de estados. Apndice A - Questes de concursos pblicos sobre orientao a objetos e UML. Alguns exerccios possuem complementos na forma de outros exerccios, oferecendo variaes ou Incrementos ao problema Inicial. Vocs vo reparar que a maioria dos cenrios descrita como sendo pessoas comuns que precisam de uma ferramenta para resolver seus problemas. Meu objetivo com esse tipo de abordagem foi o de aproximar o problema do conhecimento pblico do meu leitor. Assim, tenho certeza que vocs ro se familiarizar com os problemas de cada um de nossos personagens. Quaisquer duvidas, comentrios, sugestes e/ou criticas podem ser enviadas para meu e-mail [email protected]. Obrigada e boa leitura!

"A diferena no est no tamanho do seu sonho, mas no tamanho da sua vontade em querer realiz-lo! E sempre que voc conseguir realizar um sonho, comece tudo de novo. NSo podemos viver sem ter objetivos!" Ana Cristina S, L Melo

Sumrio

1. Encontrando Classes, Atributos e Relacionamentos 1. Exerccio: Conta de Luz2. Exerccio: Classe TextoSaida 3. Exerccio: Classe BonecoEm Movimento 4. Exerccio: Horrio de Remdios 5. Exerccio: Gastos Dirios 6. Exerccio: Comanda Eletrnica 7. Exerccio: Lista de Compras 8. Exerccio: Lista de Compras (Variao A) 9. Exerccio: Lista de Compras (Variao B) 10. Exerccio: Lista de Compras (Variao C) 11. Exerccio: Lista de Compras (Variao D) 12. Exerccio: Coleo de CD's 13. Exerccio: Coleo de CD's (Variao A) 14. Exerccio: Sala de Reunio 15. Exerccio: Sala de Reunio (Variao A) 16. Exerccio: Herana

1 34 5 6 8 9 10 12 13 15 15 16 17 18 21 22

-

2. Desenhando Diagrama de Classes a partir de Minicenrios17. Minicenrio: Controle de Tarefas 18. Minicenrio: Ligaes telefnicas via modem 19. Minicenrio: Testes de Fixao 20. Minicenrio: Testes de Fixao (Variao A) 21. Minicenrio: Festas Infantis 22. Minicenrio: Festas Infantis (Variao A) 23. Minicenrio: Cursos de Aperfeioamento 24. Minicenrio: Cursos de Aperfeioamento (Variao A) 25. Minicenrio: Classificados na Web 26. Minicenrio: Jogo da Forca

2425 28 30 33 33 35 36 37 39 42

XII Exercitando Modelagem em UML

27. Minicenrio: Ferramenta de UML 28. Minicenrio: Clube da Leitura 29. Minicenrio: Condomnio 30. Minicenrio: Pediatra 31. Minicenrio: Pediatra (Variao A) 32. Minicenrio: Pediatra (Variao B) 33. Minicenrio: Aposta Lotrica

,

,

44 46 48 51 54 56 58 60 61 67 74 79 86 86 92 97 .....100 103

3. Exercitando a Identificao de Casos de Uso 34. Cenrio: Encomenda de placas 35. Cenrio: Rdio Txi Mar & Sol 36. Cenrio: Treinador de vlei 37. Cenrio: Controle de Obra 38. Cenrio: Controle de Obra (Variao A) 39. Cenrio: Senha de Atendimento 40. Cenrio: Controle de Bolo 41. Cenrio: Estacionamento 42. Cenrio: Jogo da Velha 43. Cenrio: Jogo da Memria

4. Exercitando a Identificao de Classes a partir de Casos de Uso.. 107 44. Cenrio: Encomenda de placas 107 45. Cenrio: Rdio Txi Mar & Sol 108 46. Cenrio: Treinador de Vlei 110 47. Cenrio: Controle de Bolo 111 48. Cenrio: Jogo da Velha 113 5. Alguns Exerccios sobre Diagrama de Mquina de Estados 49. Cenrio: Controle de Tarefas 50. Cenrio: Encomenda de Placas 51. Cenrio: Rdio Txi Mar & Sol Apndice. Questes de Concursos Pblicos sobre Orientao a Objetos e UML 114 114 115 115 117

Captulo

Encontrando Classes, Atributos e Relacionamentos

1

Um dos principais diagramas da UML o Diagrama de Classes. Observando meus alunos, no vejo dificuldade no aprendizado do que um relacionamento de associao, herana ou agregao. Vejo dificuldade em se abstrair o conceito desses relacionamentos do mundo real, ou melhor, de um problema real. Provavelmente seja fcil entender que nome atributo de pessoa, e que funcionrio uma herana de pessoa. Mas ser que o nvel de facilidade permanece o mesmo quando estamos diante de um problema real e este precisa ser abstrado para atributos, classes, relacionamentos e outros elementos? Posso apostar que no! E como possvel que essa abstrao se torne uma tarefa natural? Respondo: exercitando e/ou aprendendo por meio de anlise de exerccios prontos.

Produto cermico, geralmente em forma de paraleleppedo, para

construes.

2 * Exercitando Modelagem em UML Vamos comear a exercitar essa abstraco mais primria, que est diretamente ligada ao conceito de orientao a objetos, mas que sem ela no existe modelo em UML. Vamos perceber, na evoluo dos exerccios, o quanto uma modelagem pode mudar, de acordo com o contexto em que estamos trabalhando. Nosso objetivo nesse captulo trabalhar a abstraco, por isso s desenharemos a classe na notao da UML quando for necessrio explicar os relacionamentos. Os primeiros exerccios procuram extrair de um descritivo (que eu chamo de cenrio) a classe existente, seus atributos e/ou mtodos. Os exerccios seguintes comeam a explorar a existncia de mais de uma classe. Nesses exerccios, teremos variaes dos mesmos problemas, a fim de exercitar a evoluo da modelagem. Para entendimento geral desse capitulo, leia com ateno as convenes que adotei para resoluo dos exerccios. CONVENES DO CAPTULO: - Na maioria dos exerccios no so desenhadas classes no padro da UML. As classes so apenas relacionadas numa tabela; - Os atributos e mtodos seguem a nomenclatura da UML, ou seja, iniciam com letra minscula, tendo a primeira letra de cada palavra (a partir da segunda) em maiscula; - Todos os atributos possuem seus tipos identificados. Quando o atributo for um objeto, o tipo citado como Classe XYZ, onde XYZ o nome da classe. Quando o atributo for uma coleo (uma lista), o tipo citado como Coteo de XYZ, onde XYZ o nome da classe correspondente a cada item da lista; - Todos os mtodos possuem, se existir, sua lista de parmetros (acompanhados do tipo) e o tipo de retorno; - Os mtodos descritos foram deduzidos a partir do cenrio. Entretanto, a lista completa dos mtodos s possvel obter a partir de um diagrama de sequncias, que tem por objetivo identificar a troca de mensagens existente entre objetos, em cada caso de uso. Por este motivo, relaciono apenas os mtodos mais relevantes;

Encontrando Classes, Atributos e Relacionamentos 3 - Os relacionamentos so descritos na seo de "Comentrios sobre a Resoluo", em vez de serem representados numa classe; - Na fase de anlise, cabe desenharmos uma classe representando seus relacionamentos. Na fase de projeto, cabe transformarmos esses relacionamentos em atributos, de forma a representar como eles sero implementados. Para melhor entendimento dos exercidos, especificamos esses atributos que correspondem aos relacionamentos implementados. Esses atributos so identificados como atributos derivados, pois seus valores no so informados e sim gerados a partir de um relacionamento. Exemplo: Um funcionrio possui os atributos nome e cargo. Porm cargo uma classe que possui os atributos descrio e salrio. O atributo cargo dentro de funcionrio fruto do relacionamento das duas classes; - Todo atributo cujo tipo seja uma classe enumeration, no definido como um atributo derivado, visto a classe enumeration atuar como um tipo de dado e no como um relacionamento; - Atributos e mtodos de classe so representados sublinhados, conforme notao da UML; - Em alguns exerccios, para elucidar o cenrio, so exibidas cpias de planilhas ou relatrios existentes no Mundo Real de nossos clientes. Ateno! Alguns requisitos, s vezes, esto implcitos nesses exemplos.

1. EXERCCIO: CONTA DE LuzCENRIO: As informaes a seguir se referem planilha Excel de Gabriel, que controla os gastos mensais com sua conta de luz. Para cada conta de luz cadastra-se: data em que a leitura do relgio de luz foi realizada, nmero da leitura, quantidade de Kw gasto no ms, valor a pagar pela conta, data do pagamento e mdia de consumo. Mensalmente, so realizadas as seguintes pesquisas: - verificao do ms de menor consumo; - verificao do ms de maior consumo.

4 Exercitando Modelagem em UML

IMAGEM DA PLANILHA:LISTA DE ACOMPANHAMENTO DE GASTO DE LUZ

data leitura n" leitura04/07/2005 02/08/2005 Menor Consumo Maior Consumo4166 4201

kw gasto460 350

^206,43 157,07 ago/05 Jul/05

data pagto Jjgj^15/07/2005 15/08/2005 15,33 12,06

350 460

EXERCCIO:Identifique as classes, atributos e mtodos desse cenrio.

RESOLUO: ClasseAtributos dataLeitura : date nmeroLeitura: integer qtdKwGasto : integer valorPagar: real daiaPagamento : date mediaConsumo: real Mtodos cadastrarConta verificaMesMenorConsumo : string verificaMesMaiorConsumo: string

ContaLuz

COMENTRIOS SOBRE A RESOLUO: a) O retorno do mtodo string pois traz o ms e o ano (ex: 082005).

2. EXERCCIO: CLASSE TEXTOSAIDACENRIO: Para fixao do conceito de classes em sala de aula, Prof3 Cristina criou com seus alunos a classe TextoSaida. O objetivo do exerccio criar uma classe que permita configurar um texto por meio de atributos (tamanho da letra, cor da fonte e cor do fundo), escolhendo em que tipo de componente ele deve ser exibido (entre as opes: labet, edit e memo).

Encontrando Classes, Atributos e Relacionamentos 5

Para no haver vnculo com linguagens de programao, essa classe no foi criada como herana de uma classe visual. As cores podem ser escolhidas entre os tons: preto, branco, azul, amarelo ou cinza.EXERCCIO: Identifique as classes, atributos e mtodos desse cenrio.

RESOLUO:ClasseAtributos

Mtodos

TextoSaida

enumeration EnumTpoComponente

enumeration EnumCor

texto : string tipoComponente : EnumTipoComponente tamanhoLetra : integer corFonte: EnumCor corFundo : EnumCor label edit memo preto branco azul amarelo cinza

cadastrar exibirTexto

COMENTRIOS SOBRE A RESOLUO: a) A classe enumeration EnumTipoComponente foi criada para suportar o domnio do atributo tipoComponente, que consiste de valores fixos, definidos como sendo os componentes onde o texto pode ser exibido. O mesmo aconteceu com a ciasse EnumCor.

3. EXERCCIO: CLASSE BONECOEMMOVIMENTOCENRIO: Professora Cristina decidiu criar uma classe que permita mover um boneco na tela, Esse boneco deve ter nome, posio da coordenada X, posio da coordenada Y e direo atual (cima, baixo, direita, esquerda).

6 Exercitando Modelagem em UML

EXERCCIO:Identifique as classes, atributos e mtodos desse cenrio.

RESOLUO:Classe Boneco Atributosnome : string coordenadaX : integer coordenadaY : integer direcaoAtual : EnumDirecao cima baixo direita esquerda Mtodos cadastrar mover (novaCoordenadaX: integer, novaCoordenadaY: integer)

enumerai ion EnumDirecao

COMENTRIOS SOBRE A RESOLUO: a) Para que o boneco se mova, cabe ao ator informar a nova coordenada. Isso feito por meio de parmetros do mtodo Mover. Aps mover o boneco, os atributos coordenadaX e coordenadaY so atualizados com os valores dos parmetros novaCoordenadaX e novaCoordenadaY, respectivamente. Para alterar a direo, basta antes de chamar o mtodo mover, mudar o valor do atributo direcaoAtual.

4.

EXERCCIO: HORRIO DE REMDIOS

CENRIO: As informaes a seguir se referem a uma aplicao de controle pessoal de horrio de remdios, existente no Palm de Maurcio. Para cada remdio cadastra-se: o nome de quem vai tomar o remdio, a data de incio, a quantidade de dias que foi prescrita pelo mdico, a quantidade de vezes ao dia, a dosagem e o nome do remdio. Ao cadastrar o remdio, a aplicao sugere todos os horrios possveis para tomar o remdio. O usurio escolhe o melhor horrio e a aplicao avisa at quando o remdio deve ser tomado e prepara uma planilha de horrios. O usurio, no infcio do dia, seleciona a opo de planilha de horrios de remdios do dia.

Encontrando Classes, Atributos e Relacionamentos * 7 No caso de Maurcio atrasar o horrio de tomar o remdio num determinado dia, a planilha reorganiza os horrios daquele dia. EXERCCIO: Identifique as classes, atributos e mtodos desse cenrio. Represente os relacionamentos como atributos derivados. RESOLUO: Classe Atributos usurio : strng datalnicio : date qtdDias : integer qtdVezesDia : integer dosagem : real remdio : string /planrlnaHorario : Coleo de HorarioRemedio data : date horrio : time Mtodos

PrescricaoRemedio

sugerirHorarios exibirPlanilhaHorarios (dataReferencia : date )

HorarloRemedio

cadastrarHorario

COMENTRIOS SOBRE A RESOLUO: a) Numa primeira modelagem. os atributos remdio e usurio (do Remdio) foram definidos como string. Esses atributos so fortes candidatos a se tomarem classes de negcio. O que determina essa mudana o contexto da aplicao. Nesse caso, estamos tratando de uma aplicao bem pequena, cujo objetivo principal o controle de horrios. Sendo assim, podemos nessa verso no transformar esses atributos em classes. b) Toda prescrio tem associada a ela uma planilha de horrios. Isso cria um relacionamento da classe PrescricaoRemedio com a classe HorarioRemedio, representada pelo atributo planilhaHorario. que corresponde a uma coeo de objetos da Classe HorarioRemedio. c) O mtodo sugerirHoraro responsvel por montar um conjunto possvel de horrios, a partir do atributo qtdVezesDia. Por exemplo, se um remdio tiver que ser tomado de 8 em 8 horas, a aplicao pode sugerir os seguintes horrios: [6h, 14h. 22h], [7h, 15h, 23h], [8h, 16h, 24h]. Uma vez escolhido o conjunto de horrios, o mtodo HoraroRemedio.cadastrarHorario chamado quantas vezes forem necessrias para cadastrar todos os horrios em todos os dias.

8 Exercitando Modelagem em UML

d) A classe HorarioRemedio foi criada incluindo o atributo data, para permitir o cadastramento de horrios diferentes para cada dia. Se no fosse por essa abordagem, poderamos ter criado um atributo horrio: time na classe PrescricaoRemedio, com multiplicidade de [1..*], prevendo de uma a vrias doses (horrios) por dia.

5. EXERCCIO: GASTOS DIRIOSCENRIO: As informaes a seguir se referem Planilha Excel de Vera, que faz o controle de seus gastos dirios. Para cada gasto, Vera cadastra: o tipo do gasto (remdio, roupa, refeio etc.), a data do gasto, o valor gaslo e a forma de pagamento (dinheiro, cheque, carto ou cheque pr). No final do ms, Vera lista o total dos gastos mensais, agrupados por tipo de gasto e exibindo o quanto foi gasto em cada tipo de forma de pagamento.EXERCCIO: Identifique as classes, atributos e mtodos desse cenrio. Represente os relacionamentos comoatrlbulos derivados^

RESOLUO:Classe TipoGasto Atributos descricaoTipo : string /tipo : Classe TipoGasto data : date valor : real formaPagamento : EnumFormaPagamento dinheiro cheque carto chequePre Mtodos cadastrar cadastrar gerarRelatoroMensal{mesAno: string)

Gasto

enumerationi EnumFormaPagamento

COMENTRIOS SOBRE A RESOLUO:a) A classe enumeration foi criada para suportar o domnio do atributo FormaPagamento, que consistia de valores fixos e com caractersticas de

Encontrando Classes, Atributos e Relacionamentos 9

rara mutao. Numa aplicao de contexto maior, essa classe poderia deixar de ser enumeration para se transformar numa classe de negcios. b) Todo gasto refere-se a somente um tipo. Isso cria um relacionamento da classe Gasto com a classe TipoGasto, representada pelo atributo tipo. c) Toda a complexidade do relatrio mensal est encapsulada no mtodo gerarRelatorioMensal.

6.

EXERCCIO: COMANDA ELETRNICA

CENRIO: As informaes a seguir se referem a uma aplicao de controle de comanda eletrnica da padaria Doce Sabor do Seu Joaquim. O cliente usa uma comanda eletrnica durante suas compras na Padaria. A cada produto consumido, o atendente registra em sua comanda (que possui uma numerao) o produto e a quantidade. Ao passar no caixa na sada da Padaria, a Caixa l os gastos da comanda, finalizando a compra. Na leitura da comanda, verifica-se o valor unitrio de cada produto a fim de calcular o valor total da compra. EXERCCIO:Identifique as classes, atributos e mtodos desse cenrio. Represente os relacionamentos como atributos derivados.

RESOLUO:Classe Produto Atributos cdigo : string descrio : string precoUnitario : real numero : integer /valorTotal : real /itens : Coleo de ItemComanda /produto : Produto quantidade : integer Mtodos cadastrar registrarltem( item : ItemComanda ) fecharComanda cadastrar

Comanda

ItemComanda

10 Exercitando Modelagem em UML

COMENTRIOS SOBRE A RESOLUO: a) O atributo va/orTbfa/da classe Comanda derivado, porque o resultado do clculo do mtodo fecharComanda. Esse mtodo obtm todos os itens da Comanda e para cada um verifica o preo Unitrio do produto, calculando o sub-total, de acordo com a seguinte frmula:ItemComanda.quantidade * ItemComanda.produto.precoOnitario

O total da Comanda (atributo valorTotal) o somatrio dos subtotais. b) Toda comanda possui uma lista de itens. Isso cria um relacionamento da classe Comanda com a classe ItemComanda, representada pelo atributo /tens. Por sua vez, um item de comanda se refere a somente um produto. Esta representao feita no atributo produto.

7. EXERCCIO: LISTA DE COMPRASCENRIO: Carolina controla em Excel uma planilha com a sua lista de compras mensal. Ela cadastra o nome do produto, a unidade de compra, a quantidade prevista para um ms, a quantidade que efetivamente ser comprada e o preo estimado (atualizado todo ms). IMAGEM DA PLANILHA:Produto Arroz Feijo Acar Carne Unidade de compra Qtd Ms

QtdCompra8 6 3 6

Kg Kg Kg Kg

76 2

7,5

Preo Estimado 1,80 2,10 1,05 8,00

Total Estimado

150,00

ESCLARECIMENTOS SOBRE o PROBLEMA: a) A quantidade de compra pode variar em virtude de sobra de um ms para o outro, ou da necessidade de um gasto maior no ms. Por exemplo: almoo em famlia. b) As compras so feitas pela prpria Carolina. Por esse motivo, ela no v necessidade de relacionar as marcas dos produtos.

Encontrando Classes, Atributas e Relacionamentos > 11 c) Mensalmente, Carolina analisa o quanto pagou por cada produto, e se achar necessrio, atualiza o preo estimado de cada produto. EXERCCIO: Identifique as classes, atributos e mtodos desse cenrio. Represente os relacionamentos como atributos derivados. RESOLUO: Classe ListaCompra ItemCompra Atributos ms : integer /itens : Coleo de ItemCompra /total Estimado : real /produto : Classe Produto qtdEfetivaCompra : real nome : string unidadeCompra : string qtdPrevistoMes : real precoEstimado : real Mtodos cadastrar obterTotalEstimado{ms : integer) cadastrar cadastrar

Produto

COMENTRIOS SOBRE A RESOLUO: a) O mtodo obterTotalEstimado um mtodo que atua sobra a coleo de objetos ItemCompra, ou seja, s podemos saber qual o total estimado de toda a Lista de Compras (conjunto dos itens de compra), se quantificarmos o subtotal de cada item. Sendo assim, podemos concluir que o atributo totalEstimado que pertence Lista de Compras derivado, pois o resultado desse mtodo. O algoritmo do mtodo obterTotalEstimado(ms: integer) :define obj ItemConpra : ItemConpra obter a colecSo de objItemCoinpra, onde ListaCompra.ms = parmetro ms total - O para cada objItemCompra subtotal