Dado o seguinte grafo que representa pessoas que seguem pessoas no Twitter.
Figura 1
A classe Pessoa
abaixo representa uma pessoa (um nó desse grafo) e uma aresta direcionada do nó A
para o nó B
significa que B
segue A
.
Cada vez que o método twita
é acionado em uma Pessoa X
, o tweet
passado como parâmetro deve ser entregue para todos os que seguem X
.
Implemente esse mecanismo de entrega de tweets
usando o pattern Observer
. Se necessário, modifique a classe Pessoa
e implemente novas classes e interfaces.
Escreva um código que teste alguns tweets.
In [1]:
public abstract class Pessoa {
private String nome;
public Pessoa(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public abstract void twita(String tweet);
}
In [ ]:
Considere a seguinte representação em XML:
<PESSOA></PESSOA>
- Há um elemento (tag) desse para cada pessoa, com um atributo nome
contendo o nome da pessoa como o exemplo:<PESSOA nome="A">
</PESSOA>
<PESSOA nome="B">
</PESSOA>
<SEGUIDOR/>
- Há um elemento desse cada vez que uma Pessoa X
segue uma Pessoa Y
. Nesse exemplo o elemento <SEGUIDOR>
fica subordinado à Pessoa X
e tem um atributo nome
indicando que a Pessoa Y
é seguidor da Pessoa X
. Veja a seguir o XML correspondente ao grafo da Figura 1:<PESSOA nome="A">
<SEGUIDOR nome="B"/>
<SEGUIDOR nome="C"/>
<SEGUIDOR nome="D"/>
</PESSOA>
<PESSOA nome="B">
<SEGUIDOR nome="E"/>
</PESSOA>
<PESSOA nome="C">
<SEGUIDOR nome="E"/>
</PESSOA>
<PESSOA nome="D">
<SEGUIDOR nome="F"/>
</PESSOA>
<PESSOA nome="E">
</PESSOA>
<PESSOA nome="F">
</PESSOA>
Usando Pipe&Filter
escreva um método que receba como parâmetro um objeto da classe Pessoa
ou herdeira e a serialize.
In [ ]:
In [ ]:
Modifique o processo de serialização de forma que ele se comporte de forma recursiva, ou seja, dado uma Pessoa
a ser serializada, ela também dispara o processo para a serialização de todos os seus assinantes, que por sua vez recursivamente também disparam a serialização de seus assinantes e assim sucessivamente.
Considere que o grafo é acíclico.
Veja como seria serializado um pedaço do grafo da Figura 1 se fosse disparada a serialização da Pessoa A
:
<PESSOA nome="A">
<SEGUIDOR nome="B"/>
<SEGUIDOR nome="C"/>
<SEGUIDOR nome="D"/>
</PESSOA>
<PESSOA nome="B">
<SEGUIDOR nome="E"/>
</PESSOA>
<PESSOA nome="C">
<SEGUIDOR nome="E"/>
</PESSOA>
<PESSOA nome="D">
<SEGUIDOR nome="F"/>
</PESSOA>
<PESSOA nome="E">
</PESSOA>
<PESSOA nome="F">
</PESSOA>
In [ ]:
No exercício anterior, o nome dos elementos (tags) e atributos dos tags foi preestabelecido. Considere que você gostaria de usar anotações para configurar o modo como as classes e propriedades são mapeados para XML. Para que seja possível, por exemplo, produzir alternativas como a seguir:
<PERSON name="A">
<FOLLOWER name="B"/>
<FOLLOWER name="C"/>
<FOLLOWER name="D"/>
</PERSON>
Escreva as interfaces de anotação propostas e elabore um exemplo ilustrativo.
In [ ]:
In [ ]: