SlideShare a Scribd company logo
1 of 44
HEAD FIRST
   DSL
• DSL is Everywhere
• DSL Overview
• What is DSL?
• Why Use a DSL?
• DSL and DDD
DSL is Everywhere
2001   2002   2003   2004   2005   2006   2007   2008   2009   2010
DSL Overview
DSL Exec Overview




            http://martinfowler.com/dslwip/ImplementingDsls.html
•
•   2

•
Semantic Model (SM)




              http://martinfowler.com/dslwip/Intro.html
Semantic Model (Class)




                http://martinfowler.com/dslwip/Intro.html
Semantic Model (Java)
class State...
  private String name;
  private List<Command> actions = new ArrayList<Command>();
  private Map<String, Transition> transitions = new HashMap<String, Transition>();

  public void addTransition(Event event, State targetState) {
    transitions.put(event.getCode(), new Transition(this, event, targetState));
  }

class Transition...
  private final State source, target;
  private final Event trigger;

  public Transition(State source, Event trigger, State target) {
    this.source = source;
    this.target = target;
    this.trigger = trigger;
  }
  public State getSource() {return source;}
  public State getTarget() {return target;}
  public Event getTrigger() {return trigger;}
  public String getEventCode() {return trigger.getCode();}
                                                                   http://martinfowler.com/dslwip/Intro.html
Client Code
Event doorClosed = new Event("doorClosed", "D1CL");
Event drawOpened = new Event("drawOpened", "D2OP");
Event lightOn = new Event("lightOn", "L1ON");
Event doorOpened = new Event("doorOpened", "D1OP");
Event panelClosed = new Event("panelClosed", "PNCL");
Command unlockPanelCmd = new Command("unlockPanel", "PNUL");
Command lockPanelCmd = new Command("lockPanel", "PNLK");
Command lockDoorCmd = new Command("lockDoor", "D1LK");
Command unlockDoorCmd = new Command("unlockDoor", "D1UL");

State   idle = new State("idle");
State   activeState = new State("active");
State   waitingForLightState = new State("waitingForLight");
State   waitingForDrawState = new State("waitingForDraw");
State   unlockedPanelState = new State("unlockedPanel");

StateMachine machine = new StateMachine(idle);

idle.addTransition(doorClosed, activeState);
idle.addAction(unlockDoorCmd);


                                                               http://martinfowler.com/dslwip/Intro.html
DSL (XML)
<stateMachine start = "idle">
    <event name="doorClosed" code="D1CL"/>
    <event name="drawOpened" code="D2OP"/>
    <event name="lightOn" code="L1ON"/>
    <event name="doorOpened" code="D1OP"/>
    <event name="panelClosed" code="PNCL"/>

    <command   name="unlockPanel" code="PNUL"/>
    <command   name="lockPanel" code="PNLK"/>
    <command   name="lockDoor" code="D1LK"/>
    <command   name="unlockDoor" code="D1UL"/>

  <state name="idle">
    <transition event="doorClosed" target="active"/>
    <action command="unlockDoor"/>
    <action command="lockPanel"/>
  </state>

  <state name="active">
    <transition event="drawOpened" target="waitingForLight"/>
    <transition event="lightOn" target="waitingForDraw"/>
  </state>

                                                                http://martinfowler.com/dslwip/Intro.html
DSL (Ruby)
event   :doorClosed, "D1CL"
event   :drawOpened, "D2OP"
event   :lightOn, "L1ON"
event   :doorOpened, "D1OP"
event   :panelClosed, "PNCL"

command    :unlockPanel,   "PNUL"
command    :lockPanel,     "PNLK"
command    :lockDoor,      "D1LK"
command    :unlockDoor,    "D1UL"

resetEvents :doorOpened

state :idle do
  actions :unlockDoor, :lockPanel
  transitions :doorClosed => :active
end

state :active do
  transitions :drawOpened => :waitingForLight,
              :lightOn => :waitingForDraw
end
                                                 http://martinfowler.com/dslwip/Intro.html
What is DSL?
3

•   DSL

•   DSL

•
DSL


DSL   (   )
DSL (XML)
<stateMachine start = "idle">
    <event name="doorClosed" code="D1CL"/>
    <event name="drawOpened" code="D2OP"/>
    <event name="lightOn" code="L1ON"/>
    <event name="doorOpened" code="D1OP"/>
    <event name="panelClosed" code="PNCL"/>

    <command   name="unlockPanel" code="PNUL"/>
    <command   name="lockPanel" code="PNLK"/>
    <command   name="lockDoor" code="D1LK"/>
    <command   name="unlockDoor" code="D1UL"/>

  <state name="idle">
    <transition event="doorClosed" target="active"/>
    <action command="unlockDoor"/>
    <action command="lockPanel"/>
  </state>

  <state name="active">
    <transition event="drawOpened" target="waitingForLight"/>
    <transition event="lightOn" target="waitingForDraw"/>
  </state>

                                                                http://martinfowler.com/dslwip/Intro.html
DSL


DSL   (   )
DSL (Ruby)
event   :doorClosed, "D1CL"
event   :drawOpened, "D2OP"
event   :lightOn, "L1ON"
event   :doorOpened, "D1OP"
event   :panelClosed, "PNCL"

command    :unlockPanel,   "PNUL"
command    :lockPanel,     "PNLK"
command    :lockDoor,      "D1LK"
command    :unlockDoor,    "D1UL"

resetEvents :doorOpened

state :idle do
  actions :unlockDoor, :lockPanel
  transitions :doorClosed => :active
end

state :active do
  transitions :drawOpened => :waitingForLight,
              :lightOn => :waitingForDraw
