Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 123

Автор Π‘Π΅Ρ€Ρ‚Ρ€Π°Π½ ΠœΠ΅ΠΉΠ΅Ρ€

meaning (except: INTEGER)

-- Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с ΠΊΠΎΠ΄ΠΎΠΌ except

is_assertion_violation: BOOLEAN

-- ЯвляСтся Π»ΠΈ послСднСС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ утвСрТдСния

-- ΠΈΠ»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ убывания Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ†ΠΈΠΊΠ»Π°

ensure

Result = (exception = Precondition) or (exception = Postcondition) or

(exception = Class_invariant) or

(exception = Loop_invariant) or (exception = Loop_variant)

is_system_exception: BOOLEAN

-- ЯвляСтся Π»ΠΈ послСднСС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ внСшним событиСм

-- (ошибкой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы)?

is_signal: BOOLEAN

-- ЯвляСтся Π»ΠΈ послСднСС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сигналом ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы?

tag_name: STRING

-- ΠœΠ΅Ρ‚ΠΊΠ° утвСрТдСния, Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ

original_tag_name: STRING

-- ΠœΠ΅Ρ‚ΠΊΠ° послСднСго Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ утвСрТдСния ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ.

recipient_name: STRING

-- Имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡ΡŒΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ послСдним ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ

class_name: STRING

-- Имя класса, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ получатСля послСднСго ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

original_recipient_name: STRING

-- Имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡ΡŒΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ

-- послСдним ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ

original_class_name: STRING

-- Имя класса, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ получатСля послСднСго ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ



ИмСя эти свойства, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ rescue ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ особым способом. НапримСр, Π² классС, наслСдуСмом ΠΎΡ‚ EXCEPTIONS, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ rescue ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:


rescue

if is_assertion_violation then

"Π‘Π»ΡƒΡ‡Π°ΠΉ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ"

else if is_signal then

"Π‘Π»ΡƒΡ‡Π°ΠΉ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ сигналы ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы"

else

...

end



Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс EXCEPTIONS, ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ quasi_inverse, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ выполнял retry Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ клавиши "break" Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ retry. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ rescue Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:


if exception = Numerical_error then

division_tried := True; retry

end



Π’Π°ΠΊ ΠΊΠ°ΠΊ здСсь Π½Π΅Ρ‚ else Π²Π΅Ρ‚Π²ΠΈ, Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ Numerical_error, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΎΡ‚ΠΊΠ°Π·Π° - ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ слСдствиС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° восстановлСния Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаях. Иногда ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ rescue ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΡΡ‚ΠΈΠ»ΡŒ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Какой Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ контроля?

ΠœΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ замСчания ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ уровня ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ спСцифичСских ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… двумя послСдними ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ. Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° зрСния, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ - Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ событиС; ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ρ‚ΠΎ СстСствСнная рСакция ПО ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° - "я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Π±Ρ‹Ρ‚ΡŒ здСсь! ВыпуститС мСня ΠΎΡ‚ΡΡŽΠ΄Π°, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС!". Π­Ρ‚ΠΎ, каТСтся, нСсовмСстимым с ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ rescue Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° источника ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ я пытался Π² ΠΌΠΎΠ΅ΠΉ собствСнной Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π° случаСв ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΡΡ‚Π°Ρ€Π°ΡΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ лишь фиксируСт ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Ссли ΠΌΠΎΠΆΠ΅Ρ‚, Π° Π·Π°Ρ‚Π΅ΠΌ Π»ΠΈΠ±ΠΎ fail, Π»ΠΈΠ±ΠΎ retry.

Π­Ρ‚ΠΎΡ‚ ΡΡ‚ΠΈΠ»ΡŒ, вСроятно, слишком строг, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ схСму, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ запросов класса EXCEPTIONS, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π² Ρ‚ΠΎΠΆΠ΅ врСмя ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ дисциплинированным. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΎΠΉ схСмы, Ρ‚ΠΎ Π² классС EXCEPTIONS Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ всС, Ρ‡Ρ‚ΠΎ для этого Π½ΡƒΠΆΠ½ΠΎ. Но всСгда ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅:

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Ρ‹ Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Вся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, выполняСмая Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ rescue, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ простой ΠΈ Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° СдинствСнной Ρ†Π΅Π»ΠΈ - Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ получатСля Π² ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ состояниС, допуская ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

