рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдорд╢реАрдиреЗрдВ


"рдореБрдЭреЗ рд╕реНрдкреЗрдЧреЗрдЯреА рдкрд╢реНрдЪрд┐рдореА рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ, рдореИрдВ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ"

"рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб" рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рдФрд░ рд╕реМрдВрджрд░реНрдп рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рд╕реЗ рдПрдХ рд╕реНрдЯреАрдорд┐рдВрдЧ рдЕрд░рд╛рдЬрдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди-рдмрд┐рдВрджреБ рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛:

  • рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдЗрддрдирд╛ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред
  • рдХреЛрдб рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░рддрд╛ рд╣реИ рдкрд░ рдПрдХ рдирдпрд╛ рд░реВрдк рдХрд╛ рдкрд░рд┐рдЪрдпред
  • рд╣рдо рдлрд╝реНрд░реЗрдо рдорд╢реАрди рдиреЛрдЯреЗрд╢рди (FMN) рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреЗрд╕реНрдЯ рдХреА рдПрдХ рдЧреЗрдВрдж рдХреЛ рдЦреЛрд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдХрдард┐рди рд╣реИ рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ ... "рд░рдЪрдирд╛рддреНрдордХ"ред рдЕрдХреНрд╕рд░ рдпреЗ рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд╛рде рд╕реЗ рдЪрд▓реА рдЬрд╛рддреА рд╣реИрдВред

рдЪреБрдиреМрддрд┐рдпрд╛рдВ рдХрдард┐рди рдХрд╛рд░реНрдп рд╣реИрдВ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рдЦреЛрдЬ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕рдВрд░рдЪрдирд╛ рд╕реНрд╡рдпрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддреА рд╣реИ, рдФрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ ред

рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдХреА рдХреБрд░реВрдкрддрд╛ рдЗрд╕рдХреЗ рдЬрдЯрд┐рд▓ рд╕рд╢рд░реНрдд рддрд░реНрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рдХрдИ рдореБрд╢реНрдХрд┐рд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЬреАрд╡рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░-рдлрд┐рд░-рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдПрдЧрд╛ред


рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:


рдЦрд╕реНрддрд╛ рдкрд╛рд╕реНрддрд╛

рдЗрд╕рдореЗрдВ:


рдЕрд▓ рджрд╛рдВрддреЗ!

рдЪрд▓реЛ рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЕрд╡рд╕реНрдерд╛


рдкрд╛рд╕реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рд╕реЗ рдЬреБрдбрд╝реЗ рдРрд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рд▓ рддрддреНрд╡ рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

(temp < 32) 

