design ece 417/617: elements of software engineering stan birchfield clemson university
TRANSCRIPT
![Page 1: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/1.jpg)
Design
ECE 417/617:Elements of Software Engineering
Stan BirchfieldClemson University
![Page 2: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/2.jpg)
From modeling to design
Steps:1. Analysis and modeling
2. Design
3. Construction (code generation and testing)
Design involves making the analysis model more specific, to facilitate construction.
Goal of design is quality.
![Page 3: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/3.jpg)
FURPS
Quality software is• Functional – capabilities of program• Usable – human factors, aesthetics• Reliable – frequency and severity of failure• Performance – response time, speed• Supportable – is the code maintainable,
extensible, testable, configurable, easy to install, etc.
(Developed by Hewlett-Packard in 1980s)
![Page 4: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/4.jpg)
Basic design principles
• Design is iterative: – Architecture is refined over time by successively
filling in details– Refinement is a process of elaboration– Results in hierarchical model
• A good design exhibits– abstraction – details are provided in lower levels– modularity – divide-and-conquer via smaller
independent components– refactoring – internal structure of software is
improved without affecting external behavior
![Page 5: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/5.jpg)
Design model
Design model has three aspects:
• Architectural design
• Component-level (data) design
• Interface design
We will consider these in turn, with UI covered in a separate lecture.
![Page 6: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/6.jpg)
Architectural Design
![Page 7: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/7.jpg)
Architectural design• Architecture is a high-level representation of the S/W
with the major components identified• Architectural styles are templates, e.g.,
– Data-centered– Data-flow– Call and return– Object-oriented– Layered
• Architectural patterns define specific approach for handling some behavioral characteristic of system, e.g.,
– concurrency: use O/S features or provide task scheduler– persistence: storage and retrieval of data– distribution: communication of components with one
another. Most common is broker – acts as middle man between client and server (CORBA).
Style is like “Cape cod, A-frame”. Pattern is like “kitchen”.
![Page 8: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/8.jpg)
Architectural Styles
• Data-centered – subsystems interact through single repository
• Model / View / Controller
• Call and return (Client / Server)
• Layered (three-tier, four-tier)
• Data-flow (pipe and filter)
![Page 9: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/9.jpg)
Layers and Partitions
• Layer – group of related subsystems– Layer knows about layers below it, but not
layers above it– Top layer: no one else knows about it– Closed architecture – can only access layer
immediately below– Open architecture – can access any layer below
• Partition – peer subsystems, each with different responsibilities
![Page 10: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/10.jpg)
Hierarchical decompositionApplication
Presentation
Session
Transport
Network
DataLink
Physical
Socket
CORBA
TCP/IP
Object
Ethernet Wire
Lev
el o
f ab
stra
ctio
n
Frame
Packet
Bit
Connection
Format
Message
Example: Open Systems Interconnection (OSI)
![Page 11: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/11.jpg)
Mapping DFD into architecture
• Transform mapping– transform flow always exists; represents information flow within system; incoming flow
passes through transform center, leads to outgoing flow– To map DFD with transform flow characteristics into specific architectural style,– review model– refine models– determine whether transform or transaction characteristics– isolate transform center– perform first and second level factoring– refine
• Transaction mapping– transaction flow occurs when one input gives rise to several outputs; transaction triggers
data flow along one of many paths– To map DFD with transaction flow characteristics,– review model– refine models– determine whether transform or transaction characteristics– isolate transaction center– map to transform branch– factor and refine
![Page 12: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/12.jpg)
Model / View / Controller (MVC)
• MVC:– Model subsystems maintain domain
knowledge– View subsystems display it to the user– Controller subsystems manage sequence of
interactions with user
• M doesn’t depend upon V or C• Changes propagated via subscribe/notify
protocol, using Observer design pattern• Well-suited for interactive systems
![Page 13: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/13.jpg)
MVC Details
Controller
Model
subscriber
notifier
initiator
*
repository1
1
*
View
![Page 14: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/14.jpg)
MVC Example
![Page 15: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/15.jpg)
MVC Example Details
:Controller
:InfoView
:Model
2:enterNewFileName(file,newName)3:setName(newName)
:FolderView1:subscribeToFileEvents(file)
5:getName()
4:notifySubscribedViews(file)
1:subscribeToFileEvents(file)5:getName()
4:notifySubscribedViews(file)
![Page 16: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/16.jpg)
GUI-Based Programming
![Page 17: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/17.jpg)
Paradigms Compared
Application
Application
Widgets
The User
draw
output input
callbacksoutput
input
Traditional command-line GUI-based
![Page 18: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/18.jpg)
Event/Message loop
![Page 19: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/19.jpg)
Event loop – pseudocode
WinMain() { while (1) { // loop forever, waiting for an event if (event_exists) { //there is an event, figure out what to
do if (event == keydown_a) display(‘user pressed the A key’); else if (event == window_resize) display(‘window resized’); else if (event == repaint) display(‘need to repaint window’); else if (event == keydown_escape) exit_program();
} }}
int main() {return WinMain();
}
![Page 20: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/20.jpg)
Event loop – WinMain
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, char * cmdParam, int cmdShow)
{ char className [] = "Winnie"; WinClass winClass (WindowProcedure, className, hInst); winClass.Register (); WinMaker win ("Hello Windows!", className, hInst); win.Show (cmdShow); MSG msg; int status; while ((status = ::GetMessage (& msg, 0, 0, 0)) != 0) { if (status == -1) return -1; ::DispatchMessage (& msg); } return msg.wParam; }
![Page 21: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/21.jpg)
Event loop – WindowProc
LRESULT CALLBACK WindowProcedure (HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam)
{ switch (message) { case WM_DESTROY: ::PostQuitMessage (0); return 0; } return ::DefWindowProc (hwnd, message, wParam, lParam ); }
![Page 22: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/22.jpg)
Event loop (cont.)int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprev, PSTR cmdline, int ishow){ HWND hwnd; MSG msg; //initialization code goes here while(1) {
// Get message(s) if there is one if(PeekMessage(&msg,hwnd,0,0,PM_REMOVE)) {
if(msg.message == WM_QUIT)break;
TranslateMessage(&msg); DispatchMessage(&msg); //this calls the CALLBACK function WinProc()
} else {DrawScene(); //display the OpenGL/DirectX scene
}}
}
![Page 23: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/23.jpg)
Event loop (cont.)LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM
lparam){ PAINTSTRUCT ps; // Depending on the message -- we'll do different stuff switch(message) {
case WM_PAINT:Draw();return 0;
// ESC will quit programcase WM_KEYDOWN: //user pressed a key
if(GetAsyncKeyState(VK_ESCAPE)) //it was the escape keyPostQuitMessage(0); //quit program
return 0; case WM_DESTROY: //windows wants the program to die
case WM_CLOSE: //or the user closed the window PostQuitMessage(0); //quit program
return 0; } return DefWindowProc(hwnd, message, wparam, lparam);}
![Page 24: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/24.jpg)
GUI Concepts
• Widget – graphic object with functionality; e.g., button, toolbar, ...
• Window – holds widgets• Child/parent – relationships
between windows• Event / message – how windows
communicate
![Page 25: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/25.jpg)
Anatomy of a Window
title bar
menu
toolbar
client area
status bar
![Page 26: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/26.jpg)
Microsoft Windows Programming
• History:– Win32 API: core library written in C– MFC: C++ wrappers around most
common Win32 API functions
• Lots of macros• Lots of legacy code• Not free, not portable• But it works (generally speaking)
![Page 27: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/27.jpg)
Analyzing architectural designs
Two approaches developed by SEI:• Architecture trade-off analysis method
(ATAM)– Collect scenarios and requirements– Evaluate quality attributes and their sensitivity– Critique candidate architectures
• Scenario-based architectural analysis (SAAM)– Uses scenarios to analyze architectures with
respect to quality attributes
Quality attributes: reliability, performance, security, maintainability, flexibility, testability, portability, reusability, interoperability
![Page 28: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/28.jpg)
Component-level Design
![Page 29: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/29.jpg)
Component-level design
• Occurs after the first iteration of architectural design
• Goal: translate the design model into operational software
• Component is set of collaborating classes• Designing components
– OCL– flow chart– tabular design notation
Decision table has four quadrants specifying conditions and actions, as well as rules for both
– PDL (pseudocode)
![Page 30: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/30.jpg)
...
Decomposition
System
Subsystem1
Class1a
SubsystemN
Class1n... ClassNa ClassNn...
![Page 31: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/31.jpg)
Coupling and cohesion
• Coupling -- # of dependencies between subsystems
• Cohesion -- # of dependencies within subsystem
• Goal: low coupling, high cohesion• 7 +/- 2 rule – keep number of concepts at
any given layer of abstraction bounded
![Page 32: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/32.jpg)
Additional design principles• Single responsibility (SRP)
A class should have only one reason to change• Open-closed (OCP)
Software entities should be open for extension but closed for modification (achieved via inheritance)
• Liskov substitution (LSP)Subclasses should be substitutable for their base classes
• Dependency inversion (DIP)Abstractions should not depend upon details
• Interface segregation (ISP)Many client-specific interfaces are better than one general purpose interface
• Release reuse equivalency (REP)Granule of reuse is granule of release
• Common closure (CCP)Classes that change together belong together
• Common reuse (CRP)Classes in a package are reused together
![Page 33: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/33.jpg)
Data structures and flow
• Software system is composed of– data structures, and– data flow
• Which is more important?
“Show me your code and conceal your data structures, and I shall continue to by mystified. Show me your data structures and I won’t usually need your code. It will be obvious.” – Fred Brooks
![Page 34: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/34.jpg)
What is a Design Pattern?
• A design pattern– abstracts a recurring design structure– comprises class and/or object
• dependencies, • structures, • interactions, or• conventions
– distills design experience
![Page 35: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/35.jpg)
Re-use
• Code re-use– Don’t reinvent the wheel– Requires clean, elegant, understandable,
general, stable code– leverage previous work
• Design re-use– Don’t reinvent the wheel– Requires a precise understanding of common,
recurring designs– leverage previous work
![Page 36: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/36.jpg)
Some design patterns
• Abstract factory• Adapter• Bridge• Command• Composite• Façade• Subject / Observer• Proxy• Strategy
![Page 37: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/37.jpg)
Subject-observer
[from Vlissides]
![Page 38: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/38.jpg)
Subject-observer (cont.)
Subject
Register(Observer)Unregister(Observer)NotifyAll()
Observer
OnUpdate()
1 *
for all o in observers { o.OnUpdate()}
![Page 39: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/39.jpg)
Subject-observer (cont.)
Subject
Register(Observer)Unregister(Observer)NotifyAll()
Observer
virtual OnUpdate()
1 *
for all o in observers { o.OnUpdate()}
ConcreteSubject ConcreteObserver
virtual OnUpdate()
![Page 40: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/40.jpg)
Model / view / controller (MVC)
Controller
Model
View (displays data)
(mediates)
(holds data)
{ Model m; Controller c(&m); View v(&c);} calls Register()
Main
View
Controller
Model
Create()
Create()
Create()
Register()
Set()
Set()
OnUpdate()
![Page 41: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/41.jpg)
MVC (cont.)
Subject
Register(Observer)Unregister(Observer)NotifyAll()
Observer
virtual OnUpdate()
1 *
for all o in observers { o.OnUpdate()}
Controller View
virtual OnUpdate()
![Page 42: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/42.jpg)
MVC (cont.)class Observer{protected: virtual void OnUpdate(MsgId message_id) = 0;};
class Subject{public: enum MsgId {}; void RegisterObserver(Observer* obs); virtual void NotifyAllObservers(MsgId message_id) { for (int i=0 ; i<m_observers.size() ; i++) { m_observers[i]->OnUpdate(message_id); } }private: std::vector<Observer*> m_observers;};
![Page 43: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/43.jpg)
MVC (cont.)
class Controller : public Subject{ Controller(Data* d) : m_data(d) {} const Data* GetData() const; void AddSphere(const Sphere& s) { m_data->AddSphere(s); NotifyAllObservers(ADD_SPHERE); }private: Data* m_data;};
![Page 44: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/44.jpg)
MVC (cont.)class MainWnd : public Observer, CWnd{public: MainWnd(Controller* c) : m_controller(c) { c.Register(this); } virtual void OnUpdate(int message_id) { switch (message_id) { case Subject::ADD_SPHERE: ... } }private: Controller* m_controller;};
![Page 45: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/45.jpg)
Adapter
• You have– legacy code– current client
• Adapter changes interface of legacy code so client can use it
• Adapter fills the gap b/w two interfaces• No changes needed for either
– legacy code, or– client
![Page 46: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/46.jpg)
Adapter (cont.)
class NewTime {public:int GetTime() { return m_oldtime.get_time() * 1000 + 8; }private: OldTime m_oldtime;};
![Page 47: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/47.jpg)
Command
• You have commands that need to be– executed,– undone, or– queued
• Command design pattern separates– Receiver from Invoker from Commands
• All commands derive from Command and implement do(), undo(), and redo()
![Page 48: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/48.jpg)
Implementing ‘Undo/Redo’
• Multi-level undo/redo requires two classes:– Command– CommandManager
class Command { public: virtual bool Execute() = 0; virtual bool Unexecute() = 0; virtual ~Command() { } };
class CommandManager { private: typedef list<Command*> CommandList; CommandList m_undoList; CommandList m_redoList;public: void DoCommand(Command* com); void Undo(); void Redo(); };
http://www.codeproject.com/KB/cpp/undoredo_cpp.aspx
![Page 49: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/49.jpg)
Facade
• You– have a set of related classes– want to shield the rest of the system
from these details
• Facade provides a simplified interface
• Encapsulates a subsystem
![Page 50: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/50.jpg)
Composite
• You want uniformly to treat – items (atomic elements), and– groups (containing items or other groups)
• Composite interface specifies operations that are shared between items and groups
• Examples: hierarchy of files and directories, groups of drawable elements
![Page 51: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/51.jpg)
Composite (cont.)
GroupItem
Composite
![Page 52: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/52.jpg)
Proxy
• You want to– delay expensive computations,– use memory only when needed, or– check access before loading an object into
memory
• Proxy – has same interface as Real object– stores subset of attributes– does lazy evaluation
![Page 53: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/53.jpg)
Strategy
• You want to– use different algorithms depending upon the
context– avoid having to change the context or client
• Strategy – decouples interface from implementation– shields client from implementations– Context is not aware which strategy is being used;
Client configures the Context– strategies can be substituted at runtime– example: interface to wired and wireless networks
![Page 54: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/54.jpg)
Strategy (cont.)
Client
Strategy
ConcreteStrategyA
ConcreteStrategyB
Context
Policy
![Page 55: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/55.jpg)
Strategy (cont.)Lots of switch statements is evidence of “code smell”:
Polymorphism, using strategy pattern, cleans this up:
http://codebetter.com/blogs/jeremy.miller/archive/2006/04/11/142665.aspx
![Page 56: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/56.jpg)
Bridge
• You– have several different implementations– need to choose one, possibly at run time
• Bridge – decouples interface from implementation– shields client from implementations– Abstraction creates and initializes the
ConcreteImplementations– Example: stub code, slow code, optimized code
![Page 57: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/57.jpg)
Bridge (cont.)Client
Implementor
RefinedAbstraction
ConcreteImplementorA
ConcreteImplementorB
Abstraction
![Page 58: Design ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University](https://reader036.vdocument.in/reader036/viewer/2022062802/56649ebc5503460f94bc57c3/html5/thumbnails/58.jpg)
Design pattern space
[from Vlissides]