SlideShare una empresa de Scribd logo
1 de 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

Más contenido relacionado

Similar a 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 a 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
 

Último

Call Girls In Ratnagiri Escorts ☎️8617370543 🔝 💃 Enjoy 24/7 Escort Service En...
Call Girls In Ratnagiri Escorts ☎️8617370543 🔝 💃 Enjoy 24/7 Escort Service En...Call Girls In Ratnagiri Escorts ☎️8617370543 🔝 💃 Enjoy 24/7 Escort Service En...
Call Girls In Ratnagiri Escorts ☎️8617370543 🔝 💃 Enjoy 24/7 Escort Service En...Nitya salvi
 
Furniture & Joinery Details_Designs.pptx
Furniture & Joinery Details_Designs.pptxFurniture & Joinery Details_Designs.pptx
Furniture & Joinery Details_Designs.pptxNikhil Raut
 
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...gajnagarg
 
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...gajnagarg
 
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...gajnagarg
 
一比一定(购)卡尔顿大学毕业证(CU毕业证)成绩单学位证
一比一定(购)卡尔顿大学毕业证(CU毕业证)成绩单学位证一比一定(购)卡尔顿大学毕业证(CU毕业证)成绩单学位证
一比一定(购)卡尔顿大学毕业证(CU毕业证)成绩单学位证wpkuukw
 
Simple Conference Style Presentation by Slidesgo.pptx
Simple Conference Style Presentation by Slidesgo.pptxSimple Conference Style Presentation by Slidesgo.pptx
Simple Conference Style Presentation by Slidesgo.pptxbalqisyamutia
 
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...nirzagarg
 
Design-System - FinTech - Isadora Agency
Design-System - FinTech - Isadora AgencyDesign-System - FinTech - Isadora Agency
Design-System - FinTech - Isadora AgencyIsadora Agency
 
一比一定(购)滑铁卢大学毕业证(UW毕业证)成绩单学位证
一比一定(购)滑铁卢大学毕业证(UW毕业证)成绩单学位证一比一定(购)滑铁卢大学毕业证(UW毕业证)成绩单学位证
一比一定(购)滑铁卢大学毕业证(UW毕业证)成绩单学位证wpkuukw
 
一比一定(购)西悉尼大学毕业证(WSU毕业证)成绩单学位证
一比一定(购)西悉尼大学毕业证(WSU毕业证)成绩单学位证一比一定(购)西悉尼大学毕业证(WSU毕业证)成绩单学位证
一比一定(购)西悉尼大学毕业证(WSU毕业证)成绩单学位证eqaqen
 
Q4-W4-SCIENCE-5 power point presentation
Q4-W4-SCIENCE-5 power point presentationQ4-W4-SCIENCE-5 power point presentation
Q4-W4-SCIENCE-5 power point presentationZenSeloveres
 
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样yhavx
 
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...samsungultra782445
 
Resume all my skills and educations and achievement
Resume all my skills and educations and  achievement Resume all my skills and educations and  achievement
Resume all my skills and educations and achievement 210303105569
 
NO1 Top Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakist...
NO1 Top Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakist...NO1 Top Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakist...
NO1 Top Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakist...Amil baba
 
TRose UXPA Experience Design Concord .pptx
TRose UXPA Experience Design Concord .pptxTRose UXPA Experience Design Concord .pptx
TRose UXPA Experience Design Concord .pptxtrose8
 
Call Girls Jalaun Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Jalaun Just Call 8617370543 Top Class Call Girl Service AvailableCall Girls Jalaun Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Jalaun Just Call 8617370543 Top Class Call Girl Service AvailableNitya salvi
 
Jordan_Amanda_DMBS202404_PB1_2024-04.pdf
Jordan_Amanda_DMBS202404_PB1_2024-04.pdfJordan_Amanda_DMBS202404_PB1_2024-04.pdf
Jordan_Amanda_DMBS202404_PB1_2024-04.pdfamanda2495
 

Último (20)

Call Girls In Ratnagiri Escorts ☎️8617370543 🔝 💃 Enjoy 24/7 Escort Service En...
Call Girls In Ratnagiri Escorts ☎️8617370543 🔝 💃 Enjoy 24/7 Escort Service En...Call Girls In Ratnagiri Escorts ☎️8617370543 🔝 💃 Enjoy 24/7 Escort Service En...
Call Girls In Ratnagiri Escorts ☎️8617370543 🔝 💃 Enjoy 24/7 Escort Service En...
 
Furniture & Joinery Details_Designs.pptx
Furniture & Joinery Details_Designs.pptxFurniture & Joinery Details_Designs.pptx
Furniture & Joinery Details_Designs.pptx
 
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
 
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
 
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
 
一比一定(购)卡尔顿大学毕业证(CU毕业证)成绩单学位证
一比一定(购)卡尔顿大学毕业证(CU毕业证)成绩单学位证一比一定(购)卡尔顿大学毕业证(CU毕业证)成绩单学位证
一比一定(购)卡尔顿大学毕业证(CU毕业证)成绩单学位证
 
Simple Conference Style Presentation by Slidesgo.pptx
Simple Conference Style Presentation by Slidesgo.pptxSimple Conference Style Presentation by Slidesgo.pptx
Simple Conference Style Presentation by Slidesgo.pptx
 
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
 
Design-System - FinTech - Isadora Agency
Design-System - FinTech - Isadora AgencyDesign-System - FinTech - Isadora Agency
Design-System - FinTech - Isadora Agency
 
Hackathon evaluation template_latest_uploadpdf
Hackathon evaluation template_latest_uploadpdfHackathon evaluation template_latest_uploadpdf
Hackathon evaluation template_latest_uploadpdf
 
一比一定(购)滑铁卢大学毕业证(UW毕业证)成绩单学位证
一比一定(购)滑铁卢大学毕业证(UW毕业证)成绩单学位证一比一定(购)滑铁卢大学毕业证(UW毕业证)成绩单学位证
一比一定(购)滑铁卢大学毕业证(UW毕业证)成绩单学位证
 
一比一定(购)西悉尼大学毕业证(WSU毕业证)成绩单学位证
一比一定(购)西悉尼大学毕业证(WSU毕业证)成绩单学位证一比一定(购)西悉尼大学毕业证(WSU毕业证)成绩单学位证
一比一定(购)西悉尼大学毕业证(WSU毕业证)成绩单学位证
 
Q4-W4-SCIENCE-5 power point presentation
Q4-W4-SCIENCE-5 power point presentationQ4-W4-SCIENCE-5 power point presentation
Q4-W4-SCIENCE-5 power point presentation
 
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
 
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
 
Resume all my skills and educations and achievement
Resume all my skills and educations and  achievement Resume all my skills and educations and  achievement
Resume all my skills and educations and achievement
 
NO1 Top Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakist...
NO1 Top Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakist...NO1 Top Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakist...
NO1 Top Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakist...
 
TRose UXPA Experience Design Concord .pptx
TRose UXPA Experience Design Concord .pptxTRose UXPA Experience Design Concord .pptx
TRose UXPA Experience Design Concord .pptx
 
Call Girls Jalaun Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Jalaun Just Call 8617370543 Top Class Call Girl Service AvailableCall Girls Jalaun Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Jalaun Just Call 8617370543 Top Class Call Girl Service Available
 
Jordan_Amanda_DMBS202404_PB1_2024-04.pdf
Jordan_Amanda_DMBS202404_PB1_2024-04.pdfJordan_Amanda_DMBS202404_PB1_2024-04.pdf
Jordan_Amanda_DMBS202404_PB1_2024-04.pdf
 

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.

Notas del editor

  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;