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

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

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

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ абстрактных ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. НапримСр, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ прСдусловиС Π² опСрациях Π½Π°Π΄ массивом, Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΊΠ°ΠΊ


index_not_too_small: lower <= i

index_not_too_large: i <= upper



ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² Ρ„ΠΎΡ€ΠΌΠ΅


index_in_bounds: correct_index (i)



с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ


correct_index (i: INTEGER): BOOLEAN is

-- ЯвляСтся Π»ΠΈ i Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Ρ€Π°Π½ΠΈΡ† массива?

do

Result := (i >= lower) and (i <= upper)

ensure

definition: Result = ((i >= lower) and (i <= upper))

end



Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ прСимущСство использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² выраТСниях Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π°ΡŽΡ‚ способ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ограничСния Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ силы, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ·-Π·Π° отсутствия ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ порядка. ΠΠ΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ нашСго Ρ†ΠΈΠΊΠ»Π° для maxarray


-- Result являСтся максимумом Π½Π°Ρ€Π΅Π·ΠΊΠΈ массива t Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [t.lower,i]



Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ Ρ‚Π°ΠΊ


Result = (t.slice (lower, i)).max



Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ slice Π²Ρ‹Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Ρ€Π΅Π·ΠΊΡƒ - массив с индСксами ΠΎΡ‚ lower Π΄ΠΎ i, - Π° функция max Π΄Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт этого массива.

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±Ρ‹Π» исслСдован Π² [M 1995a] ΠΊΠ°ΠΊ способ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ силы ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, - Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊ матСматичСскому Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Ρƒ коррСктности ПО. Π’ этом исслСдовании Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ - использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π² процСссС Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ для Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ…, ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… систСм, строя ΠΌΠ½ΠΎΠ³ΠΎΡΡ€ΡƒΡΠ½ΡƒΡŽ структуру, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ условныС Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°. Вторая идСя - ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ языка чисто Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ - IFL (Intermediate Functional Language), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² выраТСниях. Π―Π·Ρ‹ΠΊ IFL являСтся подмноТСством Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ этой ΠΊΠ½ΠΈΠ³ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ конструкции, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π»ΡŽΠ±Ρ‹Π΅ присваивания.

Ясно, Ρ‡Π΅ΠΌ ΠΌΡ‹ рискуСм: появлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² выраТСниях ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… элСмСнтов (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ) Π² чисто Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ, Π΄ΠΎ сСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΌΠΈΡ€ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π‘Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ ясноС ΠΈ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ»Π΅ΠΉ, обсуТдаСмоС Ρ€Π°Π½Π΅Π΅: инструкции ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, утвСрТдСния ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ Π²ΠΎΡ€ΠΎΡ‚Π° Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π³ΠΎΡ€ΠΎΠ΄Π° ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΠΎΠ»Ρ‡ΠΈΡ‰Π°ΠΌ.

ВсС ΠΆΠ΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΎΠΏΡ€ΠΎΡ‚ΠΈΠ²Π»ΡΡ‚ΡŒΡΡ ΠΌΠΎΡ‰ΠΈ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ свои нСдостатки.

[x]. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ языка спСцификаций, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ эффСктивности ΠΈ простоты изучСния.

[x]. ВСроятно, Ρ…ΡƒΠΆΠ΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ нСясно, достаточны Π»ΠΈ общСпринятыС языки ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΎΠ³ΠΎ СстСствСнного ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ вСрят, - язык Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ порядка. Π­Ρ‚ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΌ Π½Π΅ позволяСт Π½Π°ΠΌ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ нСпосрСдствСнный интСрСс для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² утвСрТдСниях, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "Π³Ρ€Π°Ρ„ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†ΠΈΠΊΠ»ΠΎΠ²" (Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ†ΠΈΠΊΠ»Π°). ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΎ ΠΊΠ°ΠΊ r+ r = , Π³Π΄Π΅ r - это ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π³Ρ€Π°Ρ„Π΅, Π°+ Π΅Π³ΠΎ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅. Π₯отя ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС язык спСцификации, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ эти понятия, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков этого Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚.

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

Но остаСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ элСмСнты. Π›ΡŽΠ±Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ рСализованная функция, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² утвСрТдСниях для спСцифицирования свойств, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ "Π±Π΅Π·ΡƒΠΏΡ€Π΅Ρ‡Π½ΠΎΠΉ", Π±Π΅Π· ΠΎΠ±Π²ΠΈΠ½Π΅Π½ΠΈΠΉ Π΅Π΅ Π² импСративности, - ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ абстрактного состояния.

Π­Ρ‚ΠΎ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ достаточно ясно Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅; Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΡŠΡΠ·Ρ‹ΠΊΠ° IFL ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ глобальноС состояниС систСмы, Π»ΠΈΠ±ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… эквивалСнтов, Π² частности ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ:

[x]. присваивания Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ;

[x]. присваивания Π² Ρ†ΠΈΠΊΠ»Π°Ρ…;

[x]. Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π΅ входящих Π² IFL.

Если особо Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΈΡ€ΠΈΠΆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ функциями, достаточно простыми с ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚ΠΎ использованиС Π² утвСрТдСниях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π°Π΅Ρ‚ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ абстракции.

