1. Considere o melhor cenário para o caso de utilização Enviar Fax (o cenário em que tudo corre bem ). Considere um sistema composto pelos seguintes objectos: máquina que envia; máquina que recebe; uma central que encaminha faxes e chamadas telefónicas. Desenhe o diagrama de sequência respectivo. 2. Considere o exemplo do caso de uso Comprar Bebida do sistema da Máquina de Bebidas. Pretende-se especificar o cenário ideal (em que tudo corre bem, i.e., em que há bebida, há troco, etc.) deste caso de uso através de diagramas de interação. Para tal, é necessário identificarem-se os objetos que deverão de alguma forma interagir. Assim sendo, considere-se que a máquina é composta por quatro objetos principais: Cliente: o utilizador da máquina Interface: o painel de interface com o utilizador Registadora: a caixa registadora, que guarda o dinheiro Dispensa: a caixa/armário que guarda as diferentes bebidas Considere ainda que o cenário a representar é composto pela seguinte sequência de ações: O cliente insere o dinheiro na ranhura no painel de interface da máquina O cliente seleciona o tipo de bebida O dinheiro vai até a caixa registradora, esta atualiza a sua reserva de dinheiro A interface pede a bebida à dispensa A dispensa envia a bebida selecionada para o painel de interface. A interface devolve a bebida ao cliente a) Desenhe os respetivos diagramas de sequência e de colaboração associado a este caso de uso.. b) Redesenhe os diagramas de sequência e de colaboração anteriores, considernado outros cenários para o caso de uso Comprar Bebida relativo ao sistema Máquina de Bebidas introduzido anteriormente: O utilizador introduziu mais dinheiro que o valor da bebida, e a máquina tem dinheiro para troco O utilizador introduziu mais dinheiro que o valor da bebida, e a máquina não tem dinheiro para troco 3. Pretende-se representar as ações que serão levadas a cabo se numa dada aplicação se pretender remover um projeto. Devem ser levadas em conta os seguintes fatos: o utilizador usará uma interface gráfica para efetuar esta operação a informação relativa aos projetos econtra-se armazenada numa BD DI-UBI 1
Para desacoplar a interface a interface da BD usa-se uma classe intermédia chamada Controlador. Ignora-se toda a possível complexidade da interface através do uso de uma única classe Interface. 4. Um cliente cria uma encomenda. Após a sua criação pode adicionar um número arbitrário de itens à encomenda. Cada item tem um código, uma quantidade e um preço. Quando o cliente termina a encomenda, esta é enviada para processamento pelo departamento de vendas. A cada cliente está associado um nome, uma morada e um NIF. A cada encomenda está associado um número identificativo e uma data. A valor total da encomenda deve ser calculado antes da mesma ser processada. Desenhe os diagramas de caso de uso, de classes e de sequência para o caso descrito. 5. Redesenhe os diagramas anteriores de forma a contemplar as seguintes situações: O cliente tem de se identificar para poder criar a encomenda. Pode existir um erro na identificação. Deve ser dada uma mensagem apropriada no caso de ocorrência de um erro. 6. Redesenhe os diagramas anteriores de forma a que se encontre representada a ação de criação duma factura correspondente à encomenda. 7. Redesenhe os diagramas anteriores de forma a representar a ação de pagamento da encomenda via cartão de crédito (online). 8. Considere o seguinte extracto de código Java relativo à utilização de classes definidas no pacote java.sql.*, em particular das classes Connection e Statement. Connection con; Statement stmt;... Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:BD1"); stmt = con.createstatement();... stmt.executeupdate( INSERT ); stmt.executeupdate( UPDATE ); Para resolver este exemplo, considere-se o respetivo diagrama de classes: Com base no diagrama de classes, que ilustra as relações estruturais entre as diferentes classes desenhe os diagramas de interação (sequência e colaboração) correspondentes ao código ilustrado. DI-UBI 2
9. Desenhe o diagrama de estados de uma lâmpada, que evolui entre os estados acesa e apagada, conforme se liga e desliga um interruptor. 10. Desenhe o diagrama de estados de uma máquina de lavar roupa: depois da passagem de um determinado período de tempo, a máquina de lavar termina o seu programa de lavagem, e inicia o de secagem. 11. Desenhe o diagrama de estados uma instância da classe javax.servlet.http.servlet, que evolui ao longo de diferentes estados, tais como: em carregamento, inicializada, preparada para tratar pedido, destruída. 12. Desenhe o diagrama de actividades correspondente ao algoritmo do factorial de n (n! = 1 se n = 1; n*(n-1)! se n > 1). 13. Desenhe o diagrama de estados de uma tostadeira. Defina os diferentes estados do pão na tostadeira, sem esquecer de especificar os necessários eventos, acções, e condições com guarda. 14. Desenhe o diagrama de estados da classe javax.servlet.http.servlet. Considere que um servlet Java evolui ao longo de diferentes estados, tais como: carregamento, inicialização, tratar pedido, destruição. 15. Idem ao exercício anterior relativamente à classe java.applet.applet. 16. Desenhe os diagramas de atividades com pistas e com objetos do processo de negócio Preparar Proposta, típico de uma empresa de serviços. São representadas três entidades participantes: o cl iente, que solicita a proposta; o gestor comercial, que prepara o orçamento; e o gestor de produção, que pode eventualmente intervir no processo, caso o serviço solicitado exija aspectos específicos da produção. 17. Desenhe o diagrama de atividades que ilustre a emissão e recepção do sinal mudar(canal) entre os diagramas de actividades correspondentes ao controlo de uma televisão. 18. Considere a função Fibonacci no domínio dos números inteiros dada pela fórmula: fib(n) =1, se n 2; = fib(n-1)+ fib(n-2), se n> 2 Desenhe o diagrama de actividades (neste caso, tomando a forma de fluxograma) correspondente ao algoritmo de implementação da dita função. DI-UBI 3
19. Desenhe o diagrama de actividades correspondente ao seguinte processo de negócio: gestão de encontros com clientes : a) Um vendedor telefona ao cliente e marca uma reunião. b) Se a reunião é na empresa, os técnicos da empresa preparam a sala de conferências para a apresentação. c) Se a reunião é fora da empresa (no escritório do cliente) um consultor prepara a apresentação num computador portátil. d) O consultor e o vendedor reúnem-se com o cliente no local e hora combinada. e) O vendedor envia ao cliente uma carta a resumir o sucesso da reunião. f) Se a reunião resultou na identificação de um problema, o consultor escreve uma proposta e envia-a para o cliente. 20. Considere-se que o processo de levantar da cama implica a execução das seguintes actividades tomar pequeno-almoço, fazer a higiene matinal e cumprimentar a família. Considere-se que essas actividades têm de se realizar obrigatoriamente, embora não seja relevante a sua ordem de execução. O problema colocado representa uma situação típica na modelação de workflows: representar a execução independente e concorrente de um conjunto de actividades. Modifique o diagrama de actividades anterior (que representa a concorrência em diagramas de actividades) de modo a especificar o processo levantar da cama com as seguintes considerações. A seguir à actividade acordar um indivíduo realiza geralmente as seguintes actividades, sem uma ordem predefinida: tomar pequenoalmoço, fazer a higiene matinal e cumprimentar a família. Contudo, (1) apenas toma o pequeno-almoço se não tiver pressa; e (2) apenas cumprimenta a família se estiver bem disposto. DI-UBI 4
21. Considere o seguinte código Java constituído pelas classes SimpleThread e TwoThreadsTest. Desenhe o diagrama de classes que o suporta e o diagrama de colaboração correspondente a instâncias da classe TwoThreadsTest. public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getname()); try { sleep((long)(math.random() * 1000)); catch (InterruptedException e) { System.out.println("DONE! " + getname()); public class TwoThreadsTest { public static void main (String[] args) { SimpleThread jamaica, fiji; jamaica= new SimpleThread("Jamaica"); fiji= new SimpleThread("Fiji") jamaica.start(); fiji.start(); DI-UBI 5