Ybadoo - Soluções em Software Livre
Tutoriais
Programação Orientada a Objetos

Slides

Exemplo do padrão de projeto Chain of Responsibility por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Command por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Interpreter por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Iterator por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Mediator por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Memento por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Observer por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto State por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Strategy por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Template Method por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Visitor por fluffycat, tutorialspoint ou Wikipédia.

Exercício 10.01 Qual problema o padrão Chain of Responsibility resolve?

Exercício 10.02 Por que você usaria o padrão Chain of Responsibility?

Exercício 10.03 Qual problema o padrão Command resolve?

Exercício 10.04 Por que você usaria o padrão Command?

Exercício 10.05 Qual problema o padrão Interpreter resolve?

Exercício 10.06 Por que você usaria o padrão Interpreter?

Exercício 10.07 Qual problema o padrão Iterator resolve (Sintes, 2002)?

Exercício 10.08 Por que você usaria o padrão Iterator (Sintes, 2002)?

Exercício 10.09 Qual problema o padrão Mediator resolve?

Exercício 10.10 Por que você usaria o padrão Mediator?

Exercício 10.11 Qual problema o padrão Memento resolve?

Exercício 10.12 Por que você usaria o padrão Memento?

Exercício 10.13 Qual problema o padrão Observer resolve?

Exercício 10.14 Por que você usaria o padrão Observer?

Exercício 10.15 Qual problema o padrão State resolve?

Exercício 10.16 Por que você usaria o padrão State?

Exercício 10.17 Qual problema o padrão Strategy resolve?

Exercício 10.18 Por que você usaria o padrão Strategy?

Exercício 10.19 Qual problema o padrão Template Method resolve?

Exercício 10.20 Por que você usaria o padrão Template Method?

Exercício 10.21 Qual problema o padrão Visitor resolve?

Exercício 10.22 Por que você usaria o padrão Visitor?

Exercício 10.23 Desenvolva um programa que receba um texto qualquer de entrada. O texto deve ser lido caractere por caractere e estatísticas devem ser impressas sobre o mesmo.

Exercício 10.24 Desenvolva um programa que simule o funcionamento de uma porta automática, utilizando o padrão State para representar o status da porta automática.

Exercício 10.25 Desenvolva um programa que exiba uma mensagem diferente para cada dia da semana, usando o padrão Strategy.

Exercício 10.26 Desenvolva um programa que realize a interpretação dos programas da máquina 2_REG.

Exercício 10.27 Desenvolva um programa que simule uma máquina de vendas automática, utilizando o padrão de projeto Chain of Responsibility como base. A máquina possui diversos slots, cada um capaz de receber um tipo de moeda diferente: R$ 0,01, R$ 0,05, R$ 0,10, R$ 0,25, R$ 0,50 e R$ 1,00. A máquina deve receber moedas e delegar aos slots que capturem-nas. Quando chegar ao valor do produto desejado, a máquina deve entregar o produto e informar o troco, caso houver.

Exercício 10.28 Desenvolva um programa que notifique o usuário quando um e-mail chegar a sua caixa de entrada. O usuário pode ser notificado por diversos meios, como por exemplo, pelo celular, por um aplicativo desktop, e assim por diante. Utilize o padrão de projeto Observer para que todos os meios utilizados pelo usuário sejam notificados quando um e-mail chegar a sua caixa de entrada.

Exercício 10.29 Desenvolva um programa que calcule a média aritmética simples, a média geométrica e a média harmônica de uma sequência de valores inteiros ou reais, utilizando como base o padrão de projeto Visitor.

Exercício 10.30 Durante o desenvolvimento de um sistema para comparação das propriedades métricas de sólidos platônicos, os desenvolvedores implementaram uma classe para cada sólido platônico existente. Mas quando os desenvolvedores foram implementar a classe responsável pela comparação das propriedades métricas de sólidos platônicos, identificaram um problema, pois teriam que implementar uma função para cada uma das combinações possíveis. Refatore o sistema apresentado, empregando os padrões de projeto do catálogo GoF, de forma que a classe Comparador possa realizar facilmente a comparação das propriedades métricas de sólidos platônicos.

Exercício 10.31 Desenvolva um programa que interprete expressões aritméticas, escritas na notação pós-fixada, como por exemplo, a expressão 4 3 2 - 1 + * que equivale a expressão (3 - 2 + 1) * 4, na notação infixada. Utilize o padrão de projeto Interpreter para auxiliar no desenvolvimento do interpretador. Defina uma interface (AbstractExpression) com o método interpret(), que seja comum a todos os nós da árvore sintática abstrata. Defina uma classe para interpretar as constantes numericas da expressão aritmética (TerminalExpression), e uma classe (NonTerminalExpression) para cada uma das quatro operações aritméticas básicas (adição, subtração, multiplicação e divisão). Defina uma classe para realizar o parser (Client) da expressão, com o seguinte comportamento:

Leia um token da expressão
Se o token é um número
Então
Adicione o token a pilha
Senão
Retire dois tokens da pilha
Aplique o operador sobre os dois tokens da pilha
Adicione na pilha o resultado

Exercício 10.32 Desenvolva um programa que realize a iteração sobre os elementos de uma matriz, utilizando o padrão de projeto Iterator.

Exercício 10.33 Desenvolva um programa que simule o funcionamento de um semáforo, utilizando o padrão State para representar o status do semáforo. O semáforo deverá permanecer t segundos no estado amarelo e 5 * t segundos nos demais estados. Utilize uma Thread para alterar o estado do semáforo de forma automática.

Exercício 10.34 Desenvolva um programa que coloque o comentário principal no início do arquivo especificado pelo usuário, conforme a linguagem de programação contida no arquivo. Utilize o padrão de projeto Template Method na implementação do programa.

Exercício 10.35 Desenvolva um programa que armazene todas as alterações realizadas numa determinada classe, possibilitando ao usuário a recuperação dos estados anteriores caso necessário. Utilize o padrão de projeto Memento na implementação do programa.

Exercício 10.36 Uma mailing list mantém o controle de quem está inscrito na lista de discussão e fornece um único ponto de acesso através do qual qualquer pessoa inscrita nessa lista possa se comunicar com todos os participantes da mesma. Desenvolva um simulador de mailing list utilizando o padrão de projeto Mediator, de modo que os usuários possam se cadastrar ou se retirar da lista, além de poderem enviar mensagens para todos os usuários cadastrados na mesma.

Exercício 10.37 Desenvolva um programa que exporte os valores armazenados numa matriz de inteiros nos formatos CSV, XML ou JSON, utilizando como base o padrão de projeto Visitor.