end
                                                 http://martinfowler.com/dslwip/Intro.html
http://martinfowler.com/articles/languageWorkbench.html
http://martinfowler.com/dslwip/Intro.html
DSL
http://www.flickr.com/photos/bobloo17/188697388/
http://www.flickr.com/photos/typedow/516148822/
http://www.flickr.com/photos/ocean_of_stars/3064512601/
http://www.flickr.com/photos/naps/1071881251/
• Active Record
•R
•
Why Use a DSL
Fowler-DSL
http://martinfowler.com/dslwip/Intro.html
DSL
http://www.flickr.com/photos/nicholasngkw/2935730640/
DSL
4
http://www.flickr.com/photos/blackbutterfly/3051019058/
http://www.flickr.com/photos/winton/3915959349/
http://www.flickr.com/photos/argonne/4244642347/
• State Machine
• Dependency Network
• Decision Table
• Production Rule System
DSL
•
•
•
• DSL
•
DSL and DDD
• DSL

• DSL

More Related Content

Similar to HEAD FIRST DSL

Xtext @ Profict Summer Camp
Xtext @ Profict Summer CampXtext @ Profict Summer Camp
Xtext @ Profict Summer CampSven Efftinge
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS DirectivesEyal Vardi
 
Grokking Grok: Monitorama PDX 2015
Grokking Grok: Monitorama PDX 2015Grokking Grok: Monitorama PDX 2015
Grokking Grok: Monitorama PDX 2015GregMefford
 
[AngularJS] From Angular to Mobile in 30 minutes
[AngularJS] From Angular to Mobile in 30 minutes[AngularJS] From Angular to Mobile in 30 minutes
[AngularJS] From Angular to Mobile in 30 minutesGlobant
 
The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016Kacper Gunia
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS ArchitectureEyal Vardi
 
AngularJS Internal
AngularJS InternalAngularJS Internal
AngularJS InternalEyal Vardi
 
The Open Web and what it means
The Open Web and what it meansThe Open Web and what it means
The Open Web and what it meansRobert Nyman
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Fabien Potencier
 
gRPC with Scala and Swift
gRPC with Scala and SwiftgRPC with Scala and Swift
gRPC with Scala and SwiftMarkus Jura
 
Designing for Windows Phone 8
Designing for Windows Phone 8Designing for Windows Phone 8
Designing for Windows Phone 8David Isbitski
 
Hatohol technical-brief-20130830-hbstudy
Hatohol technical-brief-20130830-hbstudyHatohol technical-brief-20130830-hbstudy
Hatohol technical-brief-20130830-hbstudykoedoyoshida
 
网站无障碍阅读知识
网站无障碍阅读知识网站无障碍阅读知识
网站无障碍阅读知识ppanyong
 
网站无障碍阅读知识
网站无障碍阅读知识网站无障碍阅读知识
网站无障碍阅读知识ppanyong
 
Monitoring with Syslog and EventMachine (RailswayConf 2012)
Monitoring  with  Syslog and EventMachine (RailswayConf 2012)Monitoring  with  Syslog and EventMachine (RailswayConf 2012)
Monitoring with Syslog and EventMachine (RailswayConf 2012)Wooga
 
Asynchronous programming patterns in Perl
Asynchronous programming patterns in PerlAsynchronous programming patterns in Perl
Asynchronous programming patterns in Perldeepfountainconsulting
 
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleThierry Wasylczenko
 
Ten useful JavaScript tips & best practices
Ten useful JavaScript tips & best practicesTen useful JavaScript tips & best practices
Ten useful JavaScript tips & best practicesAnkit Rastogi
 

Similar to HEAD FIRST DSL (20)

Xtext @ Profict Summer Camp
Xtext @ Profict Summer CampXtext @ Profict Summer Camp
Xtext @ Profict Summer Camp
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS Directives
 
Grokking Grok: Monitorama PDX 2015
Grokking Grok: Monitorama PDX 2015Grokking Grok: Monitorama PDX 2015
Grokking Grok: Monitorama PDX 2015
 
[AngularJS] From Angular to Mobile in 30 minutes
[AngularJS] From Angular to Mobile in 30 minutes[AngularJS] From Angular to Mobile in 30 minutes
[AngularJS] From Angular to Mobile in 30 minutes
 
The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS Architecture
 
AngularJS Internal
AngularJS InternalAngularJS Internal
AngularJS Internal
 
The Open Web and what it means
The Open Web and what it meansThe Open Web and what it means
The Open Web and what it means
 
Introduction to Node MCU
Introduction to Node MCUIntroduction to Node MCU
Introduction to Node MCU
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)
 
gRPC with Scala and Swift
gRPC with Scala and SwiftgRPC with Scala and Swift
gRPC with Scala and Swift
 
Designing for Windows Phone 8
Designing for Windows Phone 8Designing for Windows Phone 8
Designing for Windows Phone 8
 
Hatohol technical-brief-20130830-hbstudy
Hatohol technical-brief-20130830-hbstudyHatohol technical-brief-20130830-hbstudy
Hatohol technical-brief-20130830-hbstudy
 
网站无障碍阅读知识
网站无障碍阅读知识网站无障碍阅读知识
网站无障碍阅读知识
 
网站无障碍阅读知识
网站无障碍阅读知识网站无障碍阅读知识
网站无障碍阅读知识
 
The IoC Hydra
The IoC HydraThe IoC Hydra
The IoC Hydra
 
Monitoring with Syslog and EventMachine (RailswayConf 2012)
Monitoring  with  Syslog and EventMachine (RailswayConf 2012)Monitoring  with  Syslog and EventMachine (RailswayConf 2012)
Monitoring with Syslog and EventMachine (RailswayConf 2012)
 