ВсС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ Π΄ΠΎ сих ΠΏΠΎΡ€, Π±Ρ‹Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ событий Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ПО (сигналы ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы) ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… слСдствий Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ (Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прилоТСниях ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ ΠΏΠΎ Π²ΠΎΠ»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ситуациях.

Π’Π°ΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Они Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ цСлочислСнным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΌΡΡ ΠΎΡ‚ систСмных ΠΊΠΎΠ΄ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ (строкой), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² сообщСниях ΠΎΠ± ошибкС. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства для возбуТдСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° Π΅Π³ΠΎ свойств Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ rescue.


trigger (code: INTEGER; message: STRING)

-- ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, выбрасывая ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с ΠΊΠΎΠ΄ΠΎΠΌ

-- code ΠΈ связанным тСкстовым сообщСниСм.

developer_exception_code: INTEGER

-- Код послСднСго ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

developer_exception_name: STRING

-- Имя, ассоциированноС с послСдним ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

is_developer_exception: BOOLEAN

-- Π‘Ρ‹Π»ΠΎ Π»ΠΈ послСднСС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°?

is_developer_exception_of_name (name: STRING): BOOLEAN

-- Π˜ΠΌΠ΅Π΅Ρ‚ Π»ΠΈ послСднСС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° имя name?

ensure

Result := is_developer_exception and then

equal (name, developer_exception_name)



Иногда ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° контСкст - ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, структура ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°:


set_developer_exception_context (c: ANY)

-- ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ c ΠΊΠ°ΠΊ контСкст, связанный с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ

-- ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° trigger).

require

context_exists: c /= Void

developer_exception_context: ANY

-- ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚, установлСнный послСдним Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ

set_developer_exception_context

-- void, Ссли Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.



Π­Ρ‚ΠΈ свойства ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ прСдставляСт Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π³ΠΎ процСсса Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ элСмСнтами. Авторы ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· трансляторов ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ тСкстов ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ появлСнии особых случаСв, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ для ΠΈΡ… Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ ΠΏΠΎ сути, Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π² Π½Π΅ΠΌ Π½Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° для Ρ‚Π΅Ρ…, ΠΊΠΎΠΌΡƒ нравится Ρ‚Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

ΠœΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, совмСстимого с примСняСмым ОО-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ идСям ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ. Благодаря инструкции retry, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ получился Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ строгим ΠΈΠ·-Π·Π° Π°ΠΊΡ†Π΅Π½Ρ‚Π° Π½Π° ΡΠ΄Π΅Ρ€ΠΆΠ°Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ обсудим, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹.

ДисциплинированныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹, Π΄Π°ΡŽΡ‚ способ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с аномалиями, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈ Π² процСссС выполнСния: Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, сигналами Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ void ссылкам.

Π˜ΡΡΠ»Π΅Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Π½Π°ΠΌΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ основан Π½Π° ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, - Π½ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° фактичСски ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΎΡ‚ΠΊΠ°Π· Π² достиТСнии Ρ†Π΅Π»ΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, послС исправлСния ситуации ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ retry), Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρƒ.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² языках Ada, CLU, PL/1 Π½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ этой ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’ языкС Ada Π΅Π΅ инструкция


Raise exc



ΠΏΡ€Π΅Ρ€Π²Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅, ΠΈΠ»ΠΈ Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅. Но здСсь Π½Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ дСйствия ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ смотрят Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ просто ΠΊΠ°ΠΊ Π½Π° срСдство ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… случаСв, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² основной Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π’Π°ΠΊΠΈΠ΅ прилоТСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ фактичСски raise ΠΊΠ°ΠΊ goto, Ρ‡Ρ‚ΠΎ, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, опасно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. По ΠΌΠΎΠ΅ΠΌΡƒ мнСнию, ΠΎΠ½ΠΈ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΈΠ·Π½Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ свойством. Она присуща Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΡŽΡ‰ΠΈΡ… программистов, Π·Π½Π°ΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΊ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π½Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… условий - Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ошибок. Вторая Ρ‚ΠΎΡ‡ΠΊΠ° зрСния присуща ΡƒΡ‡Π΅Π½Ρ‹ΠΌ, ΠΎΠ·Π°Π±ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ систСматичСским конструированиСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Они с ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π½ΠΈΠ΅ΠΌ относятся ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ, рассматривая ΠΈΡ… ΠΊΠ°ΠΊ Π½Π΅Ρ‡Ρ‚ΠΎ нСчистоС, ΡΡ‚Π°Ρ€Π°ΡŽΡ‰Π΅Π΅ΡΡ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ стандартныС ΠΏΡ€Π°Π²ΠΈΠ»Π° управлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ структурами. НадСюсь, Π²Ρ‹ΡˆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ способСн ΠΏΡ€ΠΈΠΌΠΈΡ€ΠΈΡ‚ΡŒ ΠΎΠ±Π΅ стороны.