620 likes | 710 Views
Composition. Prasun Dewan. Department of Computer Science University of North Carolina CB 3175 Sitterson Hall Chapel Hill, NC 27599-3175 dewan@cs.unc.edu http:/www.cs.unc.edu/~dewan. Example. Class Decomposition. Model. Semantics State. 5. Controller. Manipulates State.
E N D
Composition Prasun Dewan Department of Computer Science University of North Carolina CB 3175 Sitterson Hall Chapel Hill, NC 27599-3175 dewan@cs.unc.edu http:/www.cs.unc.edu/~dewan 290-63:Composition
Example 290-63:Composition
Class Decomposition Model SemanticsState 5 Controller Manipulates State BarView Displays state 290-63:Composition
Reuse Model SemanticsState Controller Manipulates State TextView Displays state 290-63:Composition
Inheritance-based Composition Model IS-A Controller BarView 290-63:Composition
Inheritance-based Composition Model Controller TextView 290-63:Composition
Inheritance-based Composition Model TextView Controller 290-63:Composition
Inheritance-based Composition Model TextView MController Menus 290-63:Composition
Delegation & MVC Push Button Draw Bar Has-A Model Observerable/ Listenable increment modelUpdated getVal Editing View State Observer/ Listener Controller BarView Editable TextField 290-63:Composition
Reuse Model & Controller Push Button Draw Text Has-A Model Observerable/ Listenable modelUpdated increment addListener getVal Observer/ Listener Controller TextView 290-63:Composition
Multilevel MVC Model Controller TextView ScreenView Screen Format 290-63:Composition
Multilevel MVC Model Controller TextView PrintView Printer Format 290-63:Composition
Observer but Not View Model Model Replica Spread. Cell Dependent Cell Mouse Controller Lateral Observer “Callback” Higher-Level Observer 290-63:Composition
Delegate but Not Observer addElement Stack Vector push displayInt IntStack displayStack push Delegator Delegate 290-63:Composition
Delegate but Not Observer • Observer received “notification” about state change in Observable • Notification is Observable-Specific not Observer-specific. • Observer does not “depend” on Observable to do its tasks. 290-63:Composition
Delegation Vs Inheritance 290-63:Composition
Inheritance-based Composition Model IS-A Controller BarView 290-63:Composition
Delegation-Based Composition Model Controller BarView 290-63:Composition
Reuse Model & View Model MController TextView 290-63:Composition
Delegation Vs Inheritance • Arbitrary class can be replaced 290-63:Composition
Dynamic View Switching 290-63:Composition
Dynamic View Switching 290-63:Composition
Dynamic Configuration in Delegation addListener(TextView) removeListener(BarView) Model setModel(Model) Controller BarView TextView 290-63:Composition
Compile-time binding in Inheritance Model Controller BarView 290-63:Composition
Delegation Vs Inheritance • Arbitrary class can be replaced • Dynamic component replacement • IS-A compile time • HAS-A runtime 290-63:Composition
Multiple Views 290-63:Composition
Multiple Instantiation in Delegation Model Controller BarView BarView 290-63:Composition
Multiple Subclasses in Inheritance M_Vars M_Vars’ C_Vars’ C_Vars BV_Vars TV_Vars Model Controller BarView TextView 290-63:Composition
Multiple Instantiation in Delegation Model M_Vars Controller BarView BarView TV_Vars C_Vars B_Vars 290-63:Composition
Delegation Vs Inheritance • Arbitrary class can be replaced • Dynamic component replacement • IS-A compile time • HAS-A runtime • Multiple Component Instantiation 290-63:Composition
Distribution in Delegation Model Controller BarView 290-63:Composition
Distribution in Delegation BarView BarView Controller Controller Model 290-63:Composition
Distribution in Inheritance Model Controller BarView 290-63:Composition
Proxies in Delegation Model Controller BarView Model Out In Controller BarView 290-63:Composition
Delegation Vs Inheritance • Arbitrary class can be replaced • Dynamic component replacement • IS-A compile time • HAS-A runtime • Multiple Component Instantiation • Distribution • Proxies 290-63:Composition
Delegation Vs Inheritance • Connections made by component users • Connections specified by component definers • O(n) connections explicitly made (components define an environment) • O(N2) connections explicitly made • Connections not visualized • Links Visualized 290-63:Composition
Delegation Vs Inheritance • Connections remade with dynamic links • No dynamism • Distribution requires more work and objects • No distribution • No proxies • Ditto with Proxies 290-63:Composition
Delegation vs Inheritance • Flexibility of Delegation => Less Automation • Provide incremental path • Some disadvantages not inherent and can be partially overcome 290-63:Composition
Overcoming Delegation Drawbacks • Connections made by component users • Connections specified by component definers • External agent makes connection at instantiation time based on specification 290-63:Composition
External Generic Agent Specific Composer Generic Composer Model Controller BarView TextView 290-63:Composition
Facets addListener() setModel() setModel() Specific Composer Generic Composer Model Controller BarView TextView 290-63:Composition
Registering addListener() setModel() setModel() Specific Composer Generic Composer Model reg(c,m,v) reg(C,M,V) Controller BarView TextView 290-63:Composition
Auto Connection addListener() setModel() setModel() Specific Composer Generic Composer Model reg(c,m,v) AC(c,m,v) Controller BarView TextView 2*n runtime 290-63:Composition
Auto Connection MVC Composer addListener() Model Auto-connect Facets setModel() setModel() Specific Composer Controller TextView Generic Composer reg(C,M,V) AC(new C) n + 1 runtime 290-63:Composition 1 runtime
Dynamic/Explicit Connection 290-63:Composition
Connection Visualization 290-63:Composition
Specifying Facets Facet-Specification API addListener() Registration API setModel() setModel() registerFacet (<FacetName>, <FacetType>, <Method>, arity) registerFacet (listener, Listener, addListener, many) Generic Composer Model Server-API Approach Specific Composer Controller TextView BarView registerFacet (changeable, Changeable, setModel, single) 290-63:Composition
Specifying Facets Facet-Specification API Facet-Specification API addListener() Registration API setModel() setModel() Reflection Protocol registerFacet (listener, Listener, addListener, many) Generic Composer Model Introspection Approach Specific Composer Controller BarView TextView registerFacet (changeable, Changeable, setModel, single) 290-63:Composition
Basic Connection Patterns publicvoid add<FacetName> (<FacetType>) public <FacetType> <FacetName> publicvoid set<FacetName> (<FacetType>) [public <FacetType> get<FacetName> ()] [public Enumeration enumerate<FacetName> ()] public void remove<FacetName> (<FacetType>) 290-63:Composition
Some Advanced Patterns [public Object getReferenceFor<FacetName>()] publicclass Controller implements AutoConnectAll public String[] getAutoConnectFacets() [public String getOpposite<FacetName>()] Argument to set<FacetName> (<FacetType>) 290-63:Composition