Download presentation
Presentation is loading. Please wait.
Published byVincent Welch Modified over 9 years ago
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.