K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 5: Mixins and reusable strategies Topics: – More on the use of mixins.

Slides:



Advertisements
Similar presentations
Ch:8 Design Concepts S.W Design should have following quality attribute: Functionality Usability Reliability Performance Supportability (extensibility,
Advertisements

K. Stirewalt CSE 335: Software Design Synthetic OOD concepts and reuse Lecture 4: Separation of concerns Topics: –Complex concern: Memory management –
OBJECT ORIENTED PROGRAMMING M Taimoor Khan
CS 211 Inheritance AAA.
The Bridge Pattern.. Intent Decouple an abstraction from its implementation so that the two can vary independently Also known as: Handle/Body.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Immutable Objects and Classes.
Slide 1 Systems Analysis & Design CS183 Spring Semester 2008 Dr. Jonathan Y. Clark Course Website:
R R R CSE870: Advanced Software Engineering: Frameworks (Cheng, Sp2003)1 Frameworks A Brief Introduction.
K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 1: Program fragments and abstract classes Topics: –Economics of software.
Satzinger, Jackson, and Burd Object-Orieneted Analysis & Design
K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 2: Abstract classes and composite structures Topics: –Elaboration of.
Template Method By: Mahmoodreza Jahanseir Amirkabir University of Technology Computer Engineering Department Fall 2010.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved OOP and.
K. Stirewalt CSE 335: Software Design Outline of course topics Foundational OO concepts Synthetic concepts: –Program families, program fragments, and abstract.
Vrije Universiteit amsterdamPostacademische Cursus Informatie Technologie Themes and Variations abstraction -- the object metaphor modeling -- understanding.
K. Stirewalt CSE 335: Software Design Software Architecture and Larger System Design Issues Lecture 3: Synchronization Topics: –Concurrent access to shared.
Object-oriented design CS 345 September 20,2002. Unavoidable Complexity Many software systems are very complex: –Many developers –Ongoing lifespan –Large.
C++ fundamentals.
1 An introduction to design patterns Based on material produced by John Vlissides and Douglas C. Schmidt.
Abstraction: Polymorphism, pt. 1 Abstracting Objects.
OBJECT ORIENTED PROGRAMMING IN C++ LECTURE
CSE 332: C++ templates and generic programming I Motivation for Generic Programming in C++ We’ve looked at procedural programming –Reuse of code by packaging.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 18 Slide 1 Software Reuse 2.
Introduction to Object-oriented Programming CSIS 3701: Advanced Object Oriented Programming.
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 18 Slide 1 Software Reuse.
Software Engineering Muhammad Fahad Khan
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 18 Slide 1 Software Reuse.
Introduction to Object-oriented programming and software development Lecture 1.
GENERAL CONCEPTS OF OOPS INTRODUCTION With rapidly changing world and highly competitive and versatile nature of industry, the operations are becoming.
An Object-Oriented Approach to Programming Logic and Design
CSE 332: C++ templates This Week C++ Templates –Another form of polymorphism (interface based) –Let you plug different types into reusable code Assigned.
Ceg860 (Prasad)L6MR1 Modularity Extendibility Reusability.
Introductory Software Engineering with a Focus on Dependency Management Christine Hofmeister.
An Introduction to Design Patterns. Introduction Promote reuse. Use the experiences of software developers. A shared library/lingo used by developers.
ISP666 MVC & Design Patterns. Outline Review Event Programming Model Model-View-Controller Revisit Simple Calculator Break Design Patterns Exercise.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 18 Slide 1 Software Reuse.
11 Chapter 11 Object-Oriented Databases Database Systems: Design, Implementation, and Management 4th Edition Peter Rob & Carlos Coronel.
CS 350 – Software Design The Strategy Pattern – Chapter 9 Changes to software, like other things in life, often focus on the immediate concerns and ignore.
K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 1: Program fragments and abstract classes Topics: –Economics of software.
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Design Patterns IX Interpreter, Mediator, Template Method recap.
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 11 Slide 1 Design.
The Factory Patterns SE-2811 Dr. Mark L. Hornick 1.
Chapter 8 Object Design Reuse and Patterns. Object Design Object design is the process of adding details to the requirements analysis and making implementation.
Prepared by: Elsy Torres Shajida Berry Siobhan Westby.
OBJECT-ORIENTED PROGRAMMING (OOP) WITH C++ Instructor: Dr. Hany H. Ammar Dept. of Electrical and Computer Engineering, WVU.
Design.ppt1 Top-down designs: 1. Define the Problem IPO 2. Identify tasks, Modularize 3. Use structure chart 4. Pseudocode for Mainline 5. Construct pseudocode.
Chapter 12 Object Oriented Design.  Complements top-down design  Data-centered view of design  Reliable  Cost-effective.
OOAD Unit – I OBJECT-ORIENTED ANALYSIS AND DESIGN With applications
Dale Roberts Object Oriented Programming using Java - Introduction Dale Roberts, Lecturer Computer Science, IUPUI Department.
Relationships Relationships between objects and between classes.
K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 8: Modeling & documenting collaborations Topics: –Synthesis of multiple.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
CSCI-383 Object-Oriented Programming & Design Lecture 10.
1 CSC 427: Data Structures and Algorithm Analysis Fall 2006 See online syllabus (also available through Blackboard): Course goals:
Salman Marvasti Sharif University of Technology Winter 2015.
Billy Bennett June 22,  Intent Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.
1 Chapter 5:Design Patterns. 2 What are design pattern?  Schematic description of design solution to recurring problems in software design and,  Reusable.
Foundations: Language mechanisms and primitive OO concepts Lecture 1: Classification and Inheritance Michigan State University Spring 2008 E. Kraemer Notes.
K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 5: Mixins and reusable strategies Topics: – More on the use of mixins.
C++ Inheritance Data Structures & OO Development I 1 Computer Science Dept Va Tech June 2007 © McQuain Generalization versus Abstraction Abstraction:simplify.
The Template Method Pattern (Behavioral) ©SoftMoore ConsultingSlide 1.
OO in Context Lecture 13: Dolores Zage. Confused about OO Not alone, there is much confusion about OO many programs are claimed to be OO but are not really.
Banaras Hindu University. A Course on Software Reuse by Design Patterns and Frameworks.
Collaborative Systems Developing Collaborative Systems with a Reuse Driven Process.
© 2004 Pearson Addison-Wesley. All rights reserved January 23, 2006 Creating Objects & String Class ComS 207: Programming I (in Java) Iowa State University,
K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 1: Program fragments and abstract classes Topics: –Economics of software.
Design Patterns: MORE Examples
CompSci 280 S Introduction to Software Development
OOP vs Structured Programming
CIS601: Object-Oriented Programming in C++
Presentation transcript:

K. Stirewalt CSE 335: Software Design Synthetic OO Design Concepts & Reuse Lecture 5: Mixins and reusable strategies Topics: – More on the use of mixins – Example of refactoring to tame complexity – Reusable strategies and template-method pattern “One of the main characteristics of a computer science mentality is the ability to jump very quickly between levels of abstraction, almost unconsciously.” -- D. E. Knuth.

K. Stirewalt CSE 335: Software Design Outline of course topics Foundations of OO design Synthetic concepts: OO primitives in combination to produce design assets of various kinds Software architecture and larger design issues Software process issues

K. Stirewalt CSE 335: Software Design Outline of course topics Foundations of OO design Synthetic concepts: OO primitives in combination to produce design assets of various kinds Program families, program fragments, and abstract classes 1.Heterogeneous containers 2.Composite structures Separation of concerns 3.Separating/encapsulating cross-cutting operations [Visitor pattern] 4.Mixin classes 5.Reusable strategies and object-oriented frameworks Exam 1 Reusable collaborations Software architecture and larger design issues Software process issues

K. Stirewalt CSE 335: Software Design Where are we? Foundations of OO design Synthetic concepts: OO primitives in combination to produce reusable design assets Program families, program fragments, and abstract classes 1.Heterogeneous containers 2.Composite structures Separation of concerns 3.Separating/encapsulating cross-cutting operations [Visitor pattern] 4.Mixin classes 5.Reusable strategies and object-oriented frameworks Exam 1 Reusable collaborations Software architecture and larger design issues Software process issues

K. Stirewalt CSE 335: Software Design Recall: Program families and fragments XX X X Program fragments: retained; refined to produce new fragments and programs defer implementation/design decisions to fragments or programs “down the tree”. abstract operations specify “what”, not “how”

K. Stirewalt CSE 335: Software Design Example: Document editor Allows user to view and or edit documents of various types Different “kinds” of documents: –Plain text vs. rich text (with embedded fonts) –Shared documents vs. non-shared documents Some users may edit, others may only browse Need to protect access when multiple users are editing Problem: Procedure to open/manipulate a document varies among different document types

K. Stirewalt CSE 335: Software Design Example: Document class class Document { public: bool Open( const string& ); void Close(); void ReadLine( unsigned ); void AppendLine( unsigned, const string& ); void ReplaceLine( unsigned, const string& ); void View( unsigned, unsigned, Display* );... protected: FILE*f; }; bool Document::Open( const string& name ) { if((f = fopen(name, “r+”))==0) return false; return true; } void Document::Close() { fclose(f); }

K. Stirewalt CSE 335: Software Design Example: Adding rich text class Document {... protected: FILE*f; vector fonts; }; bool Document::Open( const string& name ) { if((f = fopen(name, “r+”))==0) return false; if (f && isRichTextFile(name)) { string fontFileName( name + “Fonts” ); FILE* fontfile; if((fontfile=fopen(fontFileName,...))==0) return false; // load contents into fonts fclose(fontfile); return true; }

K. Stirewalt CSE 335: Software Design Example: Adding sharing support class Document {... bool Open( const string& ); void Close();... protected: FILE*f; vector fonts; FILE*lockFile; };

K. Stirewalt CSE 335: Software Design Example: Document class bool Document::Open( const string& name ) { stringlockName(“.lock” + name); if (isSharedFile(name) && testAndSet(lockFile,lockName)) return false; if((f = fopen(name, “r+”))==0) return false; if (f && isRichTextFile(name)) { string fontFileName( name + “Fonts” ); FILE* fontfile; if((fontfile=fopen(fontFileName,...))==0) return false; // load contents into fonts fclose(fontfile); } void Document::Close() { fclose(f); if (isSharedFile(name)) { unlink(lockFile); } return true; }

K. Stirewalt CSE 335: Software Design Problems with this solution Code quickly getting very complex –Code for open has lots of “case logic” if (isSharedFile(name)), if (isRichTextFile(name)) –Cases not even localized lock file created at beginning of open method must be deleted at end of close method Document class becoming a “kitchen sink” with everything needed for any kind of document

K. Stirewalt CSE 335: Software Design Question Can you think of a way to redesign this class to tame this escalating complexity?

K. Stirewalt CSE 335: Software Design Candidate solution Develop a Document class hierarchy –Document becomes the base class –Each derived class adds a feature, such as rich text or support for sharing Sounds similar to how we developed the Employee–Manager hierarchy

K. Stirewalt CSE 335: Software Design Hierarchy of Document classes Document f : FILE Open() : Bool; Close() : Bool ReadLine( unsigned ) : void... RichDocument fonts : vector ; Open() : Bool SharedRichDocument lockFile : FILE Open() : Bool

K. Stirewalt CSE 335: Software Design Example: Adding rich text class RichDocument : public Document { bool Open(const string&); protected: vector fonts; }; bool RichTextDocument::Open( const string& name ) { if(!Document::Open(name)) return false; if (f && isRichTextFile(name)) { string fontFileName( name + “Fonts” ); FILE* fontfile; if((fontfile=fopen(fontFileName,...))==0) return false; // load contents into fonts fclose(fontfile); } return true; }

K. Stirewalt CSE 335: Software Design Class SharedRichTextDocument class SharedRichDocument : public RichTextDocument { public: bool Open( const string& ); void Close(); protected: FILE* lockfile; }; bool SharedRichDocument::Open( const string& name ) { stringlockName(“.lock” + name); if (isSharedFile(name) && testAndSet(lockName)) return false; return RichTextDocument::Open(name); } void SharedRichDocument::Close() { RichTextDocument::Close(); if (isSharedFile(name)) { unlink(lockFile); }

K. Stirewalt CSE 335: Software Design Question Can you spot any problems with this solution? Hints: –What if client wants to open a shared document that is not a rich-text document? –How must a client create a Document object of the proper type?

K. Stirewalt CSE 335: Software Design Problems w/ candidate solution Hierarchy itself complex because of the independent variation of features –Sharing vs. non-sharing orthogonal to rich vs. plain text –Do we need a new derived class for each possible combination –Will this scale? Pushes complexity out to the client: –Client needs to distinguish what “kind” of file to create so that it can decide which derived class to instantiate –What happens when we wish to support new kinds of files with new characteristics?

K. Stirewalt CSE 335: Software Design Question Can you spot any problems with this solution? Hints: –What if client wants to open a shared document that is not a rich-text document? –How must a client create a Document object of the proper type?

K. Stirewalt CSE 335: Software Design Solution idea “Stuff that is added” in each derived class has few dependencies on its base Sort of like a mixin class (e.g., RCObject) that is mixed in “in the middle of” rather than “at the top of” the class hierarchy Mixin classes of this sort can be defined in C++ using a combination of inheritance, polymorphism, and templates Allows management of independent variation of features

K. Stirewalt CSE 335: Software Design Solution using mixins template class RichDoc : public DOCUMENT_BASE { public: bool Open(const string&); }; template class SharedDoc : public DOCUMENT_BASE { public: bool Open(const string&); void Close(); };

K. Stirewalt CSE 335: Software Design Solution using mixins (cont) Now, we can support the following combinations: –Document –SharedDoc –SharedDoc > Example use: SharedDoc * myDoc; if (myDoc.Open(“foo.doc”)) {... myDoc.Close(); }

K. Stirewalt CSE 335: Software Design Exercise Write the code for the methods SharedDoc::Open and SharedDoc::Close

K. Stirewalt CSE 335: Software Design Question Can you spot any problems with this solution? Hints: –What if client wants to open a shared document that is not a rich-text document? –How must a client create a Document object of the proper type?

K. Stirewalt CSE 335: Software Design Solution using doc manager DocumentManager bool OpenDoc( string );... - bool CanRead( string ); - bool CreateDoc( string ); Document docs Client

K. Stirewalt CSE 335: Software Design Technique: Template methods Technique for designing base classes that incorporate an extensible strategy for solving a problem Base class provides two kinds of operations: –Non-polymorphic operations, which are visible to clients; and –Polymorphic hook operations, which are not visible to clients Key idea: –Base class provides a template method for each non- polymorphic operation Defines skeleton algorithm Invokes hook operations –Derived classes “fill in” these generic algorithms by providing methods for the hook operations.

K. Stirewalt CSE 335: Software Design Example: Generic document handling class Document { public: virtual void Open(); virtual void ReadLine(...); virtual void View(...);... }; class DocumentManager { public: void OpenDoc(const string& ); protected: vector _docs; virtual bool CanOpen(const char*); virtual Document* CreateDoc(const char*); }; Template method Hook operations }

K. Stirewalt CSE 335: Software Design OpenDoc template method void DocumentManager::OpenDoc( const string& name ) { if (!CanOpen(name)) return; // hook op Document* doc = CreateDoc(name); // hook op if (doc) { _docs.push_back(doc); doc->Open(); }

K. Stirewalt CSE 335: Software Design Example DocumentManager bool OpenDoc( string ); - bool CanRead( string ); - bool CreateDoc( string ); MyDocManager vector locks; bool CanRead( string ); bool CreateDoc( string ); Document f : FILE; open() : void; readLine( unsigned ) : void... RichDocument fonts : vector ; open() : void; docs

K. Stirewalt CSE 335: Software Design Question We’ve looked at two different designs that involve generalization classes ( DocumentManager and Employee ). Both use inheritance and polymorphism, but they do so in a fundamentally different manner. What are the essential differences in the design strategies applied in these two instances?

K. Stirewalt CSE 335: Software Design Generality principle “Every time you are asked to solve a problem, try to focus on the discovery of a more general problem that may be hidden behind the problem at hand. It may happen that the generalized problem is no more complex---it may even be simpler than---the original problem. Being more general, it is likely that the solution to the generalized problem has more potential for being reused. It may even happen that the solution is already provided by some off-the-shelf package. Also, it may happen that by generalizing a problem, you end up designing a module that is invoked at more than one point of the application, rather than having several specialized solutions.”

K. Stirewalt CSE 335: Software Design Generality principle “Every time you are asked to solve a problem, try to focus on the discovery of a more general problem that may be hidden behind the problem at hand. It may happen that the generalized problem is no more complex---it may even be simpler than---the original problem. Being more general, it is likely that the solution to the generalized problem has more potential for being reused. It may even happen that the solution is already provided by some off-the-shelf package. Also, it may happen that by generalizing a problem, you end up designing a module that is invoked at more than one point of the application, rather than having several specialized solutions.”

K. Stirewalt CSE 335: Software Design Generality principle “Every time you are asked to solve a problem, try to focus on the discovery of a more general problem that may be hidden behind the problem at hand. It may happen that the generalized problem is no more complex---it may even be simpler than---the original problem. Being more general, it is likely that the solution to the generalized problem has more potential for being reused. It may even happen that the solution is already provided by some off-the-shelf package. Also, it may happen that by generalizing a problem, you end up designing a module that is invoked at more than one point of the application, rather than having several specialized solutions.”