Presentation is loading. Please wait.

Presentation is loading. Please wait.

Software Product Lines Peter Bell CEO/CTO, SystemsForge cf.Objective() 2008 Peter Bell CEO/CTO, SystemsForge cf.Objective() 2008.

Similar presentations


Presentation on theme: "Software Product Lines Peter Bell CEO/CTO, SystemsForge cf.Objective() 2008 Peter Bell CEO/CTO, SystemsForge cf.Objective() 2008."— Presentation transcript:

1 Software Product Lines Peter Bell CEO/CTO, SystemsForge cf.Objective() 2008 Peter Bell CEO/CTO, SystemsForge cf.Objective() 2008

2 Who Am I? Programmer - 30-50 projects/yr. Researcher - Published academic papers DSM forum/ooPSLA SystemsForge - 10,000 custom apps/yr. Writer - CFDJ, Fusion Authority Quarterly Presenter - cf.objective(), CF United, Frameworks, Code Generation 2007, ooPSLA, Domain Specific Modeling Forum, CFCamp...

3 What is a SPL? “framework for systematic reuse” “ predictive versus opportunistic software reuse” 5-10 times improvements in productivity

4 Why NOT Use? Not thought of it Too busy “We're special” Sales model Hourly billing Client expectations

5 It’s Not Just Code Candidates for Reuse: Methodology Contracts Requirements Architecture Tests Documentation Tooling

6 Layers of Reuse Feature model - major items - shopping cart Configuration - bounded variability - shipping options DSLs - unbounded variability - objects and screens Custom code - one offs - custom integration

7 What IS a DSL? “An executable language targeted to a specific problem domain” Specific - can’t do everything Executable - not just conceptual Raising level of abstraction

8 Everything is a DSL Premise: EVERYTHING is a DSL Useful if not true! Examples: API Database schema XML file Object (methods with parameters) “When I use a word, it means just what I choose it to mean” - Humpty Dumpty

9 Abstract vs. Concrete Abstract Grammar vs. Concrete Syntax What you say vs. How you say it User @FirstName FirstName

10 Internal vs. External API: UserService.import("test.csv", ",", "FirstName,LastName,Email", "tbl_User", "update"); Internal Language extension: steps_for(:accounts) do Given("my $account_type account balance is $amount") do |account_type, amount| create_account(account_type, amount) end When("I transfer $amount from $source_account to $target_account") do |amount, source_account, target_account| get_account(source_account).transfer(amount).to(get_account(target_acco unt)) end...

11 Internal vs. External XML: External Comma Delimited: "test.csv", ",", "FirstName,LastName,Email", "tbl_User", "update" Little Language: Import test.csv using commas update tbl_User with FirstName,LastName,Email Databased Visual

12 Horizontal vs. Vertical Horizontal (tech focused) SQL RegEx Import description language General workflow language Vertical (business focused) Insurance policy language Product configuration language Academic requirements language

13 Projections API: technical reuse XML: semi technical, good for I/O and transforms Visual: semi technical, gives “sense” of system Database: reuse/cms Search viewCategory

14 Top down vs. Bottom up Top down - Domain concepts Bottom up - repeating patterns

15 Generation vs. Synthesis Generation: Saving code files to disk Synthesis: Processing DSL dynamically Compilation vs. Interpretation Late bound decision Why Generate? Language limitations IP protection Performance (proven issue)

16 Adding Custom Code Inheritance AOP Mixins Extension points (observer) Protected Blocks

17 Getting Started Agile approach Not just code Bottom up and top down Systematic process - schedule it in

18 Questions? Blog: www.pbell.comwww.pbell.com Email: peter@pbell.competer@pbell.com Email: peter@pbell.com - Yahoo: freshstartsw - AIM: appgenerationpeter@pbell.com


Download ppt "Software Product Lines Peter Bell CEO/CTO, SystemsForge cf.Objective() 2008 Peter Bell CEO/CTO, SystemsForge cf.Objective() 2008."

Similar presentations


Ads by Google