Disciplina: POO – Padrões de Projeto Lista de
Transcrição
Disciplina: POO – Padrões de Projeto Lista de
Disciplina: POO – Padrões de Projeto Lista de Exercícios I: Revisão dos conceitos de OO Data de entrega: 31/10 Observações O código de cada questão, caso a questão contenha implementação, deve ser salvo dentro da pasta com o nome QuestaoX, onde X é o número da questão. o Deve ser entregue apenas o código fonte de cada questão (*.java). o Certifique-se que seus programas compilam corretamente, se a solução de alguma questão não puder ser compilada ela será considerada incorreta. Utilizem as convenções de java (ex.: camelCase, etc.) para nomes de atributos, métodos e classes. Se não souber pesquise na Internet. Se seu programa estiver igual ao do seu colega vocês terão notas iguais, iguais a 0. Todas as pastas contendo os códigos das questões devem ser empacotadas em um arquivo zip ou rar e enviadas até às 24h da data de entrega para [email protected]. o Não serão aceitos trabalhos fora do prazo. o Cheque se seu arquivo compactado está corrompido. Se vier corrompido a nota será 0. Parte I - Strategy Conceitos Como você define o padrão Strategy? Quando ele deve ser usado? O Strategy se encaixa em qual categoria de padrão? Explique o motivo de ele estar nesta categoria. Como nós implementamos o padrão? Descreva a terminologia e estrutura (uml). Questão 1 – Algoritmos de Ordenação Algoritmos de ordenação tem como objetivo colocar os elementos de uma dada sequência em uma certa ordem. Sabemos que existem quatro formas bastante difundidas de ordenação: bubble sort, insertion sort, merge sort e quick sort. Coloque-as no padrão Strategy e escreva um cliente que alterna de estratégia de ordenação livremente. Se estiver curioso, cronometre a execução de cada método para verificar qual é o mais eficiente (deve ser usada uma quantidade grande de números no vetor para perceber a diferença). Questão 2 – Jogo Última Online Prof.: - Algum de vocês já jogou UO (Ultima Online)? Eu já perdi algum tempo da minha vida nesse vício ;-). Prof.: - Vamos implementar uma mini versão de UO? O padrão Strategy cai como uma luva para esse caso. Alunos: - Simbora! Prof.: - Seguinte é esse, em UO existem alguns tipos de lutador: o guerreiro puro (pure war), o mago puro (pure mage), e os meios termos tank mage (mais mago do que guerreiro) e o warlock (mais guerreiro do que mago). Prof.: - Pra tornar as coisas mais simples vamos nos concentrar apenas nos guerreiros. Cada guerreiro terá um nome, uma vida (life) e uma arma. Um guerreiro pode usar diferentes tipos de arma e cada uma tem um dano diferente: machado dano -40 katana dano -25 alabarda dano -30 Prof.: - Um guerreiro também pode usar diferentes tipos de armadura e cada uma tem um fator de resistência diferente: armadura de resistência +2 couro armadura de resistência +5 loriga armadura de titânio resistência +15 Prof.: - Quando um guerreiro estiver com armadura, o dano será: dano da arma – resistência da armadura. 1. Implemente o jogo acima, e para testá-lo, crie um main onde alguns guerreiros lutem até que um tenha seu life zerado. 2. Para implementar um programa com o padrão Strategy nós sempre usamos composição. Descreva com suas palavras por que usamos a composição ao invés de herança - quais as vantagens? Parte II –Observer Conceitos Como você define o padrão Observer? Quando ele deve ser usado? O Observer se encaixa em qual categoria de padrão? Explique o motivo de ele estar nesta categoria. Como nós implementamos o padrão? Descreva a terminologia e estrutura (uml). Questão 3 – Aeroporto Castro Pinto Implemente o sistema de exibição de vôos que é utilizado nos tótens do aeroporto de João Pessoa. Uma das classes do sistema, fornecida pelo aeroporto Castro Pinto, é a classe FlightDataCollection e FlightData. FlightData tem os seguintes atributos: nº do vôo, empresa, horário, e um atributo que indique se o vôo está partindo ou chegando no aeroporto. FlightDataCollection é a nossa base de dados e tem um conjunto de FlightData. Todos os tótens devem ser atualizados em tempo real na medida em que FlightDataCollection seja alterado: i) quando algum vôo tiver suas informações atualizadas; ii) quando um novo vôo for adicionado à base de dados; ou iii) quando um vôo for removido da base de dados. A solução deve ser expansível, isto é, outros desenvolvedores podem implementar novas configurações de display para outros tótens. Inicialmente o aeroporto precisa de dois tótens: 1. o primeiro tóten deve ficar na sala de embarque, e deve conter os horários de vôos que irão decolar, assim os passageiros se mantém atualizados de possíveis atrasos; 2. o segundo tóten deve ficar na sala de espera do desembarque, e deve conter os horários de vôos que irão aterrissar, assim as pessoas que forem buscar alguém no aeroporto também possa saber de possíveis atrasos. *Se quiser deixar o programa mais interessante, implemente uma GUI que exiba os painéis. (não é obrigatório). 3. Agora implemente um terceiro tipo de tóten que contém horários de embarque e desembarque. Foi fácil implementar este último tóten? Explique os benefícios que o padrão Observer proporcionou para esta extensão (foi preciso modificar algum trecho de código?). Parte III – Decorator Conceitos Como você define o padrão Decorator? Quando ele deve ser usado? O Decorator se encaixa em qual categoria de padrão? Explique o motivo de ele estar nesta categoria. Como nós implementamos o padrão? Descreva a terminologia e estrutura (uml). Questão 4 – Jogo Cooking Fever Prof.: - Quem aqui nunca se viciou em um “addicting game”? Pois é, o Cooking Fever é um desses que você passa horas jogando... Prof.: - A ideia do Cooking Fever é bastante semelhante ao caso do Starbuzz que vimos em sala. Basicamente, tem-se um objeto base e vai adicionando elementos no mesmo da maneira que o cliente desejar. Prof.: - No Starbuzz, o objeto base era o café, e ele poderia ser complementado com leite, chocolate, creme, etc. No jogo Cooking Fever todas as fases têm essa mesma ideia, mas para esse exercício vamos implementar a fase do bolo. Prof.: - Um bolo pode ter vários sabores. A princípio, na nossa “padaria”, vamos vender os seguintes sabores: limão (R$5), laranja (R$5), baunilha (R$3) e chocolate (R$6). Prof.: - Além do sabor o cliente pode ou não adicionar uma cobertura. Nossas opções são as seguintes: morango (R$1), chocolate (R$1) e doce de leite (R$1.50). Prof.: - Se ele desejar, ele pode adicionar uma ou mais frutas. As opções são as seguintes: morango (R$1.50), amora (R$2) ou pêssego (R$1). 1. Implemente o sistema da padaria especificado acima. Para testá-lo, crie um main três tipos de bolo diferente a seu critério e imprima a combinação e preço do bolo. 2. Explique o motivo do seu programa seguir o princípio ABERTO-FECHADO. Quais seriam os efeitos colaterais de se adicionar novos sabores de bolo e novas coberturas e/ou frutas?
Documentos relacionados
Disciplina: POO – Padrões de Projeto Lista de
O código de cada questão, caso a questão contenha implementação, deve ser salvo dentro da pasta com o nome QuestaoX, onde X é o número da questão. o Deve ser entregue apenas o código fonte de cad...
Leia mais