Asynchronous programming patterns in Perl
Asynchronous programming patterns in PerlAsynchronous programming patterns in Perl
Asynchronous programming patterns in Perl
 
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
 
Ten useful JavaScript tips & best practices
Ten useful JavaScript tips & best practicesTen useful JavaScript tips & best practices
Ten useful JavaScript tips & best practices
 

Recently uploaded

Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...babafaisel
 
Top Rated Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
Top Rated  Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...Top Rated  Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
Top Rated Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...Call Girls in Nagpur High Profile
 
2-tool presenthdbdbdbdbddhdhddation.pptx
2-tool presenthdbdbdbdbddhdhddation.pptx2-tool presenthdbdbdbdbddhdhddation.pptx
2-tool presenthdbdbdbdbddhdhddation.pptxsuhanimunjal27
 
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Gi...
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Gi...Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Gi...
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Gi...Pooja Nehwal
 
Brookefield Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Brookefield Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Brookefield Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Brookefield Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...amitlee9823
 
Stark Industries Marketing Plan (1).pptx
Stark Industries Marketing Plan (1).pptxStark Industries Marketing Plan (1).pptx
Stark Industries Marketing Plan (1).pptxjeswinjees
 
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun serviceanilsa9823
 
💫✅jodhpur 24×7 BEST GENUINE PERSON LOW PRICE CALL GIRL SERVICE FULL SATISFACT...
💫✅jodhpur 24×7 BEST GENUINE PERSON LOW PRICE CALL GIRL SERVICE FULL SATISFACT...💫✅jodhpur 24×7 BEST GENUINE PERSON LOW PRICE CALL GIRL SERVICE FULL SATISFACT...
💫✅jodhpur 24×7 BEST GENUINE PERSON LOW PRICE CALL GIRL SERVICE FULL SATISFACT...sonalitrivedi431
 
SD_The MATATAG Curriculum Training Design.pptx
SD_The MATATAG Curriculum Training Design.pptxSD_The MATATAG Curriculum Training Design.pptx
SD_The MATATAG Curriculum Training Design.pptxjanettecruzeiro1
 
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)amitlee9823
 
Call Girls Basavanagudi Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
Call Girls Basavanagudi Just Call 👗 7737669865 👗 Top Class Call Girl Service ...Call Girls Basavanagudi Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
Call Girls Basavanagudi Just Call 👗 7737669865 👗 Top Class Call Girl Service ...amitlee9823
 
Booking open Available Pune Call Girls Kirkatwadi 6297143586 Call Hot Indian...
Booking open Available Pune Call Girls Kirkatwadi  6297143586 Call Hot Indian...Booking open Available Pune Call Girls Kirkatwadi  6297143586 Call Hot Indian...
Booking open Available Pune Call Girls Kirkatwadi 6297143586 Call Hot Indian...Call Girls in Nagpur High Profile
 
Government polytechnic college-1.pptxabcd
Government polytechnic college-1.pptxabcdGovernment polytechnic college-1.pptxabcd
Government polytechnic college-1.pptxabcdshivubhavv
 
Jigani Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bangal...
Jigani Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bangal...Jigani Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bangal...
Jigani Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bangal...amitlee9823
 
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779Delhi Call girls
 
Peaches App development presentation deck
Peaches App development presentation deckPeaches App development presentation deck
Peaches App development presentation decktbatkhuu1
 
Top Rated Pune Call Girls Saswad ⟟ 6297143586 ⟟ Call Me For Genuine Sex Serv...
Top Rated  Pune Call Girls Saswad ⟟ 6297143586 ⟟ Call Me For Genuine Sex Serv...Top Rated  Pune Call Girls Saswad ⟟ 6297143586 ⟟ Call Me For Genuine Sex Serv...
Top Rated Pune Call Girls Saswad ⟟ 6297143586 ⟟ Call Me For Genuine Sex Serv...Call Girls in Nagpur High Profile
 
(AISHA) Ambegaon Khurd Call Girls Just Call 7001035870 [ Cash on Delivery ] P...
(AISHA) Ambegaon Khurd Call Girls Just Call 7001035870 [ Cash on Delivery ] P...(AISHA) Ambegaon Khurd Call Girls Just Call 7001035870 [ Cash on Delivery ] P...
(AISHA) Ambegaon Khurd Call Girls Just Call 7001035870 [ Cash on Delivery ] P...ranjana rawat
 

Recently uploaded (20)

Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
 
Top Rated Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
Top Rated  Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...Top Rated  Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
Top Rated Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
 
2-tool presenthdbdbdbdbddhdhddation.pptx
2-tool presenthdbdbdbdbddhdhddation.pptx2-tool presenthdbdbdbdbddhdhddation.pptx
2-tool presenthdbdbdbdbddhdhddation.pptx
 
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Gi...
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Gi...Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Gi...
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Gi...
 
Brookefield Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Brookefield Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Brookefield Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Brookefield Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 
Stark Industries Marketing Plan (1).pptx
Stark Industries Marketing Plan (1).pptxStark Industries Marketing Plan (1).pptx
Stark Industries Marketing Plan (1).pptx
 
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
 
💫✅jodhpur 24×7 BEST GENUINE PERSON LOW PRICE CALL GIRL SERVICE FULL SATISFACT...
💫✅jodhpur 24×7 BEST GENUINE PERSON LOW PRICE CALL GIRL SERVICE FULL SATISFACT...💫✅jodhpur 24×7 BEST GENUINE PERSON LOW PRICE CALL GIRL SERVICE FULL SATISFACT...
💫✅jodhpur 24×7 BEST GENUINE PERSON LOW PRICE CALL GIRL SERVICE FULL SATISFACT...
 
Call Girls Service Mukherjee Nagar @9999965857 Delhi 🫦 No Advance VVIP 🍎 SER...
Call Girls Service Mukherjee Nagar @9999965857 Delhi 🫦 No Advance  VVIP 🍎 SER...Call Girls Service Mukherjee Nagar @9999965857 Delhi 🫦 No Advance  VVIP 🍎 SER...
Call Girls Service Mukherjee Nagar @9999965857 Delhi 🫦 No Advance VVIP 🍎 SER...
 
SD_The MATATAG Curriculum Training Design.pptx
SD_The MATATAG Curriculum Training Design.pptxSD_The MATATAG Curriculum Training Design.pptx
SD_The MATATAG Curriculum Training Design.pptx
 
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
 
Call Girls Basavanagudi Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
Call Girls Basavanagudi Just Call 👗 7737669865 👗 Top Class Call Girl Service ...Call Girls Basavanagudi Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
Call Girls Basavanagudi Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
 
Booking open Available Pune Call Girls Kirkatwadi 6297143586 Call Hot Indian...
Booking open Available Pune Call Girls Kirkatwadi  6297143586 Call Hot Indian...Booking open Available Pune Call Girls Kirkatwadi  6297143586 Call Hot Indian...
Booking open Available Pune Call Girls Kirkatwadi 6297143586 Call Hot Indian...
 
Government polytechnic college-1.pptxabcd
Government polytechnic college-1.pptxabcdGovernment polytechnic college-1.pptxabcd
Government polytechnic college-1.pptxabcd
 
Jigani Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bangal...
Jigani Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bangal...Jigani Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bangal...
Jigani Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bangal...
 
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
 
Peaches App development presentation deck
Peaches App development presentation deckPeaches App development presentation deck
Peaches App development presentation deck
 
young call girls in Vivek Vihar🔝 9953056974 🔝 Delhi escort Service
young call girls in Vivek Vihar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Vivek Vihar🔝 9953056974 🔝 Delhi escort Service
young call girls in Vivek Vihar🔝 9953056974 🔝 Delhi escort Service
 
Top Rated Pune Call Girls Saswad ⟟ 6297143586 ⟟ Call Me For Genuine Sex Serv...
Top Rated  Pune Call Girls Saswad ⟟ 6297143586 ⟟ Call Me For Genuine Sex Serv...Top Rated  Pune Call Girls Saswad ⟟ 6297143586 ⟟ Call Me For Genuine Sex Serv...
Top Rated Pune Call Girls Saswad ⟟ 6297143586 ⟟ Call Me For Genuine Sex Serv...
 
(AISHA) Ambegaon Khurd Call Girls Just Call 7001035870 [ Cash on Delivery ] P...
(AISHA) Ambegaon Khurd Call Girls Just Call 7001035870 [ Cash on Delivery ] P...(AISHA) Ambegaon Khurd Call Girls Just Call 7001035870 [ Cash on Delivery ] P...
(AISHA) Ambegaon Khurd Call Girls Just Call 7001035870 [ Cash on Delivery ] P...
 

