lecture 9: java’s observable & observer

30
LECTURE 9: JAVA’S OBSERVABLE & OBSERVER CSC 313 – Advanced Programming Topics

Upload: marcus

Post on 23-Feb-2016

57 views

Category:

Documents


0 download

DESCRIPTION

CSC 313 – Advanced Programming Topics. Lecture 9: Java’s Observable & Observer. Observer Pattern Intent. Efficiently perform 1 -to- many communication Easy to respond dynamically when event(s) occurs Can create many, many possible actions to occur - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Lecture 9: Java’s Observable & Observer

LECTURE 9:JAVA’S OBSERVABLE & OBSERVER

CSC 313 – Advanced Programming Topics

Page 2: Lecture 9: Java’s Observable & Observer

Observer Pattern Intent

Efficiently perform 1-to-many communication Easy to respond dynamically when

event(s) occurs Can create many, many possible actions to

occur Update which actions used throughout

execution Can also use to break mutual

dependency UML class diagram cycles split and

managed Dirty & ugly hack that also is incredibly

useful

Page 3: Lecture 9: Java’s Observable & Observer

Registering an Observer

Subject adds & removes Observers as needed Adding is simple Events also simple, call Observers’ update

method Removing not as simple, but still not very

hard Requires some means of holding

Observers Array ArrayList or LinkedList HashMap

Page 4: Lecture 9: Java’s Observable & Observer

Registering an Observer

Subject adds & removes Observers as needed Adding is simple Events also simple, call Observers’ update

method Removing not as simple, but still not very

hard Requires some means of holding

Observers Array*

ArrayList or LinkedList HashMap

* Anyone who still did not object to this, fails BIG!

Page 5: Lecture 9: Java’s Observable & Observer

Getting the Word Out

Calling Observers’ update methods is simple But for call Observer needs associated information Not always clear what is best way to share this data Must understand strengths & weaknesses of each

Push model is easiest of two approaches Observers get data directly from Subject Method’s parameters have values to be used

Another approach using pattern’s pull model Subject provides strategy to Observers via a

param To get data, Observer uses strategies methods

Page 6: Lecture 9: Java’s Observable & Observer

Observer Pattern in Java

Java ♥ Observer Pattern & uses everywhere Find pattern in JButton & ActionListeners

Tracking mouse in Swing using Observer Pattern

Much of the multi-threaded API uses this Event-based code needs Observers

to work Not limited to Java; true for most OO

languages

Page 7: Lecture 9: Java’s Observable & Observer

java.util.Observable

Among original classes included in Java Works with java.util.Observer interface

Observable manages Observers in codevoid addObserver(Observer o)void deleteObserver(Observer o)void deleteObservers() int countObservers()

Page 8: Lecture 9: Java’s Observable & Observer

Handling Updates

Observable approach supports push…void notifyObserver(Object arg)

… & pull model available as wellvoid notifyObserver()boolean hasChanged()void clearChanged()void setChanged()

Notifications sent to Observer’s only method void update(Observable o, Object arg)

Page 9: Lecture 9: Java’s Observable & Observer

Using Observable Problem

public class CSCClass {private Observable obs;

// Lots of unimportant code here

public void cancelClass() { obs.notifyObservers(“Go drinking!”);}

}

Page 10: Lecture 9: Java’s Observable & Observer

Using Observable Problem

public class CSCClass {private Observable obs;

// Lots of unimportant code here

public void cancelClass() { obs.notifyObservers(“Go drinking”);}

}

Page 11: Lecture 9: Java’s Observable & Observer

Using Observable Problem

public class CSCClass {private Observable obs;

// Lots of unimportant code here

public void cancelClass() { obs.notifyObservers(“Go drinking”);}

}

Page 12: Lecture 9: Java’s Observable & Observer

Bad & Worse Design Decisions No update was sent

Page 13: Lecture 9: Java’s Observable & Observer

Bad & Worse Design Decisions No update was sent; sobriety ruled

the day

Page 14: Lecture 9: Java’s Observable & Observer

Bad & Worse Design Decisions No update was sent; sobriety ruled

the day

Page 15: Lecture 9: Java’s Observable & Observer