НСкоторыС тСхничСскиС вопросы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ внимания. Ѐункция f, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ r, ΠΌΠΎΠΆΠ΅Ρ‚ сама ΠΈΠΌΠ΅Ρ‚ΡŒ утвСрТдСния, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ full ΠΈ correct_index. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния: Ссли ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ r ΠΌΡ‹ вычисляСм ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ f, Ρ‚ΠΎ Π½Π΅ придСтся Π»ΠΈ Π½Π°ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ для f? НСтрудно ΡΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ зацикливания, Ссли ΠΏΠΎΠΉΡ‚ΠΈ ΠΏΠΎ этому ΠΏΡƒΡ‚ΠΈ. Но Π΄Π°ΠΆΠ΅ ΠΈ Π±Π΅Π· этого риска Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ для f. Π­Ρ‚ΠΎ Π±Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассматриваСм "Π½Π° Ρ€Π°Π²Π½Ρ‹Ρ…" ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ Π½Π°ΡˆΠΈΡ… вычислСний, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ r, ΠΈ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ утвСрТдСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ f. Π’ противовСс этому сформулируСм ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ утвСрТдСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‚, ΠΈΡ… ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€ΠΈΡΡ‚Π°Π»ΡŒΠ½ΠΎ ясной. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ простоС:

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ вычислСния утвСрТдСния

Π’ процСссС вычислСния ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, входящиС Π² Π½ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π±Π΅Π· вычислСния ассоциированных ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ.

Если Π²Ρ‹Π·ΠΎΠ² f встрСчаСтся ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ утвСрТдСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ r, Ρ‚ΠΎ слишком ΠΏΠΎΠ·Π΄Π½ΠΎ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ, удовлСтворяСт Π»ΠΈ f своим утвСрТдСниям. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠΌ являСтся врСмя, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ вопрос использования f Π² ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠΌ ΠΊ r.

РассматривайтС f ΠΊΠ°ΠΊ ΠΎΡ…Ρ€Π°Π½Π½ΠΈΠΊΠ° ядСрного прСдприятия, Π² обязанности ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° посСтитСлСй. ΠžΡ…Ρ€Π°Π½Π½ΠΈΠΊΠΎΠ² Ρ‚ΠΎΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‚ посСтитСлСй.

Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ класса ΠΈ сСмантика ссылок

ОО-модСль, разрабатываСмая Π΄ΠΎ сих ΠΏΠΎΡ€, Π²ΠΊΠ»ΡŽΡ‡Π°Π»Π° Π΄Π²Π° частично Π½Π΅ связанных аспСкта, ΠΎΠ±Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹:

[x]. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ.

[x]. Гибкая модСль ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° выполнСния, Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ рассмотрСнная Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… лСкциях, сущСствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ ссылки.

К Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, эти ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свойства ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ трудностСй ΠΏΡ€ΠΈ ΠΈΡ… совмСстном использовании.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° вновь Π² динамичСски создаваСмых псСвдонимах, ΠΏΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΡ… нас ΠΎΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности класса Π½Π° Ρ‚ΠΎΠΌ основании, Ρ‡Ρ‚ΠΎ класс Π΄Π΅Π»Π°Π΅Ρ‚ это сам. ΠœΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ класса ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ m+n свойств, Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ (Ссли ΠΌΡ‹ ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… INV, игнорируя прСдусловия ΠΈ постусловия, Π½Π΅ ΠΈΠ³Ρ€Π°ΡŽΡ‰ΠΈΠ΅ здСсь Ρ€ΠΎΠ»ΠΈ):

1 КаТдая ΠΈΠ· m ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ создания ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉ INV.

2 КаТдая ΠΈΠ· n экспортируСмых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ сохраняСт INV.

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, совмСстно эти Π΄Π²Π° условия Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ INV Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ: Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ INV удовлСтворяСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания ΠΈ сохраняСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, Ρ‚ΠΎ ΠΏΠΎ ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ INV истинно Π²ΠΎ всС ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π°.

Π­Ρ‚ΠΎ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ Π²Π΅Ρ€Π½ΠΎ Π² присутствии сСмантики ссылок ΠΈ динамичСских псСвдонимов. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ опСрациями Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Π°ΠΆΠ΅ Ссли a.r сохраняСт INV для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ОА, присоСдинСнного ΠΊ Π°, Ρ‚ΠΎ нСкоторая опСрация b.s (для b, присоСдинСнного ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ,) ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€ΡƒΡˆΠΈΡ‚ΡŒ INV для ОА. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ условия (1) ΠΈ (2) ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Π½ΠΎ INV ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ.

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ А ΠΈ Π’ классы, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса:


class A ... feature forward: B ... end

class B ... feature backward: A ... end



ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ссылки Π±Ρ‹Π»ΠΈ связаны ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ условиСм. Если ссылка forward ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ экзСмпляр класса Π’, Ρ‚ΠΎ ссылка backward этого экзСмпляра, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ экзСмпляр класса А. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΎ ΠΊΠ°ΠΊ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса А: