Tópicos

  • Decorator (padrão de desenho)
  • Adapter (padrão de desenho)

Exercício 1: Textos Formatados

Um texto é constituído por palavras. Quando o texto é apresentado, através do método render, cada palavra pode aparecer sem qualquer modificação de aspecto (utiliza-se o método render correspondente). É ainda possível modificar dinamicamente o aspecto das palavras, permitindo que sejam apresentadas em negrito, itálico, sublinhado, ou em combinações variadas (e.g. negrito e itálico ou itálico sublinhado , etc.). No entanto, a apresentação é sempre realizada da mesma forma (sempre através do método render).

Além de apresentável graficamente, um texto pode ser convertido numa cadeia de caracteres, contendo a sua informação textual ( String). Esta operação é realizada através do método text (invocado sobre cada um dos elementos designados acima).

Implemente as classes que permitem representar o texto completo, as palavras, respectivas modificações gráficas. Implemente ainda uma aplicação que ilustre o comportamento. Represente as características gráficas da seguinte forma:

normal <span>normal</span>
negrito <b>negrito</b>
itálico <i>itálico</i>
sublinhado <u>sublinhado</u>

[ resolução: procurar resolver antes de consultar ]

Exercício 2: Cat Stream

Um canal de saída binário ( DataOutputStream ) permite escrever valores correspondentes a atributos de instâncias da classe Cat (gatos): respectivamente e em grupos de 3, a idade ( writeInt ), o peso ( writeFloat ) e o nome ( writeUTF ). Interessa, contudo, que as aplicações que trabalham com gatos não tenham contacto directo com o canal binário, sendo apenas colocadas em contacto com o "canal de gatos" ( CatOutputChannel ). O canal de gatos deve aceitar como parâmetro do construtor o canal binário e deve providenciar um método put (com um argumento Cat ). As excepções de entradas e saídas produzidas pelo canal binário devem ser propagadas. O canal deve ainda fornecer uma função close que fecha todos os canais (o de gatos e o binário). Implemente o canal de gatos e uma aplicação que demonstre a utilização.

A classe Cat é como se indica de seguida:

public class Cat {
    private int _age = 0;
    private float _weight = 0;
    private String _name = "";

    public Cat(int age, float weight, String name) { _age = age; _weight = weight; _name = name; }

    public int getAge() { return _age; }
    public void setAge(int age) { _age = age; }

    public float getWeight() { return _weight; }
    public void setWeight(float weight) { _weight = weight; }

    public String getName() { return _name; }
    public void setName(String name) { _name = name; }

    public String toString() { return "Cat [_age=" + _age + ", _weight=" + _weight + ", _name=" + _name + "]"; }
}

[ resolução: procurar resolver antes de consultar ]