HEAD FIRST DSL

  • 2. • DSL is Everywhere • DSL Overview • What is DSL? • Why Use a DSL? • DSL and DDD
  • 4. 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
  • 6. DSL Exec Overview http://martinfowler.com/dslwip/ImplementingDsls.html
  • 7. • • 2 •
  • 8. Semantic Model (SM) http://martinfowler.com/dslwip/Intro.html
  • 9. Semantic Model (Class) http://martinfowler.com/dslwip/Intro.html
  • 10. Semantic Model (Java) class State... private String name; private List<Command> actions = new ArrayList<Command>(); private Map<String, Transition> transitions = new HashMap<String, Transition>(); public void addTransition(Event event, State targetState) { transitions.put(event.getCode(), new Transition(this, event, targetState)); } class Transition... private final State source, target; private final Event trigger; public Transition(State source, Event trigger, State target) { this.source = source; this.target = target; this.trigger = trigger; } public State getSource() {return source;} public State getTarget() {return target;} public Event getTrigger() {return trigger;} public String getEventCode() {return trigger.getCode();} http://martinfowler.com/dslwip/Intro.html
  • 11. Client Code Event doorClosed = new Event("doorClosed", "D1CL"); Event drawOpened = new Event("drawOpened", "D2OP"); Event lightOn = new Event("lightOn", "L1ON"); Event doorOpened = new Event("doorOpened", "D1OP"); Event panelClosed = new Event("panelClosed", "PNCL"); Command unlockPanelCmd = new Command("unlockPanel", "PNUL"); Command lockPanelCmd = new Command("lockPanel", "PNLK"); Command lockDoorCmd = new Command("lockDoor", "D1LK"); Command unlockDoorCmd = new Command("unlockDoor", "D1UL"); State idle = new State("idle"); State activeState = new State("active"); State waitingForLightState = new State("waitingForLight"); State waitingForDrawState = new State("waitingForDraw"); State unlockedPanelState = new State("unlockedPanel"); StateMachine machine = new StateMachine(idle); idle.addTransition(doorClosed, activeState); idle.addAction(unlockDoorCmd); http://martinfowler.com/dslwip/Intro.html
  • 12. DSL (XML) <stateMachine start = "idle"> <event name="doorClosed" code="D1CL"/> <event name="drawOpened" code="D2OP"/> <event name="lightOn" code="L1ON"/> <event name="doorOpened" code="D1OP"/> <event name="panelClosed" code="PNCL"/> <command name="unlockPanel" code="PNUL"/> <command name="lockPanel" code="PNLK"/> <command name="lockDoor" code="D1LK"/> <command name="unlockDoor" code="D1UL"/> <state name="idle"> <transition event="doorClosed" target="active"/> <action command="unlockDoor"/> <action command="lockPanel"/> </state> <state name="active"> <transition event="drawOpened" target="waitingForLight"/> <transition event="lightOn" target="waitingForDraw"/> </state> http://martinfowler.com/dslwip/Intro.html
  • 13. DSL (Ruby) event :doorClosed, "D1CL" event :drawOpened, "D2OP" event :lightOn, "L1ON" event :doorOpened, "D1OP" event :panelClosed, "PNCL" command :unlockPanel, "PNUL" command :lockPanel, "PNLK" command :lockDoor, "D1LK" command :unlockDoor, "D1UL" resetEvents :doorOpened state :idle do actions :unlockDoor, :lockPanel transitions :doorClosed => :active end state :active do transitions :drawOpened => :waitingForLight, :lightOn => :waitingForDraw end http://martinfowler.com/dslwip/Intro.html
  • 15. 3 • DSL • DSL •
  • 16. DSL DSL ( )
  • 17. DSL (XML) <stateMachine start = "idle"> <event name="doorClosed" code="D1CL"/> <event name="drawOpened" code="D2OP"/> <event name="lightOn" code="L1ON"/> <event name="doorOpened" code="D1OP"/> <event name="panelClosed" code="PNCL"/> <command name="unlockPanel" code="PNUL"/> <command name="lockPanel" code="PNLK"/> <command name="lockDoor" code="D1LK"/> <command name="unlockDoor" code="D1UL"/> <state name="idle"> <transition event="doorClosed" target="active"/> <action command="unlockDoor"/> <action command="lockPanel"/> </state> <state name="active"> <transition event="drawOpened" target="waitingForLight"/> <transition event="lightOn" target="waitingForDraw"/> </state> http://martinfowler.com/dslwip/Intro.html
  • 18. DSL DSL ( )
  • 19. DSL (Ruby) event :doorClosed, "D1CL" event :drawOpened, "D2OP" event :lightOn, "L1ON" event :doorOpened, "D1OP" event :panelClosed, "PNCL" command :unlockPanel, "PNUL" command :lockPanel, "PNLK" command :lockDoor, "D1LK" command :unlockDoor, "D1UL" resetEvents :doorOpened state :idle do actions :unlockDoor, :lockPanel transitions :doorClosed => :active end state :active do transitions :drawOpened => :waitingForLight, :lightOn => :waitingForDraw end http://martinfowler.com/dslwip/Intro.html
  • 22. DSL
  • 28. Why Use a DSL
  • 31. DSL
  • 33. DSL
  • 34. 4
  • 36.
  • 39. • State Machine • Dependency Network • Decision Table • Production Rule System
  • 42.
  • 43.

