Presentation is loading. Please wait.

Presentation is loading. Please wait.

K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 8: Modeling & documenting collaborations Topics: –Synthesis of multiple.

Similar presentations


Presentation on theme: "K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 8: Modeling & documenting collaborations Topics: –Synthesis of multiple."— Presentation transcript:

1 K. Stirewalt CSE 335: Software Design 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

2 K. Stirewalt CSE 335: Software Design New concepts Collaboration: 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 collaborations 2.Compose applications by synthesizing collaborations

3 K. Stirewalt CSE 335: Software Design 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 ; and 2.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

4 K. Stirewalt CSE 335: Software Design 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 Print Note: The unseen document manager is serving lines from file “ViewPort.h”

5 K. Stirewalt CSE 335: Software Design Motivation: Explaining a design Modern 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?

6 K. Stirewalt CSE 335: Software Design 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

7 K. Stirewalt CSE 335: Software Design Example sequence diagram userEvent() buttonPressed(“Print”) print : ButtondocMgr : MyDocManager sd clickPrint printDocument()

8 K. Stirewalt CSE 335: Software Design Example sequence diagram (continued) userEvent() buttonPressed(“Print”) print : ButtondocMgr : MyDocManager sd clickPrint printDocument() activations

9 K. Stirewalt CSE 335: Software Design Example sequence diagram (continued) userEvent() buttonPressed(“Print”) print : ButtondocMgr : MyDocManager sd clickPrint printDocument() messages

10 K. Stirewalt CSE 335: Software Design Example sequence diagram (continued) userEvent() buttonPressed(“Print”) print : ButtondocMgr : MyDocManager sd clickPrint printDocument() return messages

11 K. Stirewalt CSE 335: Software Design 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

12 K. Stirewalt CSE 335: Software Design Reusable interaction, defined using a role userEvent() buttonPressed(…) : Buttonlistener : ButtonListener sd clickButton

13 K. Stirewalt CSE 335: Software Design Instance of an abstract class? userEvent() buttonPressed(…) : Buttonlistener : ButtonListener sd clickButton Notice: OK to depict what appears to be an “instance” of an abstract class in this situation

14 K. Stirewalt CSE 335: Software Design Collaboration diagram listener : ButtonListener [0..*]button : Button listeners Button–ButtonListener Example of a collaboration diagram.

15 K. Stirewalt CSE 335: Software Design Collaboration diagram listener : ButtonListener [0..*]button : Button listeners Button–ButtonListener Example of a collaboration diagram. role role nametypemultiplicityrole nametype connector

16 K. Stirewalt CSE 335: Software Design Collaboration + seq diagrams A 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

17 K. Stirewalt CSE 335: Software Design Another useful collaboration Viewport–ViewPortModel

18 K. Stirewalt CSE 335: Software Design 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 Print Note: The unseen document manager is serving lines from file “ViewPort.h”

19 K. Stirewalt CSE 335: Software Design Exercise Draw a sequence diagram that depicts the interaction between a viewport object (vp) and a DocumentManager object (docMgr) when vp is resized

20 K. Stirewalt CSE 335: Software Design Example: Class DocManager class 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 ); };

21 K. Stirewalt CSE 335: Software Design Example: Sequence diagram docMgr : MyDocManagervp : ViewPort resize() retrieve( 0,.... ) docSize() docLine(0,...) update() retrieve( 1,.... ) docLine(1,...) retrieve( n-1,.... ) docLine(n-1,...) docSize() sd resizeView

22 K. Stirewalt CSE 335: Software Design 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?

23 K. Stirewalt CSE 335: Software Design When vp collaborates with a docMgr... docMgr : MyDocManagervp : ViewPort resize() retrieve( 0,.... ) docSize() docLine(0,...) update() retrieve( 1,.... ) docLine(1,...) retrieve( n-1,.... ) docLine(n-1,...) docSize() sd resizeView

24 K. Stirewalt CSE 335: Software Design More general (reusable) interaction using the abstract role “model” update() retrieve(n) * : ViewPortmodel : ViewPortModel sd refreshView

25 K. Stirewalt CSE 335: Software Design Collaboration diagram vpm : ViewPortModelvp : ViewPort model ViewPort–ViewPortModel Example of a collaboration diagram.

26 K. Stirewalt CSE 335: Software Design Reusable class ViewPort class 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?

27 K. Stirewalt CSE 335: Software Design ViewportModel interface class ViewPortModel { public: virtual bool retrieve( unsigned lineNumber, string& line ) const =0; };

28 K. Stirewalt CSE 335: Software Design Example: ViewPort::Update method void 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()); }

29 K. Stirewalt CSE 335: Software Design Example: Synthesis of multiple roles class 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; } };

30 K. Stirewalt CSE 335: Software Design Configuration code int 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(); }

31 K. Stirewalt CSE 335: Software Design 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.

32 K. Stirewalt CSE 335: Software Design ScrollBar collaboration userEvent() announceNewValue(n) : ScrollBarlistener : ValuatorListener sd moveHandle

33 K. Stirewalt CSE 335: Software Design Exercise Integrate a scrollbar object into our viewport – docManager collaboration. Draw a sequence diagram to illustrate what happens when the user drags the slider handle to a new position.


Download ppt "K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 8: Modeling & documenting collaborations Topics: –Synthesis of multiple."

Similar presentations


Ads by Google