CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by...

19
CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes, Design Patterns and the Kitchen Sink

Transcript of CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by...

Page 1: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

CSC 520 – Advanced Object Oriented Programming, Fall, 2010

Thursday, September 2, Week 4Design by Contract, Java Exceptions, Eventing, Finding the Classes, Design

Patterns and the Kitchen Sink

Page 2: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Design by Contract

• Preconditions – constraints on the caller• Postconditions – constraints on the called• Invariants – constraints on an object’s state• Preconditions may weaken for derived class methods

that override a base class or interface method. Why???

• Postconditions may strengthen for derived class methods that override a base class or interface method. Why???

Page 3: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Exception constructs already in use

• try {• attempt to run a block of code

• } catch (Type_A_Exception taex) {• Do something with taex, e.g., taex.getMessage()

• } catch (Type_A_Exception tbex) {• Do something with tbex, e.g., print, then throw tbex

• } finally {• Do this after all of the above, even after a return!

• }

Page 4: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Unchecked and checked exceptions

• javac forces client code to catch checked exceptions

• unchecked exceptions need not be caught; they can be– java.lang.Error

• java.io.IOError – maybe a disk drive goes off line

– java.lang.RuntimeException• java.lang.NullPointerException

• Other java.lang.Exceptions are checked

Page 5: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Throwing a new exception

• An explicit throw creates a new Exception.– public int deleteTiles(String tileset) throws

ScrabbleException• throw new ScrabbleException("Player " + name• + " does not have " + tile.toString()• + " to delete from set of tiles.");

Page 6: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Rethrowing an exception

• A rethrow catches and handles an Exception object, then throws it again.

• } catch (NumberFormatException nx) {• System.err.println(“Exception: “• + nx.getMessage();• nx.printStackTrace(); // to System.err• throw nx ; // This is the rethrow

Page 7: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

An implicit throw

• An implicit throw allows a called method to throw an Exception via the calling method.– public String [][] move(String command) throws

ScrabbleException• Invokes “int used =

players[nextPlayer].deleteTiles(validword);• But move() does not catch deleteTiles’s exception:

– public int deleteTiles(String tileset) throws ScrabbleException

• The remove() implicitly throws deleteTile’s exception.

Page 8: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

A Chained Exception

• A chained Exceptions tacks a detail message onto an underlying cause Exception.– } catch (NumberFormatException nx) {– throw new Exception(“detail message”, nx);

• Used to prepend a context-specific message to an Exception thrown from a called method.

• The new Exception must have the appropriate constructor. It may be a custom Exception.

Page 9: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Custom Exceptions

• A custom Exception inherits, directly or indirectly, from java.lang.Exception.– public class ScrabbleException extends Exception

• public ScrabbleException(String text)– super(text); // Call to base class constructor.

• Client code can explicitly catch a custom Exception.

Page 10: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

An event mechanism = publishers, subscribers & delivered events

• java.util.EventListener is a tagging interface that applications implement to create a listener whose class identity is unknown to the publisher

• java.awt.event.ActionListener for GUIs• java.beans.beancontext.BeanContext for Java Bean

tools that automated assembly of components via graphical tools

• games2010rev5.GameMoveEventListener

Page 11: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Publishers Publish Events

• Publisher classes support subscribe and unsubscribe methods via which their Event Listeners (see previous slide) can subscribe and unsubscribe for event delivery.

• Publishers later deliver events to subscribed listeners when the events occur.

• There is no standard interface or base class for publishers in the Java library.

• Any class that creates and delivers an event type is a publisher.

Page 12: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Event Objects Carry Data

• java.util.EventObject is the library base class• getSource() returns Object source of the event

– Subclasses use this base class to store the event publisher

• java.awt.event.ActionEvent for GUIs• java.beans.beancontext.BeanContextEvent• games2010rev5.GameMoveEvent

– getDescription(), getGameState(), getMoveNumber()

• Publisher passes data contents to the event constructor

– Event class provides getters for these data

• javax.sound.midi.MidiEvent does not implement it

Page 13: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

UML Sequence Diagram for Event Subscription Lifecycle

TwoDimensionalBoardGame GameMoveEventListener

subscribeToGameMoveEvent

notifyMoveEvent(event:GameMoveEvent) (0..* times)

unsubscribeToGameMoveEvent

Page 14: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Observer Design Pattern

• Gang of Four calls this the Observer Pattern• “Define a one-to-many dependency between

objects so that when one object changes state, all its dependents are notified and updated automatically.”

• http://www.oodesign.com/observer-pattern.html• The official design pattern does not show the event

object, which typically passes as a parameter to the event listener-defined method.

Page 15: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Meyer and Design Patterns22.3 General Heuristics for Finding Classes

• An analysis class describes a data abstraction directly drawn from the model of the external system.

• ScrabbleBoard

• An implementation class describes a data abstraction introduced for the internal needs of the algorithms in the software.

• private char [][] tiles = new char [RowHeadings.length][ColumnHeadings.length];

• A design class describes an architectural choice.• Design patterns.

Page 16: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

How to Find the Classes

• Tell stories. Underline the nouns.• Adjectives for deferred classes (comparable, serializable).• Watch out for natural language nouns!

• Avoid useless classes.• Avoid Blobs and Grand Central Stations.• Elicit, then reject classes. (Edit!)• Previous designs and class libraries.

• Meyer uses use cases only for validation, not analysis.• He does not like CRC cards We use class diagrams.

Page 17: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Some other Design Patterns for Tonight -- Factories

• Abstract Factory – our map_interface• The manufacturing interface is abstract.• The manufactured object interface is abstract.• A concrete class derived from the manufacturing

interface constructs concrete objects derived from the manufactured object interface.

• Factory Method• The manufacturing class has an abstract manufacturing

method.• Its subclasses manufacture concrete class objects.

Page 18: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Memento Pattern

• Without violating encapsulation, capture and externalize an object’s state so that the object can be restored to this state later.

• java.lang.Cloneable, java.io.Serializable• See Scrabble class data field definitions.• See ScrabbleGame save and restore methods.

Page 19: CSC 520 – Advanced Object Oriented Programming, Fall, 2010 Thursday, September 2, Week 4 Design by Contract, Java Exceptions, Eventing, Finding the Classes,

Iterator Pattern

• Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

• An iterator is an abstracted pointer.• See interface java.util.Iterator and ListIterator.• C++ Standard Template Library supports

forward and reverse iterators.