Bad & Worse Design Decisions No update was sent; sobriety ruled the

day

notifyObservers misnamed horribly Should be notifyObserversIfChanged Must call setChanged before notifying

Use of notifyObservers inconsistent, too Calls clearChanged automatically once

updates sent

Page 16: Lecture 9: Java’s Observable & Observer

Updated Code

public class CSCClass {private Observable obs;

// Lots of unimportant code here

public void cancelClass() { obs.setChanged(); obs.notifyObservers(“Go drinking”);}

}

Page 17: Lecture 9: Java’s Observable & Observer

Next Attempt

public class CSCClass {private Observable obs;

// Lots of unimportant code here

public void cancelClass() { obs.setChanged(); obs.notifyObservers(“Go drinking”);}

}

Page 18: Lecture 9: Java’s Observable & Observer

Next Attempt

public class CSCClass {private Observable obs;

// Lots of unimportant code here

public void cancelClass() { obs.setChanged(); obs.notifyObservers(“Go drinking”);}

}

Page 19: Lecture 9: Java’s Observable & Observer

Next Attempt

public class CSCClass {private Observable obs;

// Lots of unimportant code here

public void cancelClass() { obs.setChanged(); obs.notifyObservers(“Go drinking”);}

}

Page 20: Lecture 9: Java’s Observable & Observer

Next Attempt

public class CSCClass {private Observable obs;

// Lots of unimportant code here

public void cancelClass() { obs.setChanged(); obs.notifyObservers(“Go ski”);}

}

setChanged has protected access

Page 21: Lecture 9: Java’s Observable & Observer

%&#*@ Awful Design

Page 22: Lecture 9: Java’s Observable & Observer

%&#*@ Awful Design

setChanged & clearChanged protected accessjava.util package is sealed; cannot write class for itCan only be called & used from within subclass

Must write subclass of Observable to use it

As this is Java, that class cannot extend others

Updates received in method of Observer:

void update(Observable o, Object arg)This really means that can only push 1 objectKills point of push model since cannot push much

Page 23: Lecture 9: Java’s Observable & Observer

%&#*@ Awful Design

setChanged & clearChanged protected accessjava.util package is sealed; cannot write class for itCan only be called & used from within subclass

Must write subclass of Observable to use it

As this is Java, that class cannot extend others

Updates received in method of Observer:

void update(Observable o, Object arg)This really means that can only push 1 objectKills point of push model since cannot push much

Useless

Page 24: Lecture 9: Java’s Observable & Observer

Final Attempt

public class CSCClass extends Observable {public void cancelClass() { setChanged(); notifyObservers(“Go drinking”);}

}public class Student implements Observer {

public void update(Observable o, Object arg) { String s = (String)arg; if (!s.equals(“Get here NOW!!!”)) // Go drinking else // Go to class}

}

Page 25: Lecture 9: Java’s Observable & Observer

Final Attempt

public class CSCClass extends Observable {public void cancelClass() { setChanged(); notifyObservers(“Go drinking”);}

}public class Student implements Observer {

public void update(Observable o, Object arg) { String s = (String)arg; if (!s.equals(“Get here NOW!!!”)) // Go drinking else // Go to class with a drink}

}

Page 26: Lecture 9: Java’s Observable & Observer

Final Attempt

Page 27: Lecture 9: Java’s Observable & Observer

Final Attempt

Page 28: Lecture 9: Java’s Observable & Observer

Observable Pros & Cons

Cons:

Pros:

Page 29: Lecture 9: Java’s Observable & Observer

Observable Pros & Cons

Cons: Need a subclass of Observable to use Must call setChange before notifyObservers

Can push only 1 object to Observers Pros:

Already has code to add & remove Observers

Easy to rewrite and improve upon this design

Page 30: Lecture 9: Java’s Observable & Observer

For Next Lecture

Two (short) readings available on web Will start looking into how code is

optimized How does Java run & make programs

faster? What can we do to make our code

faster? Using final can be huge. Why would it

matter?

Lab #2 due at week’s end & still on Angel Make sure that you also check the

grading rubric Use Assignment Submitter when turning

it in