рдпрд╣ рдЬрд╛рдБрдЪ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рд░реЗрдЦрд╛ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рднрд╛рдЧреЛрдВ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдзрд╛рд░рдгрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд╡рд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╣ рдЬрд╛рдБрдЪрддреА рд╣реИ рдХрд┐ рдкрд╛рдиреА рд╕реЛрд▓рд┐рдб рд╣реИ рдпрд╛ рдирд╣реАрдВред рд▓реЗрди: рдлрд╝рд╛рд░реЗрдирд╣рд╛рдЗрдЯ рдкреИрдорд╛рдиреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкрд╛рдиреА +32 рдбрд┐рдЧреНрд░реА рдкрд░ рдЬрдо рдЬрд╛рддрд╛ рд╣реИ] , рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕реА рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛?

 if (temp < 32) { // SOLID water } else { // not SOLID water. is (LIQUID | GAS) } 

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЪреЗрдХ рдиреЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреАрди рддрд╛рд░реНрдХрд┐рдХ рдЕрд╡рд╕реНрдерд╛рдПрдБ рд╣реИрдВ - рдареЛрд╕, рддрд░рд▓ рдФрд░ рдЧреИрд╕ (SOLID, LIQUID, GAS)!

рдЕрд░реНрдерд╛рддреН, рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рд░реЗрдЦрд╛:


рд╣рд╛рд▓рдд рдХреА рдЬрд╛рдВрдЪ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ:

 if (temp < 32) { 


 } else { 


 } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдПрдХ рдмреВрд▓рд┐рдпрди рдЪреЗрдХ рдиреЗ рд╕рдВрдЦреНрдпрд╛ рд╕реНрдерд╛рди рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрд░рдЪрдирд╛ (SOLID, LIQUID, GAS) рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЪреЗрдХ рдиреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ (SOLID, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ред

рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╛рди рдЬрд╛рдБрдЪ рд╣реИ:

 if (temp > 212) { // GAS water } else { // not GAS water. is (SOLID | LIQUID) } 

рдиреЗрддреНрд░рд╣реАрди, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 if (temp > 212) { 


 } else { 


 } 

рдзреНрдпрд╛рди рджреЗрдВ:

  1. рд╕рдВрднрд╡ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдХрд╣реАрдВ рднреА рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  2. рд╕рд╢рд░реНрдд рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рдХрд╣реАрдВ рднреА рддрд╛рд░реНрдХрд┐рдХ рд░рд╛рдЬреНрдп рдпрд╛ рдШреЛрд╖рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдирд╣реАрдВ рд╣реИрдВ
  3. рдХреБрдЫ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рд╕рд╢рд░реНрдд рддрд░реНрдХ рдФрд░ рд╢рд╛рдЦрд╛рд╡рд╛рд░ рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдирд╛рдЬреБрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЖрдо рд╣реИ, рдФрд░ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░реЗрдВред рддреЛ рдЪрд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХреЛ рдФрд░ рдмрджрддрд░ рдмрдирд╛рддреЗ рд╣реИрдВред


рдореБрдЭреЗ рдЖрдкрдХрд╛ рдХреЛрдб рдХрднреА рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛

рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рд╕реЗ рддрд╛рддреНрдкрд░реНрдп рдкрджрд╛рд░реНрде рдХреЗ рддреАрди рдЕрд╡рд╕реНрдерд╛рдУрдВ - SOLID, LIQUID, GAS рд╕реЗ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЪрд╛рд░ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд░рд╛рдЬреНрдп рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдкреНрд▓рд╛рдЬреНрдорд╛ (PLASMA) рд╢рд╛рдорд┐рд▓ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдИ рдЕрдиреНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛)ред рдпрджреНрдпрдкрд┐ рдХреЛрдИ рднреА рдкреНрд▓рд╛рдЬреНрдорд╛ рд╕реЗ рдПрдХ рдкреЗрд╕реНрдЯ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХреЛрдб рдЧрд┐рддреБрдм рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдЪреНрдЪ рдКрд░реНрдЬрд╛ рднреМрддрд┐рдХреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рд╕реНрдирд╛рддрдХреЛрддреНрддрд░ рдЫрд╛рддреНрд░ рдЗрд╕реЗ рдХрд╛рдВрдЯрд╛ рдХрд░реЗрдВрдЧреЗ, рд╣рдореЗрдВ рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЛ рднреА рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдкреНрд▓рд╛рдЬреНрдорд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рднрд▓реА-рднрд╛рдВрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛:

 if (temp < 32) { // SOLID water } else { // not SOLID water. is (LIQUID | GAS) + (PLASMA?) // how did PLASMA get in here?? } if (temp > 212) { // GAS water + (PLASMA) // again with the PLASMA!! } else { // not GAS water. is (SOLID | LIQUID) } 

рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдХреЛрдб, рдЬрдм рдХрдИ рдкреНрд▓рд╛рдЬреНрдорд╛ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреБрдЫ рднреА рдирдП рд░рд╛рдЬреНрдп рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдХреАрдбрд╝реЗ рдХреЗ рдЕрд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдврдирд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣реЛрдЧрд╛ред рдмрд╕ рд╕реНрдкреЗрдЧреЗрдЯреА рдореЗрдВ рдХреАрдбрд╝реЛрдВ рдХреЛ рдирд╣реАрдВ рдХрд╣рдирд╛ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ: рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреВрд▓рд┐рдпрди рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрд╛рд░реНрдХрд┐рдХ рд░рд╛рдЬреНрдп рдЕрдХреНрд╕рд░ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рджреЗрдЦрд╛, рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдирдП рддрд╛рд░реНрдХрд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдореМрдЬреВрджрд╛ рдХреЛрдб рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд╢рд░реНрдд рдЬрд╛рдВрдЪ рдФрд░ рд╢рд╛рдЦрд╛ рдХреА рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдХреЛрдб рдкрде рдЕрднреА рднреА рдЙрдирдХреЗ рд╕рднреА рддрд╛рд░реНрдХрд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИрдВ! рдмрдбрд╝реЗ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдЦрд░рд╛рдм рд╣реЛрдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╢рд░реНрдд рдбреЗрдЯрд╛ рдЬрд╛рдВрдЪ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХрдо рд╕реЗ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рддрдХрдиреАрдХ рдХреЛрдб рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрдо рдХрд░реЗрдЧреАред

рдЖрдЗрдП рдЕрдм рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдЬреЛ рдкрд╛рдиреА рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд░реНрдЧ рдкрд╛рдиреА рдХреЗ рдкрджрд╛рд░реНрде рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕рдорд╛рдзрд╛рди рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдлрд┐рд░ рдлрд╝реНрд░реЗрдо рдирд╛рдордХ рдПрдХ рдирдИ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЦреЛрдЬрд╛ рдерд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рдиреА рдХреЛ рдПрдХ рдЙрдмрд╛рд▓ рдореЗрдВ рд▓рд╛рдПрдВ ...


рд╡рд┐рдЬреНрдЮрд╛рди рдиреЗ рдЙрди рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреЛ рдирд╛рдо рджрд┐рдпрд╛ рдЬреЛ рддрд╛рдкрдорд╛рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдкрджрд╛рд░реНрде рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ (рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ)ред рдпрд╣ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХрд░рдиреЗ рдХреА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд▓рдХреНрд╖реНрдп рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рддрдХ рддрд╛рдкрдорд╛рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддрд╛ рд╣реИ:

(рдиреЛрдЯ: рдореИрдВрдиреЗ рдпрд╣ рдЫрджреНрдо рд╕рдВрд╣рд┐рддрд╛ рд▓рд┐рдЦреА рд╣реИред рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдФрд░ рдЬреЛрдЦрд┐рдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред)

 class WaterSample { temp:int Water(temp:int) { this.temp = temp } // gas -> solid func depose() { // If not in GAS state, throw an error if (temp < WATER_GAS_TEMP) throw new IllegalStateError() // do depose while (temp > WATER_SOLID_TEMP) decreaseTemp(1) } // gas -> liquid func condense() { // If not in GAS state, throw an error if (temp < WATER_GAS_TEMP) throw new IllegalStateError() // do condense while (temp > WATER_GAS_TEMP) decreaseTemp(1) } // liquid -> gas func vaporize() { // If not in LIQUID state, throw an error if (!(temp < WATER_GAS_TEMP && temp > WATER_SOLID_TEMP)) throw new IllegalStateError() // do vaporize while (temp < WATER_GAS_TEMP) increaseTemp(1) } // liquid -> solid func freeze() { // If not in LIQUID state, throw an error if (!(temp < WATER_GAS_TEMP && temp > WATER_SOLID_TEMP)) throw new IllegalStateError() // do freeze while (temp > WATER_SOLID_TEMP) decreaseTemp(1) } // solid -> liquid func melt() { // If not in SOLID state, throw an error if (temp > WATER_SOLID_TEMP) throw new IllegalStateError() // do melt while (temp < WATER_SOLID_TEMP) increaseTemp(1) } // solid -> gas func sublimate() { // If not in SOLID state, throw an error if (temp > WATER_SOLID_TEMP) throw new IllegalStateError() // do sublimate while (temp < WATER_GAS_TEMP) increaseTemp(1) } func getState():string { if (temp < WATER_SOLID_TEMP) return "SOLID" if (temp > WATER_GAS_TEMP) return "GAS" return "LIQUID" } } 

рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рд╕реБрдзрд╛рд░ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб "рдореИрдЬрд┐рдХ" рдирдВрдмрд░ (32, 212) рдХреЛ рд░рд╛рдЬреНрдп рдХреЗ рддрд╛рдкрдорд╛рди рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ (WATER_SOLID_TEMP, WATER_GAS_TEMP) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

"рдбрд┐рдлреЗрдВрд╕рд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рднреА рдЗрд╕ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрдиреЗ рдкрд░ рдореЗрдердб рдХреЙрд▓ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рддрд░рд▓ рдирд╣реАрдВ рд╣реИ рддреЛ рдкрд╛рдиреА рдЬрдо рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рдХрд╛рдиреВрди (рдкреНрд░рдХреГрддрд┐ рдХрд╛) рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реЙрдЪрдбреЙрдЧ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдб рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреА рд╕рдордЭ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 // liquid -> solid if (!(temp < WATER_GAS_TEMP && temp > WATER_SOLID_TEMP)) throw new IllegalStateError() 

рдпрд╣ рд╕рд╢рд░реНрдд рдЬрд╛рдБрдЪ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддреА рд╣реИ:

  1. рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ temp рдЬреАрдПрдПрд╕ рд╕реАрдорд╛ рддрд╛рдкрдорд╛рди рд╕реЗ рдХрдо рд╣реИ рдпрд╛ рдирд╣реАрдВ
  2. рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ temp рдареЛрд╕ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рддрд╛рдкрдорд╛рди рд╣реИ
  3. рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдЪреЗрдХ рд╕рддреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ

рдпрд╣ рддрд░реНрдХ рднреНрд░рд╛рдордХ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рддрд░рд▓ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реЛрдиреЗ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкрджрд╛рд░реНрде рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рдПрдХ рдареЛрд╕ рдпрд╛ рдЧреИрд╕ред

 (temp < WATER_GAS_TEMP && temp > WATER_SOLID_TEMP) // is liquid? 

рджреВрд╕рд░реЗ, рдХреЛрдб рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдиреА рддрд░рд▓ рд╣реИред

 !(temp < WATER_GAS_TEMP && temp > WATER_SOLID_TEMP) // Seriously? 

рд░рд╛рдЬреНрдпреЛрдВ рдХреА рдЗрд╕ рджреЛрд╣рд░реА рдЙрдкреЗрдХреНрд╖рд╛ рдХреЛ рд╕рдордЭрдирд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓реАрдХрд░рдг рд╣реИ рдЬреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░рддрд╛ рд╣реИ:

 bool isLiquidWater = (temp < WATER_GAS_TEMP && temp > WATER_SOLID_TEMP) if (!isLiquidWater) throw new IllegalStateError() 

рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ isLiquidWater рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реИ ред

рдЕрдм рд╣рдо рдРрд╕реА рддрдХрдиреАрдХреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рддрдп рдХрд░рддреА рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╕рд┐рд╕реНрдЯрдо рдХреА рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреА рднреМрддрд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдмрди рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕рдордЭ рд╕рд░рд▓ рд╣реЛрддреА рд╣реИред

рдлрд╝реНрд░реЗрдо рдорд╢реАрди рд╕рдВрдХреЗрддрди


рдлрд╝реНрд░реЗрдо рдорд╢реАрди рдиреЛрдЯреЗрд╢рди (FMN) рдПрдХ рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ (рдбреЛрдореЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛, рдбреАрдПрд╕рдПрд▓) рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдорд╢реАрдиреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реНрд░реЗрдгреАрдмрджреНрдз, рдкрджреНрдзрддрд┐рдЧрдд рдФрд░ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рдлрд╝реНрд░реЗрдо рдСрдЯреЛрдореЗрдЯрд╛ рдХреЛ рдХреЗрд╡рд▓ "рдорд╢реАрдиреЗрдВ" рдХрд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдиреЛрдЯреЗрд╢рди рдХрд┐рд╕реА рднреА рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ (рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ, рд╕реНрдЯреЛрд░ рдСрдЯреЛрдореЗрдЯрд╛, рдФрд░ рдСрдЯреЛрдореЗрдЯрд╛ рдХреЗ рд╢реАрд░реНрд╖ рд╡рд┐рдХрд╛рд╕ - рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрдиреЛрдВ) рдХреЗ рд▓рд┐рдП рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдорд╢реАрдиреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдкреГрд╖реНрда рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдпрджреНрдпрдкрд┐ рдСрдЯреЛрдореЗрдЯрд╛ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдХрдерди), рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдФрд░ рд▓реЗрдЦрди рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЗрди рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд░реЗрдо рдПрдХ рдорд╛рдирдХреАрдХреГрдд рд╕рдВрдХреЗрддрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддреАрди рдПрдХреАрдХреГрдд рд╕реНрддрд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдлрд╝реНрд░реЗрдо рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдбреАрдПрд╕рдПрд▓
  2. рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЛрдбрд┐рдВрдЧ рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬрд┐рд╕реЗ "рдирд┐рдпрдВрддреНрд░рдХ" рдХрд╣рддреЗ рд╣реИрдВред
  3. рджреГрд╢реНрдп рд╕рдВрдХреЗрддрди рдЬрд┐рд╕рдореЗрдВ FMN рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд░реЗрдЦрд╛рдВрдХрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ - рдлрд╝реНрд░реЗрдо рджреГрд╢реНрдп рд╕рдВрдХреЗрддрди (FVNN)

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдкрд╣рд▓реЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛: рдПрдлрдПрдордПрди рдФрд░ рд╕рдВрджрд░реНрдн рдкреИрдЯрд░реНрди, рдФрд░ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдлрд╡реАрдПрди рдХреА рдЪрд░реНрдЪрд╛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рдлрд╝реНрд░реЗрдо рдПрдХ рдЕрдВрдХрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рд╣реИрдВ:

  1. FMN рдореЗрдВ рдСрдЯреЛрдореЗрдЯрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдердо-рд╕реНрддрд░реАрдп рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред
  2. FMN рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреИрдЯрд░реНрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ FMN рд╕рдВрдХреЗрддрди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  3. FMN рдЬрд▓реНрдж рд╣реА рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдВрдХрд▓рди (рдкреНрд░рдЧрддрд┐ рдореЗрдВ рдХрд╛рдо) рдХрд░ рд╕рдХреЗрдЧрд╛

рдиреЛрдЯ: рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ FMN рд╕рдВрдХреЗрддрди рдХреА рдкреВрд░реНрдг рд╕рдорд╛рдирддрд╛ рдФрд░ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдХреЛрдИ рднреА рддрд░реАрдХрд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдлрд╝реНрд░реЗрдо - рдлрд╝реНрд░реЗрдо рдЗрд╡реЗрдВрдЯреНрд╕ рдФрд░ рдлрд╝реНрд░реЗрдо рдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдореЗрдВ рджреЛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдердо-рд╕реНрддрд░реАрдп рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдКрдВрдЧрд╛ ред

рдлреНрд░реЗрдо рдЗрд╡реЗрдВрдЯ


FrameEvents FMN рд╕рдВрдХреЗрддрди рдХреА рд╕рд╛рджрдЧреА рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИред рдПрдХ рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рджрд╕реНрдп рдЪрд░ рд╣реЛрддреЗ рд╣реИрдВ:

  • рд╕рдВрджреЗрд╢ рдЖрдИрдбреА
  • рд╢рдмреНрджрдХреЛрд╢ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА
  • рд╡рд╛рдкрд╕реА рд╡рд╕реНрддреБ

рдпрд╣рд╛рдБ рдлреНрд░реЗрдорд╡реЗрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЫрджреНрдо рдХреЛрдб рд╣реИ:

 class FrameEvent { var _msg:String var _params:Object var _return:Object FrameEvent(msg:String, params:Object = null) { _msg = msg _params = params } } 

рдлрд╝реНрд░реЗрдо рдиреЛрдЯреЗрд╢рди @ рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдлреНрд░реЗрдорд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреЛрдХрди рд╣реИ:

 @|message| :  -    _msg @[param1] :  []      @^ :              _return 

рдЕрдХреНрд╕рд░ рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрджрд░реНрдн рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдВрдХрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд╣реБрдВрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 |buttonClick| // Select for a "buttonClick" event _msg [firstName] = "Mark" // Set firstName _params property to "Mark" ^ = "YES" // Set the _return object to "YES" 

рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдзрд╛рд░рдгрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд▓реНрдж рд╣реА рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдПрдлрдПрдордПрди рдХреЛрдб рдХреА рд╕рдордЭ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред

рдлреНрд░реЗрдо рдирд┐рдпрдВрддреНрд░рдХ


рдлрд╝реНрд░реЗрдо рдирд┐рдпрдВрддреНрд░рдХ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдХреНрд▓рд╛рд╕ рд╣реИ, рдЬрд┐рд╕реЗ рдлрд╝реНрд░реЗрдо рдорд╢реАрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдкрд╣рдЪрд╛рди # рдЙрдкрд╕рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ:

 #MyController 

рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╕реНрддреБ рдЙрдиреНрдореБрдЦ pseudocode рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

 class MyController {} 

рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рддрд╛рдХрд┐ рд╡рд╣ рдХреБрдЫ рдХрд░ рд╕рдХреЗ, рдШрдЯрдирд╛рдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд░рд╛рдЬреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреНрд▓реЙрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдмреНрд▓реЙрдХ рдирд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдбреИрд╢ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:

 #MyController<br> -block 1- -block 2- -block 3- 

рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмреНрд▓реЙрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдХреЗрдВрджреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ -machine- рдмреНрд▓реЙрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд░рд╛рдЬреНрдп $ рдЙрдкрд╕рд░реНрдЧ рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП FMN рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдорд╢реАрди рд╣реИ:

 #MyController // controller declaration -machine- // machine block $S1 // state declaration 

рдпрд╣рд╛рдБ рдКрдкрд░ FMN рдХреЛрдб рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

 class MyController { // -machine- var _state(e:FrameEvent) = S1 // initialize state variable // to $S1 func S1(e:FrameEvent) { // state $S1 does nothing } } 

рдорд╢реАрди рдмреНрд▓реЙрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. _state рд╡реИрд░рд┐рдПрдмрд▓, рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реНрдЯреЗрдЯ рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рд╛рдЬреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ

рдлрд╝реНрд░реЗрдо рд╕реНрдЯреЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 func MyState(e:FrameEvent); 

рдорд╢реАрди рдмреНрд▓реЙрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЗрди рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлреНрд░реЗрдорд╡реЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╢реАрди рдХреЗ рд╕рд╛рде рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрдХрд╛рдИ


рдлрд╝реНрд░реЗрдордПрд╡реЗрдиреНрдЯреНрд╕ рдХреА рдкрд░рд╕реНрдкрд░ рдХреНрд░рд┐рдпрд╛ рдЬреЛ рдорд╢реАрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ, рдлреНрд░реЗрдо рдиреЛрдЯреЗрд╢рди рдХреА рд╕рд╛рджрдЧреА рдФрд░ рд╢рдХреНрддрд┐ рдХрд╛ рдмрд╣реБрдд рд╕рд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдордиреЗ рдЕрднреА рддрдХ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдлреНрд░реЗрдорд╡рд╛рдЗрд╡реНрд╕ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ - рд╡реЗ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдХреИрд╕реЗ рдЖрддреЗ рд╣реИрдВ? рдПрдХ рд╡рд┐рдХрд▓реНрдк: рдмрд╛рд╣рд░реА рдЧреНрд░рд╛рд╣рдХ рд╕реНрд╡рдпрдВ рдлрд╝реНрд░реЗрдордПрд╡реЗрдиреНрдЯреНрд╕ рдмрдирд╛ рдФрд░ рдЖрд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕реАрдзреЗ _state рд╕рджрд╕реНрдп рдЪрд░ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 myController._state(new FrameEvent("buttonClick")) 

рдПрдХ рдмрд╣реБрдд рд╣реА рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ _state рд╕рджрд╕реНрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзрд╛ рдХреЙрд▓ рд▓рдкреЗрдЯрддрд╛ рд╣реИ:

 myController.sendEvent(new FrameEvent("buttonClick")) 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд░реЗрд╢рд╛рдиреА рдореБрдХреНрдд рддрд░реАрдХрд╛, рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдорд╢реАрди рдХреЛ рдПрдХ рдШрдЯрдирд╛ рднреЗрдЬрддреЗ рд╣реИрдВ:

 class MyController { func buttonClick() { FrameEvent e = new FrameEvent("buttonClick") _state(e) return e._return } } 

рдлрд╝реНрд░реЗрдо рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдХреЙрд▓ рдХреЛ рдлрд╝реНрд░реЗрдорд╡реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИрдВред

 #MyController -interface- buttonClick ... 

interface рдмреНрд▓реЙрдХ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреВрдВрдЧрд╛ред

рдЕрдм рдлрд╝реНрд░реЗрдо рдСрдЯреЛрдореЗрдЯрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред

рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░


рдпрджреНрдпрдкрд┐ рд╣рдордиреЗ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдРрд╕рд╛ рдХреЛрдИ рдиреЛрдЯреЗрд╢рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдирд╛ рд╣реИред рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 1) рдЙрд╕ рдШрдЯрдирд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ 2) рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдлрд╝реНрд░реЗрдо рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

 #MyController // controller declaration -machine- // machine block $S1 // state declaration |e1| ^ // e1 event handler and return 

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, _msg рдЗрд╡реЗрдВрдЯ рдХреЗ _msg рд╡рд┐рд╢реЗрд╖рддрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, FMN рд╕рдВрдХреЗрддрди рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

 |messageName| 

рдПрдлрдПрдордПрди рднреА рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдПрдХреНрд╕рдкреЛрд░реНрдЯрд░ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 class MyController { // #MyController // -machine- var _state(e:FrameEvent) = S1 func S1(e:FrameEvent) { // $S1 if (e._msg == "e1") { // |e1| return // ^ } } } 

рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдлрдПрдордПрди рд╕рдВрдХреЗрддрди рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдХреЛрдбрд┐рдВрдЧ рд╣реИред

рдШрдЯрдирд╛рдУрдВ, рдирд┐рдпрдВрддреНрд░рдХреЛрдВ, рдорд╢реАрдиреЛрдВ, рд░рд╛рдЬреНрдпреЛрдВ рдФрд░ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдЗрди рдмреБрдирд┐рдпрд╛рджреА рдкрд╣рд▓реБрдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрдирдХреА рдорджрдж рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХрд▓ рдлреЛрдХрд╕ рдорд╢реАрдиреЗрдВ


рдКрдкрд░ рд╣рдордиреЗ рдПрдХ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рджреЗрдЦрд╛ рдЬреЛ рдмрд╣реБрдд рдмреЗрдХрд╛рд░ рдерд╛ред

 #MyController 

рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЦрд╛рджреНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рдХрджрдо рдПрдХ рдПрдХрд▓ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЬреЛ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЙрдмрд╛рдК рд╣реИред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╡рд╣ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рддреЛ рдХрд░ рд░рд╣рд╛ рд╣реИ ред

рдкрд╣рд▓реЗ, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ (рдирд┐рд╣рд┐рдд) рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 class Mono { String status() { return "OFF" } } 

рдпрд╣рд╛рдВ рдХреЛрдИ рд░рд╛рдЬреНрдп рдШреЛрд╖рд┐рдд рдпрд╛ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдХреЛрдб рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо "рдХрд╛рд░реНрдпрд╢реАрд▓" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИред

рд╣рдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░ рднреА рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ: рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рдШрдЯрдирд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЙрд▓ рдХреЗ рд╕рдорд╛рди рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ | рд╕реНрдерд┐рддрд┐ | рдореЛрдиреЛ рдХреНрд▓рд╛рд╕, рд╣рдореЗрд╢рд╛ $ рд╡рд░реНрдХрд┐рдВрдЧ рд╕реНрдЯреЗрдЯ рдореЗрдВред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдШрдЯрдирд╛ рдмрдВрдзрди рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдЕрдм рдЖрдЗрдП FMN рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ:

 #Mono -machine- $Working |status| ^("OFF") 

рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 class Mono { // #Mono // -machine- var _state(e:FrameEvent) = Working // initialize start state func Working(e:FrameEvent) { // $Working if (e._msg == "status") { // |status| e._return = "OFF" return // ^("OFF") } } } 

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреА рдкреЗрд╢ рдХреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛:

 ^(return_expr) 

рдпрд╣ рдСрдкрд░реЗрдЯрд░ рд╕рдордХрдХреНрд╖ рд╣реИ

 @^ = return_expr 

рдпрд╛ рдмрд╕

 ^ = return_expr 

рдпреЗ рд╕рднреА рдСрдкрд░реЗрдЯрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдорддреБрд▓реНрдп рд╣реИрдВ рдФрд░ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди ^(return_expr) рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рджрд┐рдЦрддрд╛ рд╣реИред

рд╕реНрдЯреЛрд╡ рдЪрд╛рд▓реВ рдХрд░реЗрдВ


рдЕрдм рддрдХ рд╣рдордиреЗ 0 рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ 1 рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рджреЗрдЦрд╛ рд╣реИред рд╡реЗ рдЕрднреА рддрдХ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХреЗ рдХрдЧрд╛рд░ рдкрд░ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕реНрддрд╛ рдХреЛ рдкрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреЛрд╡ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдПрдХрд▓ рдмреВрд▓рд┐рдпрди рдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕реНрд╡рд┐рдЪ рдХреНрд▓рд╛рд╕ рд╣реИ:

 class Switch { boolean _isOn; func status() { if (_isOn) { return "ON"; } else { return "OFF"; } } } 

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдИрд╡реЗрдВрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:


рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдПрдХ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ FMN рд╣реИ:

 #Switch1 -machine- $Off |status| ^("OFF") $On |status| ^("ON") 

рдЕрдм рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝реНрд░реЗрдо рд╕рдВрдХреЗрддрди рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХреИрд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ - рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдирд╛ (рд╡рд┐рдзрд┐ рдХреЙрд▓) рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрдерд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрд░рдЪрдирд╛ рднреА рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ:

 class Switch1 { // #Switch1 // -machine- var _state(e:FrameEvent) = Off func Off(e:FrameEvent) { // $Off if (e._msg == "status") { // |status| e._return = "OFF" return // ^("OFF") } } func On(e:FrameEvent) { // $On if (e._msg == "status") { // |status| e._return = "ON" return // ^("ON") } } } 

рддрд╛рд▓рд┐рдХрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдлрд╝реНрд░реЗрдо рдЕрдВрдХрди рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреИрдЯрд░реНрди рджреЛрдиреЛрдВ рдХреЗ рд╕рдорд╛рди рдлрд╛рдпрджреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рд░рд╛рдЬреНрдп рдореЗрдВ $ рдмрдВрдж рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╛рдЬреНрдп рдкрд░ $ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ! рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдСрдкрд░реЗрдЯрд░ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕реНрдерд┐рддрд┐ рдмрджрд▓реЗрдВ


рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХрдерди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 ->> $NewState 

рдЕрдм рд╣рдо рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ $ Off рдФрд░ $ On рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 #Switch2 -machine- $Off |toggle| ->> $On ^ |status| ^("OFF") $On |toggle| ->> $Off ^ |status| ^("ON") 

рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕реА рдШрдЯрдирд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:


рдирдИ рдШрдЯрдирд╛ | рдЯреЙрдЧрд▓ | рдЕрдм рджреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдЪрд╛рд▓рди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдХрд╣реАрдВ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рд╕реНрд╡рд┐рдЪ 2 рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

 class Switch2 { // #Switch2 // -machine- var _state(e:FrameEvent) = Off func Off(e:FrameEvent) { if (e._msg == "toggle") { // |toggle| _state = On // ->> $On return // ^ } if (e._msg == "status") { // |status| e._return = "OFF" return // ^("OFF") } } func On(e:FrameEvent) { if (e._msg == "toggle") { // |toggle| _state = Off // ->> $Off return // ^("OFF") } if (e._msg == "status") { // |status| e._return = "ON" return // ^("ON") } } } 

рдЖрдк рд╕реНрд╡рд┐рдЪ 2 рдореЗрдВ рдЕрдВрддрд┐рдо рд╕реБрдзрд╛рд░ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рди рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ, рдмрд▓реНрдХрд┐ рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░ рджреЗ:

 #Switch3 -machine- $Off |turnOn| ->> $On ^ |toggle| ->> $On ^ |status| ^("OFF") $On |turnOff| ->> $Off ^ |toggle| ->> $Off ^ |status| ^("ON") 

рдЯреЙрдЧрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд | рдШрдЯрдирд╛, рдЕрдЧрд░ | рдЯрд░реНрдирдСрди | рдЬрдм рд╕реНрд╡рд┐рдЪ 3 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд╛рд▓реВ рд╣реЛ рдпрд╛ | рдЯрд░реНрдирдСрдл рд╣реЛред рдЬрдм рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдж рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЫреЛрдЯрд╛ рд╕реБрдзрд╛рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рд┐рдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 class Switch3 { // #Switch3 // -machine- var _state(e:FrameEvent) = Off /********************************** $Off |turnOn| ->> $On ^ |toggle| ->> $On ^ |status| ^("OFF") ***********************************/ func Off(e:FrameEvent) { if (e._msg == "turnOn") { // |turnOn| _state = On // ->> $On return // ^ } if (e._msg == "toggle") { // |toggle| _state = On // ->> $On return // ^ } if (e._msg == "status") { // |status| e._return = "OFF" return // ^("OFF") } } /********************************** $On |turnOff| ->> $Off ^ |toggle| ->> $Off ^ |status| ^("ON") ***********************************/ func On(e:FrameEvent) { if (e._msg == "turnOff") { // |turnOff| _state = Off // ->> $Off return // ^ } if (e._msg == "toggle") { // |toggle| _state = Off // ->> $Off return // ^ } if (e._msg == "status") { // |status| e._return = "ON" return // ^("ON") } } } 

рд╣рдорд╛рд░реЗ рд╕реНрд╡рд┐рдЪ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдлрдПрдордПрди рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╕рдордЭрдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝реНрд░реЗрдо рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╕реНрд╡рд┐рдЪ рдорд╢реАрди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрдЧ рдХреЛ рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рдзреНрд╡рдирд┐ рдХреА рдЕрд╡рд╕реНрдерд╛


рдПрдХ рдХреБрдВрдЬреА, рдпрджреНрдпрдкрд┐ рд╕реВрдХреНрд╖реНрдо, рдСрдЯреЛрдореЗрдЯрд╛ рдХрд╛ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рдорд╢реАрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдпрд╛ рддреЛ рдПрдХ рд╕реНрдерд┐рддрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд╛рд▓реВ) рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЬрдм рдорд╢реАрди рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓ рдЧрдИ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╣рд┐рдд рд╣реИред рдХрд┐ рдХрд╛рд░ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рдмрджрд▓реЗрдЧреАред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзрд╛рд░рдгрд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрд╛ рд╕рддреНрдпрд╛рдкрди (рдпрд╛ "рд╕рдВрд╡реЗрджрди") рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

  1. рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд╣рд╛рд▓ рд╕реНрдерд┐рддрд┐ - рдЬрдм рдорд╢реАрди рдПрдХ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╣рд╛рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ
  2. рдмрд╛рд╣рд░реА рд╕реНрдерд┐рддрд┐ - "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐" рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдорд╢реАрди рдХреЗ рдирд┐рд░реНрдорд╛рдг, рдмрд╣рд╛рд▓реА рдпрд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдордп рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдореМрдЬреВрдж рд╣реИ
  3. рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ - рдЬрдм рдПрдХ рд░рдирд┐рдВрдЧ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╢реАрди рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ

рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдбреЗрдЯрд╛, рдкрд░реНрдпрд╛рд╡рд░рдг, рдпрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдорд╢реАрди рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХреЛ "рдЬрд╛рдВрдЪ" рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдпрд╣ рдмреВрд▓рд┐рдпрди рддрд░реНрдХ рдПрдХ рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд░реЗрдо рдиреЛрдЯреЗрд╢рди рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ $ рдкреНрд░реАрдлрд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рд╕реЗ рдкрд╣рд▓реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗрддрд╛ рд╣реИ :

 $probeForState() 

рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 func probeForState():FrameState { if (temp < 32) return Solid if (temp < 212) return Liquid return Gas } 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рд╕рд╣реА рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд░рд╛рдЬреНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреА рд╣реИред рдЗрд╕ рд╕рдВрд╡реЗрджрди рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдлрд┐рд░ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 ->> $probeForState() 

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдВрддреНрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 _state = probeForState() 

рд░рд╛рдЬреНрдп рд╕рдВрд╡реЗрджрди рд╡рд┐рдзрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд░рд╛рдЬреНрдп рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдлрд╝реНрд░реЗрдо рдиреЛрдЯреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЖрдЧреЗ, рд╣рдо рдлрд╝реНрд░реЗрдордПрд╡реЗрдиреНрдЯреНрд╕ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрдХрди рднреА рд╕реАрдЦреЗрдВрдЧреЗред

рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдкреНрд░реЗрд╖рдг


рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдбрд┐рд╕реНрдкреИрдЪрд░ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдлрд╝реНрд░реЗрдо рдЕрдВрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд┐рд╖рдп рд╣реИред

рдлрд╝реНрд░реЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рдбреЗрдЯрд╛ рдпрд╛ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдирд╣реАрдВред рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП, рдлреНрд░реЗрдордПрд╡реЗрдиреНрдЯреНрд╕ рдХреЛ рдЕрдиреНрдп рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рдШрдЯрдирд╛ рдХреЛ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ (рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдмрд╕ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред рдШрдЯрдирд╛рдУрдВ рдХреА рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд┐рд╕реА рднреА рд╡рд╛рдВрдЫрд┐рдд рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрдердб рдЪреЗрдирд┐рдВрдЧ рдирд╛рдордХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╢реАрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рд░рд╛рдЬреНрдп рд╕реЗ рдШрдЯрдирд╛рдУрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП FMN рдЕрдВрдХрди - рдпрд╣ рдкреНрд░рдмрдВрдзрдХ => :

 $S1 => $S2 

рдЗрд╕ FMN рдХрдерди рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 func S1(e:FrameEvent) { S2(e) // $S1 => $S2 } 

рдЕрдм рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЪреЗрди рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЖрдЗрдП рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдПрдХ рдХрдард┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

 #Movement -machine- $Walking => $Moving |getSpeed| ^(3) |isStanding| ^(true) $Running => $Moving |getSpeed| ^(6) |isStanding| ^(true) $Crawling => $Moving |getSpeed| ^(.5) |isStanding| ^(false) $AtAttention => $Motionless |isStanding| ^(true) $LyingDown => $Motionless |isStanding| ^(false) $Moving |isMoving| ^(true) $Motionless |getSpeed| ^(0) |isMoving| ^(false) 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рджреЛ рдмреБрдирд┐рдпрд╛рджреА рд░рд╛рдЬреНрдп рд╣реИрдВ - $ рдореВрд╡рд┐рдВрдЧ рдФрд░ $ рдореЛрд╢рдирд▓реЗрд╕ - рдФрд░ рдЕрдиреНрдп рдкрд╛рдВрдЪ рд░рд╛рдЬреНрдп рдЙрдирд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рдзреНрдпрдХрд╛рд░реА рдШрдЯрдирд╛ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:


рд╣рдордиреЗ рдЬреЛ рддрдХрдиреАрдХ рд╕реАрдЦреА рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛:

 class Movement { // #Movement // -machine- /********************************** $Walking => $Moving |getSpeed| ^(3) |isStanding| ^(true) ***********************************/ func Walking(e:FrameEvent) { if (e._msg == "getSpeed") { e._return = 3 return } if (e._msg == "isStanding") { e._return = true return } Moving(e) // $Walking => $Moving } /********************************** $Running => $Moving |getSpeed| ^(6) |isStanding| ^(true) ***********************************/ func Running(e:FrameEvent) { if (e._msg == "getSpeed") { e._return = 6 return } if (e._msg == "isStanding") { e._return = true return } Moving(e) // $Running => $Moving } /********************************** $Crawling => $Moving |getSpeed| ^(.5) |isStanding| ^(false) ***********************************/ func Crawling(e:FrameEvent) { if (e._msg == "getSpeed") { e._return = .5 return } if (e._msg == "isStanding") { e._return = false return } Moving(e) // $Crawling => $Moving } /********************************** $AtAttention => $Motionless |isStanding| ^(true) ***********************************/ func AtAttention(e:FrameEvent) { if (e._msg == "isStanding") { e._return = true return } Motionless(e) // $AtAttention => $Motionless } /********************************** $LyingDown => $Motionless |isStanding| ^(false) ***********************************/ func LyingDown(e:FrameEvent) { if (e._msg == "isStanding") { e._return = false return } Motionless(e) // $AtAttention => $Motionless } /********************************** $Moving |isMoving| ^(true) ***********************************/ func Moving(e:FrameEvent) { if (e._msg == "isMoving") { e._return = true return } } /********************************** $Motionless |getSpeed| ^(0) |isMoving| ^(false) ***********************************/ func Motionless(e:FrameEvent) { if (e._msg == "getSpeed") { e._return = 0 return } if (e._msg == "isMoving") { e._return = false return } } } 

рдкрд╛рдиреА рдХреА рдорд╢реАрди


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ FMN рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдмреБрджреНрдзрд┐рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд╡рд╛рдЯрд░рд╕реНрдкреНрд▓рдо рд╡рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо рдЕрдкрдиреЗ рд╕реНрдирд╛рддрдХ рдЫрд╛рддреНрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рдиреА рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдирдпрд╛ $ рдкреНрд▓рд╛рдЬрд╝реНрдорд╛ рд░рд╛рдЬреНрдп рдЬреЛрдбрд╝реЗрдВрдЧреЗ:


рдпрд╣рд╛рдВ рдкреВрд░реНрдг FMN рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 #WaterSample -machine- $Begin |create| // set temp to the event param value setTemp(@[temp]) // probe for temp state and change to it ->> $probeForState() ^ $Solid => $Default |melt| doMelt() ->> $Liquid ^ |sublimate| doSublimate() ->> $Gas ^ |getState| ^("SOLID") $Liquid => $Default |freeze| doFreeze() ->> $Solid ^ |vaporize| doVaporize() ->> $Gas ^ |getState| ^("LIQUID") $Gas => $Default |condense| doCondense() ->> $Liquid ^ |depose| doDepose() ->> $Solid ^ |ionize| doIonize() ->> $Plasma ^ |getState| ^("GAS") $Plasma => $Default |recombine| doRecombine() ->> $Gas ^ |getState| ^("PLASMA") $Default |melt| throw new InvalidStateError() |sublimate| throw new InvalidStateError() |freeze| throw new InvalidStateError() |vaporize| throw new InvalidStateError() |condense| throw InvalidStateError() |depose| throw InvalidStateError() |ionize| throw InvalidStateError() |recombine| throw InvalidStateError() |getState| throw InvalidStateError() 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп $ рд╢реБрд░реБрдЖрдд рд╣реИ, рдЬреЛ рд╕рдВрджреЗрд╢ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ | рдФрд░ рдореВрд▓реНрдп рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ tempред рд╕реЗрдВрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ tempрд▓реЙрдЬрд┐рдХрд▓ рд╕реНрдЯреЗрдЯ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ , рдФрд░ рдлрд┐рд░ рдЗрд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рдорд╢реАрди рдХреЗ рд╕рдВрдХреНрд░рдордг рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рднреА рднреМрддрд┐рдХ рд░рд╛рдЬреНрдп ($ рдареЛрд╕, $ рддрд░рд▓, $ рдЧреИрд╕, $ рдкреНрд▓рд╛рдЬреНрдорд╛) $ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд╛рдЬреНрдп рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рдШрдЯрдирд╛рдПрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ $ Default рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ InvalidStateError рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рд╕рд░рд▓ рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

 class WaterSample { // -machine- var _state(e:FrameEvent) = Begin /********************************** $Begin |create| // set temp to the event param value setTemp(@[temp]) // probe for temp state and change to it ->> $probeForState() ^ ***********************************/ func Begin(e:FrameEvent) { if (e._msg == "create") { setTemp(e["temp"]) _state = probeForState() return } } /********************************** $Solid => $Default |melt| doMelt() ->> $Liquid ^ |sublimate| doSublimate() ->> $Gas ^ |sublimate| ^("SOLID") ***********************************/ func Solid(e:FrameEvent) { if (e._msg == "melt") { doMelt() _state = Liquid return } if (e._msg == "sublimate") { doSublimate() _state = Gas return } if (e._msg == "getState") { e._return = "SOLID" return } Default(e) } /********************************** $Liquid => $Default |freeze| doFreeze() ->> $Solid ^ |vaporize| doVaporize() ->> $Gas ^ |getState| ^("LIQUID") ***********************************/ func Liquid(e:FrameEvent) { if (e._msg == "freeze") { doFreeze() _state = Solid return } if (e._msg == "vaporize") { doVaporize() _state = Gas return } if (e._msg == "getState") { e._return = "LIQUID" return } Default(e) } /********************************** $Gas => $Default |condense| doCondense() ->> $Liquid ^ |depose| doDepose() ->> $Solid ^ |ionize| doIonize() ->> $Plasma ^ |getState| ^("GAS") ***********************************/ func Gas(e:FrameEvent) { if (e._msg == "condense") { doCondense() _state = Liquid return } if (e._msg == "depose") { doDepose() _state = Solid return } if (e._msg == "ionize") { doIonize() _state = Plasma return } if (e._msg == "getState") { e._return = "GAS" return } Default(e) } /********************************** $Plasma => $Default |recombine| doRecombine() ->> $Gas ^ |getState| ^("PLASMA") ***********************************/ func Plasma(e:FrameEvent) { if (e._msg == "recombine") { doRecombine() _state = Gas return } if (e._msg == "getState") { e._return = "PLASMA" return } Default(e) } /********************************** $Default |melt| throw new InvalidStateError() |sublimate| throw new InvalidStateError() |freeze| throw new InvalidStateError() |vaporize| throw new InvalidStateError() |condense| throw InvalidStateError() |depose| throw InvalidStateError() |ionize| throw InvalidStateError() |recombine| throw InvalidStateError() |getState| throw InvalidStateError() ***********************************/ func Default(e:FrameEvent) { if (e._msg == "melt") { throw new InvalidStateError() } if (e._msg == "sublimate") { throw new InvalidStateError() } if (e._msg == "freeze") { throw new InvalidStateError() } if (e._msg == "vaporize") { throw new InvalidStateError() } if (e._msg == "condense") { throw new InvalidStateError() } if (e._msg == "depose") { throw new InvalidStateError() } if (e._msg == "ionize") { throw new InvalidStateError() } if (e._msg == "recombine") { throw new InvalidStateError() } if (e._msg == "getState") { throw new InvalidStateError() } } } 

рдирд┐рд╖реНрдХрд░реНрд╖


рдСрдЯреЛрдореЗрдЯрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреА рдПрдХ рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд┐рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд╝реНрд░реЗрдо рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдСрдЯреЛрдореЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдпрд╛ "рддрдВрддреНрд░" рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдкреИрдЯрд░реНрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрди рдмрдирд╛рдирд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдлрд╝реНрд░реЗрдо рд╕рдВрдХреЗрддрди рдорд╢реАрдиреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдореЗрдВ рд╕реНрдкреЗрдЧреЗрдЯреА рд╕реЗ рдмрдЪрд╛рдПрдВред


рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдкрд╛рд╕реНрддрд╛ рдЦрд╛рддрд╛ рд╣реИ (рд╕реБрдЬреБрдХреА рд╕реИрди рджреНрд╡рд╛рд░рд╛ рдлреЛрдЯреЛ)
рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдЬреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕реАрдЦрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдПрдлрдПрдордПрди рд╕рдВрдХреЗрддрди рдХреА рдФрд░ рднреА рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрддрд╛ рдкреИрджрд╛ рдХрд░реЗрдВрдЧреЗред рд╕рдордп рдХреЗ рд╕рд╛рде, рдореИрдВ рдЪрд░реНрдЪрд╛ рдХреЛ рджреГрд╢реНрдп рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдПрдХ рдЕрдзреНрдпрдпрди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ FMN рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi446330/


All Articles