Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1...

12
Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17- EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17 The Java Event Model revised March 2002

Transcript of Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1...

Page 1: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

1

94.204* Object-Oriented Software Development

Part 17

The Java Event Model

• revised March 2002

Page 2: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

2

The Java Event Model

• Java 1.1 has introduced a full-blown Java Event Model, which addresses the same type of needs as Observer/Observable while solving some of the latter’s limitations

• An event source can now encapsulate all relevant info in an event object that it sends to its event listeners.

– all listeners implement a common interface defined for the particular event

– the event source maintains a list of listeners

– when a change occurs, the event source instantiates an event object and sends it by iterating over the list of listeners and invoking one of the methods defined in the listener interface

• The Java Event Model is heavily used in GUI design and also in the JavaBeans component model.

Page 3: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

3

The Java Event Model

• Let’s rearrange the Prof-Student example so that it implements the Event Model:– define a CourseEvent class that extends EventObject

– define a CourseListener interface– have the Student class implement CourseListener– have the Prof class (the event source) manage a vector

of courseListeners

• The naming conventions are important!

Page 4: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

4

The Java Event Model

Page 5: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

5

Java Event Model: sequence diagrams

1- Subscription

Page 6: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

6

Java Event Model: sequence diagrams

2- Notification

Page 7: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

7

The Java Event Model

Implementation:

• take a look at the full signature of the CourseListener interface methods:void midtermAnnounced(CourseEvent e);

void midtermPostponed(CourseEvent e);

void assignmentPosted(CourseEvent e);

– they all contain a CourseEvent, which can contain useful information

– many objects can potentially send a CourseEvent. How can we determine the source of an event?

Page 8: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

8

The Java Event Model

• EventObject, the superclass of CourseEvent, provides a getSource() method.

• The source can be set when instantiating the event, by passing the event source as an argument:

public void setMidterm(Date date) {

midterm = date;

//the prof creates the event

CourseEvent e = new CourseEvent(this);

//now send it…

}

Page 9: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

9

The Java Event Model

• The event source (the prof) has to manage its list of listeners (usually a Vector) by providing a addCourseListener and a removeCourseListener method:

public synchronized void addCourseListener (CourseListener cl){

courseListeners.addElement(cl);

}

public synchronized void removeCourseListener (CourseListener cl) {

courseListeners.removeElement(cl);

}

Page 10: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

10

The Java Event Model

• To send an event, the event source has to iterate through its list of listeners, and call the appropriate method:

public void setMidterm(Date date) {

midterm = date;

//the prof creates the event and sends it

CourseEvent e = new CourseEvent(this);

Iterator iter=courseListeners.iterator();

while (iter.hasNext()) {

((CourseListener)iter.next()).

midtermAnnounced(e);

}

}

Page 11: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

11

The Java Event Model

• handling the event:public void assignmentPosted(CourseEvent e) {

//examine the event source

String name = ((Prof)e.getSource()).getName());

// ooh it’s Prof E. !!!

System.out.println("please push it back!");

}

• CourseEvent could also potentially have other interesting instance variables (the assignment content, deadline, …) that could be examined here.

Page 12: Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt 1 94.204* Object-Oriented Software Development Part 17.

Copyright © 2002, Systems and Computer Engineering, Carleton University. 94.204-17-EventModel.ppt

12

The Java Event Model

Forces / Consequences:

• all the relevant info is gathered into an event object.

• the listener interface allows us to be more specific about the particular nature of the event, by providing different methods for different cases.

• adding a new method to handle a new case means that all the concrete listeners have to implement one new method.

• the Event source has to manage its list of listeners, which is a hassle.