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

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