160 likes | 176 Views
Understand the concept of frameworks in software engineering for creating reusable architecture and components that support a family of related applications. Learn about patterns, component integration, and key principles for successful framework development.
E N D
Frameworks A Brief Introduction CSE870: Advanced Software Engineering: Frameworks (Cheng)
Assigned Reading • Designing Reusable Classes: Johnson and Foote (JOOP88) • Original Frameworks paper • Gives guidelines for creating frameworks • Motivates frameworks • See Handouts and Links web page CSE870: Advanced Software Engineering: Frameworks (Cheng)
Framework • Support reuse of detailed designs • An integrated set of components: • Collaborate to provide reusable architecture for • Family of related applications CSE870: Advanced Software Engineering: Frameworks (Cheng)
Frameworks • Frameworks are semi-complete applications • Complete applications are developed by inheriting from, and • Instantiating parameterized framework components • Frameworks provide domain-specific functionality • Ex.: business, telecommunication, dbases, distributed, OS kernels • Frameworks exhibit inversion of control at run-time • Framework determines which objects and methods to invoke in response to events CSE870: Advanced Software Engineering: Frameworks (Cheng)
Class Libraries vs Frameworks vs Patterns • Application • Specific • Logic Networking • Definition: • Class Libraries: • Self-contained, • Pluggable ADTs • Frameworks: • Reusable, semi-complete applications • Patterns: • Problem, solution, context Invokes ADTs Math Event Loop UI Dbase Class Library Architecture Math Networking UI Invokes Application Specific Logic Call Backs ADTs Event Loop Dbase Framework Architecture CSE870: Advanced Software Engineering: Frameworks (Cheng)
Component Integration in Frameworks • Framework components are loosely coupled via “callbacks” • Callbacks allow independently developed software to be connected together • Callbacks provide a connection-point • Generic framework objects communicate with application objects • Framework provides common template methods • Application provides the variant hook methods CSE870: Advanced Software Engineering: Frameworks (Cheng)
Patterns vs Frameworks • Patterns and frameworks play complementary, cooperative roles • Patterns are more abstract descriptions of frameworks • Frameworks are implemented in specific language • Complex frameworks may involve dozens of patterns • Patterns may document frameworks CSE870: Advanced Software Engineering: Frameworks (Cheng)
GUI Framework • Model/View/Controller (MVC): • Smalltalk-80 UI framework • UI: 3 types of components: • models, views, controllers • view and controller objects interacting with model • Model: application object, UI-independent • View: manages region of display • Keeps it consistent with state of model • Can be nested to form complex UIs • Controller: converts user events (e.g., mouse movements and key presses) into operations on its model and view • Implement scrolling and menus CSE870: Advanced Software Engineering: Frameworks (Cheng)
Example MVC • Model: FileBrowser • Views: • Top subview: String that is Pattern that matches set of files (e.g., *.h) • Middle subview: displays list of files that match pattern (e.g., Node.h, Int_node.h, etc.) • Bottom Subview: displays selected file • TextView (Top and Bottom subviews) • SelectionInListView: (Middle subview) • Controller: • Controller for each view • Mouse move from subview, activating different views CSE870: Advanced Software Engineering: Frameworks (Cheng)
Variations of MVC Framework • MacApp (Macintosh applications) • Andrew Toolkit (CMU 88) • InterViews (Stanford 89) • Commercial: • zApp (OS-independent) • OpenStep (part of much bigger, comprehensive system) • Microsoft Foundation Classes CSE870: Advanced Software Engineering: Frameworks (Cheng)
Key Principles How to develop successful patterns and frameworks • Separate interface from implementation • Determine what is • Common interface and (common -> stable) • Variable implementation • Allow substitutions for variable implementations via a common interface Dividing commonality from variability should be goal-oriented rather than exhaustive CSE870: Advanced Software Engineering: Frameworks (Cheng)
Open/Closed Principle • Determining common vs variable components is important • Insufficient variation makes it hard for users to customize framework components • Insufficient commonality makes it hard for users to understand and depend upon framework’s behavior • Generally, dependency should always be in the direction of stability • Component should not depend on any component less stable than itself • Open/Closed Principle: • Allows most stable components to be extensible CSE870: Advanced Software Engineering: Frameworks (Cheng)
Open/Closed Principle • Components should be: • Open for extension • Closed for modification • Implications: • Abstraction is good • Inheritance and polymorphism are good • Public data members and global data are bad • Run-time type identification can be bad CSE870: Advanced Software Engineering: Frameworks (Cheng)
Violating Open/Closed Principle Struct Shape {/* . . . */}; Class Square : public Shape { /* . . . */} Class Circle : public Shape { /* . . . */} void draw_square {const Square &); void draw_circle {const Circle &); void draw_shape (const Shape &shape) { switch (shape.shapeType) { case SQUARE: draw Square ((const Square &) shape); break; case CIRCLE: draw Circle ((const Square &) shape); break; // etc. CSE870: Advanced Software Engineering: Frameworks (Cheng)
Applying Open/Closed Principle class Shape { public: virtual void draw () const = 0; }; void draw all (const Shape &shape){ shape.draw (); } CSE870: Advanced Software Engineering: Frameworks (Cheng)
Observations of Frameworks • Benefits of frameworks: • Enable direct reuse of code • Enable larger amounts of reuse than standalone functions or individual classes • Drawbacks: • High initial learning curve • Many classes, many levels of abstraction • Flow of control for reactive dispatching is non-intuitive • Verification/validation of generic components is hard CSE870: Advanced Software Engineering: Frameworks (Cheng)