JavaPadroes_3-Padroe.. - PUC-Rio

Propaganda
Módulo III
Padrões GOF: Observer
Professores
Eduardo Bezerra – [email protected]
Ismael H F Santos – [email protected]
April 05
Prof. Ismael H. F. Santos - [email protected]
1
Ementa
 Padrões GOF

Julho 06
Observer
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
2
Bibliografia



Julho 06
Eric Gamma, et ali, Padrões de Projeto, Ed
Bookman
Martin Fowler, Analysis Patterns - Reusable Object
Models, Addison-Wesley,1997
Martin Fowler, Refatoração - Aperfeiçoando o
projeto de código existente, Ed Bookman
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
3
Livros
 Core Java 2, Cay S. Horstmann, Gary Cornell
Volume 1 (Fundamentos)
 Volume 2 (Características Avançadas)
 Java: Como Programar, Deitel & Deitel
 Thinking in Patterns with JAVA, Bruce Eckel
 Gratuito. http://www.mindview.net/Books/TIJ/

Julho 06
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
4
POO-Java
Julho 06
Observer
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
5
Observer
 Existem situações onde diversos objetos mudam seu
estado de acordo com a mudança de estado de outro
objeto.

e.g. as views e o model no framework MVC
 Define uma relação de dependência 1:N entre objetos,
de tal forma que, quando um objeto (assunto) tem seu
estado modificado, os seus objetos dependentes
(observadores) são notificados.


Assunto  subject
Observadores (objetos dependentes)  observers
Julho 06
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
6
Observer (motivação)
 Exemplo clássico
Julho 06
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
7
Observer (estrutura)
Julho 06
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
8
Observer (exemplo de interação)
aFile
anInfoView
Attach()
aListView
Attach()
setState(“foo”)
notify()
update()
update()
getState()
“foo”
Julho 06
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
9
Observer em Java
public class Observable extends Object {
Collection<Observer> observers;
public void addObserver(Observer o);
public void deleteObserver(Observer o);
public boolean hasChanged();
public void notifyObservers();
public void notifyObservers(Object arg);
…
}
public abstract interface Observer {
public abstract void update(Observable o, Object arg);
}
public class Subject extends Observable{
public void setState(String filename);
public string getState();
}
Julho 06
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
10
Observer (aplicabilidade)
 Quando uma abstração tem dois aspectos, um
dependente do outro. Encapsulando-se esses aspectos
em objetos separados fará com que se possa variá-los e
reusá-los independentemente;
 Quando uma mudança em um objeto requer uma
mudança em outros, e não se sabe como esses outros
objetos efetivamente fazem suas mudanças;
 Quando um objeto deve poder notificar outros objetos
sem assumir nada sobre eles. Dessa forma evita-se que
os objetos envolvidos fiquem fortemente acoplados.
Julho 06
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
11
Observer (conseqüências)
 Possibilita baixo acoplamento entre os objetos
dependentes (os observadores) e o assunto.
 Acoplamento Abstrato
 Suporte para broadcast
 Dificuldade em saber o que foi mudado?
Julho 06
Prof(s). Eduardo Bezerra & Ismael H. F. Santos
12
Download