Editor's Notes

  1. &amp;#x57FA;&amp;#x672C;OO&amp;#x3067;&amp;#x8003;&amp;#x3048;&amp;#x3066;&amp;#x3044;&amp;#x308B; Semantic Model&amp;#x306B;&amp;#x632F;&amp;#x308B;&amp;#x821E;&amp;#x3044;&amp;#x306F;&amp;#x57CB;&amp;#x3081;&amp;#x8FBC;&amp;#x307E;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;
  2. &amp;#x30DB;&amp;#x30B9;&amp;#x30C8;&amp;#x8A00;&amp;#x8A9E;&amp;#x306E;&amp;#x5916;&amp;#x90E8;&amp;#x3067;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3059;&amp;#x308B;DSL XML&amp;#x5B9A;&amp;#x7FA9;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x3068;&amp;#x304B;&amp;#x72EC;&amp;#x81EA;&amp;#x8A00;&amp;#x8A9E;&amp;#x3068;&amp;#x304B;
  3. &amp;#x30DB;&amp;#x30B9;&amp;#x30C8;&amp;#x8A00;&amp;#x8A9E;&amp;#x5185;&amp;#x3067;&amp;#x8868;&amp;#x73FE;&amp;#x3059;&amp;#x308B;DSL Rails&amp;#xFF0F;S2JDBC
  4. &amp;#x610F;&amp;#x5473;&amp;#x8AD6;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x30B9;&amp;#x30AD;&amp;#x30FC;&amp;#x30DE;&amp;#x5B9A;&amp;#x7FA9; DSL&amp;#x30A8;&amp;#x30C7;&amp;#x30A3;&amp;#x30BF; &amp;#x30BD;&amp;#x30FC;&amp;#x30B9;&amp;#xFF0F;&amp;#x30C0;&amp;#x30A4;&amp;#x30A2;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0; &amp;#x610F;&amp;#x5473;&amp;#x8AD6;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x306E;&amp;#x632F;&amp;#x308B;&amp;#x821E;&amp;#x3044;&amp;#x3001;&amp;#x5178;&amp;#x578B;&amp;#x7684;&amp;#x306B;&amp;#x306F;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x30B8;&amp;#x30A7;&amp;#x30CD;&amp;#x30EC;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;
  5. &amp;#x30B3;&amp;#x30F3;&amp;#x30D4;&amp;#x30E5;&amp;#x30FC;&amp;#x30BF;&amp;#x306B;&amp;#x4F55;&amp;#x304B;&amp;#x3092;&amp;#x3055;&amp;#x305B;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x8A00;&amp;#x8A9E;&amp;#x3067;&amp;#x3042;&amp;#x308B; &amp;#x30B9;&amp;#x30BF;&amp;#x30D0;&amp;#x306E;&amp;#x8A00;&amp;#x8449;&amp;#x3068;&amp;#x304B;&amp;#x306F;&amp;#x9055;&amp;#x3046;&amp;#x3063;&amp;#x3066;&amp;#x3053;&amp;#x3068;
  6. &amp;#x500B;&amp;#x3005;&amp;#x306E;&amp;#x8868;&amp;#x73FE;&amp;#x304C;&amp;#x72EC;&amp;#x7ACB;&amp;#x3057;&amp;#x305F;&amp;#x610F;&amp;#x5473;&amp;#x3092;&amp;#x6301;&amp;#x3064;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x3044; &amp;#x500B;&amp;#x3005;&amp;#x306E;&amp;#x8868;&amp;#x73FE;&amp;#x306E;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x767A;&amp;#x751F;&amp;#x3059;&amp;#x308B;&amp;#x8868;&amp;#x73FE;&amp;#x529B;&amp;#x304C;&amp;#x3042;&amp;#x308B; &amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x304C;&amp;#x3082;&amp;#x305F;&amp;#x3089;&amp;#x3059;&amp;#x3001;&amp;#x3042;&amp;#x308B;&amp;#x7A2E;&amp;#x306E;&amp;#x6D41;&amp;#x66A2;&amp;#x3055;&amp;#x304C;&amp;#x3042;&amp;#x308B;
  7. &amp;#x6C4E;&amp;#x7528;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x8A00;&amp;#x8A9E;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x3044;&amp;#x3002;GPL&amp;#x306F;&amp;#x8907;&amp;#x96D1;&amp;#x3067;&amp;#x5B66;&amp;#x3076;&amp;#x306E;&amp;#x304C;&amp;#x5927;&amp;#x5909;&amp;#x3002; &amp;#x7279;&amp;#x5B9A;&amp;#x306E;&amp;#x30C9;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x3092;&amp;#x30B5;&amp;#x30DD;&amp;#x30FC;&amp;#x30C8;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x6700;&amp;#x5C0F;&amp;#x30BB;&amp;#x30C3;&amp;#x30C8;&amp;#x306E;&amp;#x6A5F;&amp;#x80FD;&amp;#x3092;&amp;#x6301;&amp;#x3064;&amp;#x3002;
  8. &amp;#x7279;&amp;#x5B9A;&amp;#x306E;&amp;#x9818;&amp;#x57DF;&amp;#x3067;&amp;#x3057;&amp;#x304B;&amp;#x5F79;&amp;#x306B;&amp;#x7ACB;&amp;#x305F;&amp;#x306A;&amp;#x3044;&amp;#x3002;&amp;#x3055;&amp;#x3063;&amp;#x304D;&amp;#x306E;&amp;#x8A71;&amp;#x3068;&amp;#x3042;&amp;#x308B;&amp;#x7A0B;&amp;#x5EA6;&amp;#x304B;&amp;#x3076;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3002;
  9. R&amp;#x306F;&amp;#x7D71;&amp;#x8A08;&amp;#x5411;&amp;#x3051;&amp;#x3060;&amp;#x304C;&amp;#x3001;&amp;#x6C4E;&amp;#x7528;&amp;#x8A00;&amp;#x8A9E;&amp;#x3068;&amp;#x540C;&amp;#x7B49;&amp;#x306E;&amp;#x80FD;&amp;#x529B;&amp;#x3092;&amp;#x6301;&amp;#x3064;&amp;#x3002;DSL&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x3044;
  10. &amp;#x30B9;&amp;#x30AF;&amp;#x30EA;&amp;#x30D7;&amp;#x30C8;&amp;#x3092;&amp;#x5909;&amp;#x66F4;&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x8A08;&amp;#x7B97;&amp;#x304C;&amp;#x52D5;&amp;#x7684;&amp;#x306B;&amp;#xFF08;&amp;#x5927;&amp;#x5E45;&amp;#x306B;&amp;#xFF09;&amp;#x5909;&amp;#x66F4;&amp;#x53EF;&amp;#x80FD; &amp;#xFF1D; Adaptive Model &amp;#x65B0;&amp;#x3057;&amp;#x3044;&amp;#x9867;&amp;#x5BA2;&amp;#x5411;&amp;#x3051;&amp;#x306E;&amp;#x30B9;&amp;#x30C6;&amp;#x30FC;&amp;#x30C8;&amp;#x30DE;&amp;#x30B7;&amp;#x30F3;&amp;#x3092;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x4F5C;&amp;#x308C;&amp;#x308B;&amp;#x3001;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30A4;&amp;#x30EB;&amp;#x6642;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x5B9F;&amp;#x884C;&amp;#x6642;&amp;#x306B;&amp;#x30B3;&amp;#x30F3;&amp;#x30C8;&amp;#x30ED;&amp;#x30FC;&amp;#x30E9;&amp;#x3092;&amp;#x5909;&amp;#x66F4;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3001;&amp;#x30B3;&amp;#x30F3;&amp;#x30C8;&amp;#x30ED;&amp;#x30FC;&amp;#x30E9;&amp;#x306E;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x518D;&amp;#x5229;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x2026;
  11. DSL&amp;#x304C;&amp;#x3082;&amp;#x305F;&amp;#x3089;&amp;#x3059;&amp;#x3068;&amp;#x601D;&amp;#x308F;&amp;#x308C;&amp;#x308B;&amp;#x5229;&amp;#x76CA;&amp;#x306E;&amp;#x591A;&amp;#x304F;&amp;#x306F;&amp;#x3001;&amp;#x5B9F;&amp;#x969B;&amp;#x306E;&amp;#x3068;&amp;#x3053;&amp;#x308D;&amp;#x306F;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x306B;&amp;#x3088;&amp;#x308B;&amp;#x3082;&amp;#x306E; DSL&amp;#x306F;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x304C;&amp;#x3082;&amp;#x305F;&amp;#x3089;&amp;#x3059;&amp;#x5229;&amp;#x76CA;&amp;#x3092;&amp;#x9AD8;&amp;#x3081;&amp;#x308B;&amp;#x306B;&amp;#x3059;&amp;#x304E;&amp;#x306A;&amp;#x3044;
  12. &amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x3082;&amp;#x7D50;&amp;#x69CB;&amp;#x3044;&amp;#x304F;&amp;#x304C;&amp;#x3001;DSL&amp;#x306F;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#x8AAD;&amp;#x307F;&amp;#x3001;&amp;#x6271;&amp;#x3046;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x3088;&amp;#x308A;&amp;#x826F;&amp;#x3044;&amp;#x65B9;&amp;#x6CD5;&amp;#x3092;&amp;#x4E0E;&amp;#x3048;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3053;&amp;#x308C;&amp;#x3092;&amp;#x9AD8;&amp;#x3081;&amp;#x308B; Command-Query API&amp;#x306B;&amp;#x3088;&amp;#x308B;&amp;#x7D44;&amp;#x307F;&amp;#x7ACB;&amp;#x3066;&amp;#x3088;&amp;#x308A;&amp;#x3082;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x3084;&amp;#x3059;&amp;#x3044;
  13. DE&amp;#x306F;&amp;#x66F8;&amp;#x3051;&amp;#x306F;&amp;#x3057;&amp;#x306A;&amp;#x3044;&amp;#x3001;&amp;#x3067;&amp;#x3082;&amp;#x8AAD;&amp;#x3080;&amp;#x306E;&amp;#x306F;&amp;#x3084;&amp;#x308A;&amp;#x3084;&amp;#x3059;&amp;#x304F;&amp;#x306A;&amp;#x308B; Decision Table&amp;#x3068;&amp;#x304B;State Machine&amp;#x3068;&amp;#x304B;&amp;#x306F;&amp;#x3042;&amp;#x308B;&amp;#x7A0B;&amp;#x5EA6;&amp;#x305D;&amp;#x3046;&amp;#x304B;&amp;#x3082;&amp;#x306D; &amp;#x3057;&amp;#x304B;&amp;#x3057;&amp;#x3001;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x3082;&amp;#x4E3B;&amp;#x5F79;&amp;#x306F;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3060;&amp;#x3088;
  14. &amp;#x30E9;&amp;#x30F3;&amp;#x30BF;&amp;#x30A4;&amp;#x30E0;&amp;#x306B;&amp;#x30D0;&amp;#x30A4;&amp;#x30F3;&amp;#x30C9;&amp;#x3067;&amp;#x304D;&amp;#x308B; &amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#x4ECB;&amp;#x3057;&amp;#x3066;&amp;#x5B9F;&amp;#x884C;&amp;#x74B0;&amp;#x5883;&amp;#x3092;&amp;#x5909;&amp;#x66F4;&amp;#x3067;&amp;#x304D;&amp;#x308B; &amp;#x7279;&amp;#x5B9A;&amp;#x306E;&amp;#x5951;&amp;#x7D04;&amp;#x3092;&amp;#x30C1;&amp;#x30A7;&amp;#x30C3;&amp;#x30AF;&amp;#x3057;&amp;#x3001;&amp;#x30BF;&amp;#x30B0;&amp;#x3065;&amp;#x3051;&amp;#x3059;&amp;#x308B;DSL =&gt; SQL&amp;#x3078; &amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x304C;&amp;#x3053;&amp;#x3046;&amp;#x3057;&amp;#x305F;&amp;#x3053;&amp;#x3068;&amp;#x3092;&amp;#x4FC3;&amp;#x9032;&amp;#x3059;&amp;#x308B;
  15. &amp;#x3042;&amp;#x308B;&amp;#x7A2E;&amp;#x306E;&amp;#x554F;&amp;#x984C;&amp;#x306F;&amp;#x3001;&amp;#x624B;&amp;#x7D9A;&amp;#x304D;&amp;#x3058;&amp;#x3083;&amp;#x306A;&amp;#x3044;&amp;#x65B9;&amp;#x304C;&amp;#x3046;&amp;#x307E;&amp;#x304F;&amp;#x6271;&amp;#x3048;&amp;#x308B; Ant&amp;#x3068;&amp;#x304B;DecisionTable&amp;#x3068;&amp;#x304B; &amp;#x3053;&amp;#x306E;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x306F;&amp;#x3001;&amp;#x5225;&amp;#x306E;&amp;#x8A08;&amp;#x7B97;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#x30B5;&amp;#x30DD;&amp;#x30FC;&amp;#x30C8;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#x4F5C;&amp;#x308B;&amp;#x306E;&amp;#x304C;&amp;#x3044;&amp;#x3044; DSL&amp;#x306F;&amp;#x3053;&amp;#x306E;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#x76F4;&amp;#x63A5;&amp;#x7684;&amp;#x306B;&amp;#x3001;&amp;#x305D;&amp;#x306E;&amp;#x8A08;&amp;#x7B97;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#x3046;&amp;#x307E;&amp;#x304F;&amp;#x6271;&amp;#x3048;&amp;#x308B;&amp;#x5F62;&amp;#x3067;&amp;#x8A18;&amp;#x8FF0;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3092;&amp;#x53EF;&amp;#x80FD;&amp;#x306B;&amp;#x3059;&amp;#x308B;
  16. &amp;#x672C;&amp;#x6D41;&amp;#x306F;&amp;#x3001;Imperative
  17. DSL&amp;#x304C;&amp;#x3069;&amp;#x3046;&amp;#x3044;&amp;#x3046;&amp;#x3082;&amp;#x306E;&amp;#x304B;&amp;#x5B66;&amp;#x3076;&amp;#x5FC5;&amp;#x8981;&amp;#x3042;&amp;#x308A; &amp;#x8A00;&amp;#x8A9E;&amp;#x8A2D;&amp;#x8A08;&amp;#x3068;&amp;#x304B;&amp;#x3061;&amp;#x3087;&amp;#x3063;&amp;#x3068;&amp;#x96E3;&amp;#x5EA6;&amp;#x9AD8;&amp;#x3044; &amp;#x4F5C;&amp;#x3063;&amp;#x305F;DSL&amp;#x3092;&amp;#x4F7F;&amp;#x3046;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x306F;&amp;#x305D;&amp;#x308C;&amp;#x3092;&amp;#x5B66;&amp;#x3076;&amp;#x5FC5;&amp;#x8981;&amp;#x304C; &amp;#x3042;&amp;#x308B;&amp;#x7A0B;&amp;#x5EA6;&amp;#x6210;&amp;#x719F;&amp;#x3057;&amp;#x305F;&amp;#x30A8;&amp;#x30EA;&amp;#x30A2;&amp;#x306A;&amp;#x3089;&amp;#x2026;
  18. &amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x306E;&amp;#x8868;&amp;#x73FE;&amp;#x529B;&amp;#x306F;&amp;#x975E;&amp;#x5E38;&amp;#x306B;&amp;#x9AD8;&amp;#x304F;&amp;#x306A;&amp;#x308A;&amp;#x3001;&amp;#x30E6;&amp;#x30D3;&amp;#x30AD;&amp;#x30BF;&amp;#x30B9;&amp;#x8A00;&amp;#x8A9E;&amp;#x3068;&amp;#x306E;&amp;#x7D50;&amp;#x3073;&amp;#x3064;&amp;#x304D;&amp;#x3082;&amp;#x5F37;&amp;#x304F;&amp;#x306A;&amp;#x308B;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x975E;&amp;#x5E38;&amp;#x306B;&amp;#x9B45;&amp;#x529B;&amp;#x7684;&amp;#x306A;&amp;#x30A2;&amp;#x30D7;&amp;#x30ED;&amp;#x30FC;&amp;#x30C1;&amp;#x3002;&amp;#x3060;&amp;#x304C;&amp;#x3001;&amp;#x8A00;&amp;#x8A9E;&amp;#x3092;&amp;#x5225;&amp;#x306B;&amp;#x6301;&amp;#x3064;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x306E;&amp;#x6BB5;&amp;#x968E;&amp;#x7684;&amp;#x306A;&amp;#x6D17;&amp;#x7DF4;&amp;#x304C;&amp;#x96E3;&amp;#x3057;&amp;#x304F;&amp;#x306A;&amp;#x308B;&amp;#x3002;&amp;#x73FE;&amp;#x72B6;&amp;#x3067;&amp;#x306F;&amp;#x30EA;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30BF;&amp;#x30EA;&amp;#x30F3;&amp;#x30B0;&amp;#x3082;&amp;#x56F0;&amp;#x96E3;&amp;#x306B;&amp;#x3002;&amp;#x6210;&amp;#x719F;&amp;#x3057;&amp;#x305F;&amp;#x30A8;&amp;#x30EA;&amp;#x30A2;&amp;#x306A;&amp;#x3089;&amp;#x3044;&amp;#x3044;&amp;#x304B;&amp;#x3082;&amp;#x3057;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x304C;&amp;#x3001;&amp;#x30B9;&amp;#x30AD;&amp;#x30EB;&amp;#x306E;&amp;#x9AD8;&amp;#x3044;&amp;#x8A00;&amp;#x8A9E;&amp;#x8A2D;&amp;#x8A08;&amp;#x8005;&amp;#x3068;&amp;#x30B9;&amp;#x30AD;&amp;#x30EB;&amp;#x306E;&amp;#x4F4E;&amp;#x3044;&amp;#x5229;&amp;#x7528;&amp;#x8005;&amp;#x3001;&amp;#x3068;&amp;#x308F;&amp;#x304B;&amp;#x308C;&amp;#x304C;&amp;#x3061;&amp;#x3002;
  19. COHESIVE MECHANISMS&amp;#x3084;GENERIC SUBDOMAIN&amp;#x306A;&amp;#x3089;&amp;#x3044;&amp;#x3051;&amp;#x305D;&amp;#x3046;&amp;#x3002; &amp;#x30C9;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x3001;&amp;#x7279;&amp;#x306B;&amp;#x30B3;&amp;#x30A2;&amp;#x306B;&amp;#x8FD1;&amp;#x3044;&amp;#x3068;&amp;#x3053;&amp;#x308D;&amp;#x306F;&amp;#x5E38;&amp;#x306B;&amp;#x5B66;&amp;#x7FD2;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5411;&amp;#x3044;&amp;#x3066;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3046; &amp;#x30D5;&amp;#x30A1;&amp;#x30A6;&amp;#x30E9;&amp;#x30FC;&amp;#x306E;&amp;#x30E1;&amp;#x30C3;&amp;#x30BB;&amp;#x30FC;&amp;#x30B8;&amp;#x3068;&amp;#x540C;&amp;#x3058;&amp;#x304F;&amp;#x3001;&amp;#x91CD;&amp;#x8981;&amp;#x306A;&amp;#x306E;&amp;#x306F;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3067;&amp;#x3042;&amp;#x3063;&amp;#x3066;DSL&amp;#x306F;&amp;#x4E8C;&amp;#x306E;&amp;#x6B21;