CSE 335: Software Design K. Stirewalt
Synthetic OO Design Concepts & Reuse Lecture 8: Modeling & documenting collaborations
Topics:– Synthesis of multiple collaborations– Documenting collaborations with abstract roles– A “model” of reuse in role-based designs
CSE 335: Software Design K. Stirewalt
New conceptsCollaboration: Contextual relationship among
instances that interact to implement a desired functionality– pattern of message exchange among those instances to
achieve some goal– protocol
Role: that subset of an object’s characteristics needed to fulfill its responsibilities in a collaboration– alternatively, a “slot” that can be filled by objects that wish
to participate in the collaboration– such objects are said to “play” the role
Observe: Both definitions refer to instances
Goals:1. Design reusable collaborations2. Compose applications by synthesizing collaborations
CSE 335: Software Design K. Stirewalt
Example
Suppose we want to design a graphical browser that allows users to view and print documents
Two collaborations here:1. A viewPort that displays lines of text, which it
receives by collaborating with a docMgr; and2. A printButton that sends messages to docMgr
to cause it to print.
Observe:– docMgr object is involved in both collaborations– It plays a different role in each
CSE 335: Software Design K. Stirewalt
Graphical depiction of example app
#ifndef VIEWPORT_H#define VIEWPORT_H
#include <FL/Fl_Multiline#include “ViewPortModel.h
class ViewPort : public public: ViewPort( int x, int y, unsigned numberOfLines
Note: The unseen document manager is serving lines from file “ViewPort.h”
CSE 335: Software Design K. Stirewalt
Motivation: Explaining a designModern OO systems comprise lots of
collaborations
To understand such systems, requires visualizing: – the inter-connection of these objects (i.e.,
structure)– the dynamic interactions among these objects (i.e.,
behavior)
Problem: How can we visualize these phenomena in a useful way?
CSE 335: Software Design K. Stirewalt
Sequence diagrams
Illustrate one instance of one collaboration among multiple objects
Feature:– Use of spatial position to reflect time dimension– Use of vertical bars to denote object “activity”– Graphic denotation of returns from operations
Note: Because it depicts only one instance, a single sequence diagram rarely sufficient to fully document a collaboration
CSE 335: Software Design K. Stirewalt
Example sequence diagram
userEvent()buttonPressed(“Print”)
print : Button docMgr : MyDocManager
sd clickPrint
printDocument()
CSE 335: Software Design K. Stirewalt
Example sequence diagram (continued)
userEvent()buttonPressed(“Print”)
print : Button docMgr : MyDocManager
sd clickPrint
printDocument()
activations
CSE 335: Software Design K. Stirewalt
Example sequence diagram (continued)
userEvent()buttonPressed(“Print”)
print : Button docMgr : MyDocManager
sd clickPrint
printDocument()
messages
CSE 335: Software Design K. Stirewalt
Example sequence diagram (continued)
userEvent()buttonPressed(“Print”)
print : Button docMgr : MyDocManager
sd clickPrint
printDocument()
return messages
CSE 335: Software Design K. Stirewalt
New concept: Role
Defn: A “slot” that can be filled by many different object (or link) instances
Example: The ButtonListener “object” in a design that uses buttons– Not really any such thing as a ButtonListener
“object”– But lots of objects can be “plugged into” that slot.
Design tip: Identification of roles enables the design of reusable collaborations
CSE 335: Software Design K. Stirewalt
Reusable interaction, defined using a role
userEvent()buttonPressed(…)
: Button listener : ButtonListener
sd clickButton
CSE 335: Software Design K. Stirewalt
Instance of an abstract class?
userEvent()buttonPressed(…)
: Button listener : ButtonListener
sd clickButton
Notice: OK to depict what appears to be an “instance” of an abstract class in this situation
CSE 335: Software Design K. Stirewalt
Collaboration diagram
listener : ButtonListener [0..*]button : Buttonlisteners
Button–ButtonListener
Example of a collaboration diagram.
CSE 335: Software Design K. Stirewalt
Collaboration diagram
listener : ButtonListener [0..*]button : Buttonlisteners
Button–ButtonListener
Example of a collaboration diagram.
role role
role name type multiplicityrole name type
connector
CSE 335: Software Design K. Stirewalt
Collaboration + seq diagramsA reusable collaboration is specified using:
– One collaboration diagram that names all of the roles and connectors and specifies any relevant multiplicities
– Multiple sequence diagrams, each depicting a “key” behavior among the objects that and links that play roles in the collaboration
Such documentation much more useful than “header” comments in the code
CSE 335: Software Design K. Stirewalt
Recall the running example...
#ifndef VIEWPORT_H#define VIEWPORT_H
#include <FL/Fl_Multiline#include “ViewPortModel.h
class ViewPort : public public: ViewPort( int x, int y, unsigned numberOfLines
Note: The unseen document manager is serving lines from file “ViewPort.h”
CSE 335: Software Design K. Stirewalt
Exercise
Draw a sequence diagram that depicts the interaction between a viewport object (vp) and a DocumentManager object (docMgr) when vp is resized
CSE 335: Software Design K. Stirewalt
Example: Class DocManagerclass DocManager {
public:
…
void printDocument() const;
unsigned docSize() const;
const string& docLine( unsigned ) const;
void insertLine( unsigned, const string& );
void appendLine( const string& );
void deleteLine( unsigned );
};
CSE 335: Software Design K. Stirewalt
Example: Sequence diagram
docMgr : MyDocManagervp : ViewPortresize()
retrieve( 0, .... ) docSize()
docLine(0,...)
update()
retrieve( 1, .... )
docLine(1,...)
retrieve( n-1, .... )
docLine(n-1,...)
docSize()
docSize()
sd resizeView
CSE 335: Software Design K. Stirewalt
Question
Consider the interaction between the document manager and a viewport that displays its contents. Are there any opportunities for role abstraction in this interaction?
CSE 335: Software Design K. Stirewalt
When vp collaborates with a docMgr...
docMgr : MyDocManagervp : ViewPortresize()
retrieve( 0, .... ) docSize()
docLine(0,...)
update()
retrieve( 1, .... )
docLine(1,...)
retrieve( n-1, .... )
docLine(n-1,...)
docSize()
docSize()
sd resizeView
CSE 335: Software Design K. Stirewalt
More general (reusable) interaction using the abstract role “model”
update()
retrieve(n) *
: ViewPort model : ViewPortModel
sd refreshView
CSE 335: Software Design K. Stirewalt
Collaboration diagram
vpm : ViewPortModelvp : ViewPortmodel
ViewPort–ViewPortModel
Example of a collaboration diagram.
CSE 335: Software Design K. Stirewalt
Reusable class ViewPortclass ViewPort : public Fl_Multiline_Output {
public:
ViewPort( int x, int y, int w, int h );
unsigned capacity() const;
void setModel( ViewPortModel* );
protected:
ViewPortModel* model;
void resize(int, int, int, int);
void update();
}; Question: Why is this method protected, rather than public?
CSE 335: Software Design K. Stirewalt
ViewportModel interface
class ViewPortModel {
public:
virtual bool retrieve( unsigned lineNumber,
string& line ) const =0;
};
CSE 335: Software Design K. Stirewalt
Example: ViewPort::Update methodvoid ViewPort::update(){ if (!model) return;
string contents, str;
const string endofline("\n");
for (int i=0; i < upperBound; i++) { if( model->retrieve(i, str) ) {
contents += str; contents += endofline; } }
value(contents.c_str());}
CSE 335: Software Design K. Stirewalt
Example: Synthesis of multiple rolesclass MyDocManager : public DocManager,
public ButtonListener, public ViewPortModel {
public: void buttonPressed( const string& s ) { if(s == “print”) DocManager::printDocument(); }
bool retrieve( unsigned lineNo, string& line ) const
{ bool retVal = (lineNo < DocManager::docSize()); if (retVal) line = DocManager::docLine(lineNo); return retVal; }};
CSE 335: Software Design K. Stirewalt
Configuration codeint main(void) { ContainerWindow myContainer(500,150); MyDocManager docMgr(...); Button printButton(200, 80, “Print"); ViewPort viewPort(0,0, 350, 120);
printButton.addListener(&docMgr); viewPort.setModel(&docMgr);
myContainer.end(); myContainer.show();
return Fl::run();}
CSE 335: Software Design K. Stirewalt
Terminology
Collaboration: Contextual relationship among instances that interact to implement a desired functionality
Collaboration diagram: A diagram describing the structural relationship among the roles in a collaboration
Collaboration role: A “slot” for an object or link within a collaboration. It specifies the kind of object or link that may appear in an instance of the collaboration.
CSE 335: Software Design K. Stirewalt
ScrollBar collaboration
userEvent()announceNewValue(n)
: ScrollBar listener : ValuatorListener
sd moveHandle