Download presentation
Presentation is loading. Please wait.
Published byJaylin Meggs Modified over 9 years ago
1
Mira Mezini Universität Siegen Dynamic Component Gluing - Runtime Integration of Concerns Dynamic Component Gluing - Runtime Integration of Concerns Linda Seiter Santa Clara University Karl Lieberherr Northeastern University
2
Question#1: When should a concern be applied? Question#1: When should a concern be applied?
3
The Java philosophy Class Loading Load a class when you need it, and not beforehand. Why? Keep programs lightweight Performance at program initialization Tailor program model to user‘s profile Class evolution Customer Order Product Static Class Dimension
4
The SOC philosophy Concern Loading Load a concern when you need it, and not beforehand. Why? Keep classes, objects lightweight Performance at class loading, object construction Tailor class/object model to user‘s profile Dynamic class/object evolution Customer Dynamic Class Dimension Product
5
Question#2: What should a concern be applied to? Question#2: What should a concern be applied to?
6
Concern Scope o2:producto1:order OrderProduct Pricing Concern Class Scope Object Scope
7
Client Order …. //implement LineItem PriceBuilder pricer() { return product(); } Item item() { return product(); } Client client() { return customer(); } (Concern) Pricing Framework PriceBuilderLineItemItemCharge (Base) Application Concern Integration - Regular Pricing OfficeSupply …. //implement Item Charge charge() { return tax(); } //implement PriceBuilder basicPrice(..) { return regPrice(..); } discount(..) { return regDiscount(..); } Customer Tax …. //implement Charge cost(..) { return taxCharge(..); }
8
Client Order …. //implement LineItem PriceBuilder pricer() { return product(); } Item item() { return product(); } Client client() { return customer(); } Pricing Framework PriceBuilderLineItemItemCharge Application Framework Deployment - Sales Pricing OfficeSupply …. //implement Item Charge charge() { return tax(); } //implement PriceBuilder basicPrice(..) { return salePrice(..); } discount(..) { return saleDiscount(..); } Customer Tax …. //implement Charge cost(..) { return taxCharge(..); }
9
Client Order …. //implement LineItem PriceBuilder pricer() { return product(); } Item item() { return product(); } Client client() { return customer(); } Pricing Framework PriceBuilderLineItemItemCharge Application Framework Deployment - Negotiated Pricing OfficeSupply …. //implement Item Charge charge() { return tax(); } Customer Tax …. //implement Charge cost(..) { return taxCharge(..); } //implement PriceBuilder basicPrice(..) { return salePrice(..); } discount(..) { return saleDiscount(..); }
10
Question#3: How to support multi-dimensional classes and objects? Question#3: How to support multi-dimensional classes and objects?
11
public class AppRoot AppChild appChild(){ return appChild; } public void method_1(AppChild ac) {... } public class AppChild public void method_2() {... } abstract class FrameworkRoot abstract FrameworkChild frameworkChild(); abstract void primOp1(AppChild ) ; public void template() { primOp1(frameworkChild()); frameworkChild().primOp2(); } abstract class FrameworkChild abstract void primOp2(); Solution:Dynamic Composite Adapter FrameworkChild frameworkChild() { return appChild()); } void primOp1(FrameworkChild f) { method_1 ( (AppChild) f); } void primOp2() {method_2 ();} Framework (Concern) Application (Base) appChild
12
Independently developed binary components dynamic gluing at deployment site: interface matching adaptation new functionality AdapterFactory AdapterObject AdapterUtilities Dynamic Composite Adapter FrameworkRoot FrameworkChild Framework AppRoot AppChild Application APP_FRMK Adapters
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.