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

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

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

ДостиТимыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² классичСском ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° нСдостиТимости рассматриваСтся Π² Ρ‚Π°ΠΊΠΈΡ… классичСских ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ…, ΠΊΠ°ΠΊ Pascal, C ΠΈ Ada, Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ с этих случаСв. (Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ, Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· этих ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ², ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот Ρ€Π°Π·Π΄Π΅Π» ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ, Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌΡƒ ОО-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.)

ВсС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ стСковоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² динамичСской памяти. Π―Π·Ρ‹ΠΊΠΈ C ΠΈ Ada ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ модСль, Π½ΠΎ для упрощСния Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, рассматривая статику ΠΊΠ°ΠΊ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ случай размСщСния Π² стСкС. МоТно ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ статичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния ΠΈ находятся Π² ΠΊΠΎΠ½Ρ†Π΅ стСка. Π’ языкС Pascal ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² самом внСшнСм Π±Π»ΠΎΠΊΠ΅.

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

ΠŸΡ€ΠΈ этих допущСниях ΠΈ упрощСниях Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Ρ‹, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π² стСкС ΠΈΠ»ΠΈ присоСдинСнныС ΠΊ ссылкС, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΉ Π² стСкС, достиТимыС ΠΈ нСдостиТимыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Рис. 9.6.  Π–ΠΈΠ²Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ - стСк ΠΈ динамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ (ΠΆΠΈΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Ρ‹ Π² сСрый Ρ†Π²Π΅Ρ‚)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° нСдостиТимости Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π² динамичСской памяти. Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ всСгда ΠΏΠΎΠ΄ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΊ сущностям ссылочного Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования памяти для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², нСпосрСдствСнно Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π² стСкС. Она ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Π° просто ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ освобоТдСния стСка ΠΏΡ€ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠ°. НачнСм рассмотрСниС со ссылок, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π² стСкС. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΈΡ… ссылками ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°ΠΌΠΈ (reference origins). Они ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ толстыми стрСлками Π½Π° рисункС ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚:

[x]. (O1) Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… сущностСй ΠΈΠ»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ссылочного Ρ‚ΠΈΠΏΠ° (ΠΊΠ°ΠΊ Π΄Π²Π΅ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… ссылки Π½Π° рисункС).

[x]. (O2) Поля ссылочного Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², располоТСнных Π² стСкС (Π½ΠΈΠΆΠ΅ лСТащая ссылка Π½Π° рисункС).

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объявлСния Ρ‚ΠΈΠΏΠ° ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, написанный Π½Π° смСси Pascal ΠΈ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² этой ΠΊΠ½ΠΈΠ³Π΅ ( reference G - ссылка, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ подсоСдинСна ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° G):


type

COMPOSITE =

record

m:INTEGER

r:reference COMPOSITE

end

...

procedure p is

local

n: INTEGER

c: COMPOSITE

s: reference COMPOSITE

do

...

end


ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ p Ρ‚Ρ€ΠΈ значСния Π²Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² стСк:

Рис. 9.7.  Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ сущностСй для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

ВрСмя Π½ΠΎΠ²Ρ‹ΠΌΠΈ значСниями ΡΠ²Π»ΡΡŽΡ‚ΡΡ: Ρ†Π΅Π»ΠΎΠ΅ n, Π½Π΅ Π²Π»ΠΈΡΡŽΡ‰Π΅Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ управлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ (ΠΎΠ½ΠΎ исчСзнСт ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Π½Π΅ ссылаСтся Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹); ссылка s, ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ О1; ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ‚ΠΈΠΏΠ° COMPOSITE. Π‘Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТится Π² стСкС ΠΈ занятая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. Но ΠΎΠ½ содСрТит ссылочноС ΠΏΠΎΠ»Π΅ r, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ О2.

Π˜Ρ‚Π°ΠΊ, для опрСдСлСния достиТимости ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² классичСском ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΡΡ‚Π΅ΠΊΠΎΠ²ΡƒΡŽ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ со ссылок Π² стСкС (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ссылочного Ρ‚ΠΈΠΏΠ° ΠΈ ссылочныС поля ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²), ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ссылочныС поля присоСдинСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ссли ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚.

ДостиТимыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ОО-ΠΌΠΎΠ΄Π΅Π»ΠΈ

ОО-структура Π΄Π°Π½Π½Ρ‹Ρ…, прСдставлСнная Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… лСкциях, ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отличия ΠΎΡ‚ рассмотрСнной Π²Ρ‹ΡˆΠ΅ структуры.

Рис. 9.8.  Π”ΠΎΡΡ‚ΠΈΠΆΠΈΠΌΠΎΡΡ‚ΡŒ Π² ОО-ΠΌΠΎΠ΄Π΅Π»ΠΈ

Π Π°Π±ΠΎΡ‚Π° любой систСмы начинаСтся с создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ систСмы, ΠΈΠ»ΠΈ просто ΠΊΠΎΡ€Π½Π΅ΠΌ (ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ с ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ классом, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ статичСски). ΠšΠΎΡ€Π΅Π½ΡŒ Π² этом случаС являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠ².

Π”Ρ€ΡƒΠ³ΠΎΠ΅ мноТСство ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠ² Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ присутствия Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Рассмотрим ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²ΠΈΠ΄Π°


some_routine is

local

rb1, rb2: BOOK3

eb: expanded BOOK3

do

. . .

create rb1

. . .ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ rb1, rb2 ΠΈ eb . . .

end


ΠŸΡ€ΠΈ любом Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ some_routine, инструкции Π² Ρ‚Π΅Π»Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° rb1, rb2, eb ΠΈ Π½Π° присоСдинСнныС ΠΊ Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ мноТСства достиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ зависимы ΠΎΡ‚ корня. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, для eb всСгда Π΅ΡΡ‚ΡŒ присоСдинСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° rb1 ΠΈ rb2 ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… запусках ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ void.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ сущности ссылочного Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ rb1 ΠΈ rb2, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² стСкС. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ сущности Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ eb, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, располоТСнным Π² стСкС.

Когда Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² some_routine, ΠΈΡΡ‡Π΅Π·Π°ΡŽΡ‚ сущности rb1, rb2 ΠΈ eb Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ всС присоСдинСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ мноТСства ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠ². Π­Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ становятся нСдостиТимыми, - ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΡΡ‚Π°Ρ‚ΡŒ зависимыми ΠΎΡ‚ корня ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠ².

Допустим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Π° - это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ рассматриваСмого класса ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΉ тСкст ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:


some_routine is

local

rb1, rb2: BOOK3

eb: expanded BOOK3

do

create rb1;create rb2

a := rb1

end


На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, создаваСмыС Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ some_routine, ΠΈ ссылки с присоСдинСнными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Рис. 9.9.  ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, присоСдинСнныС ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ сущностям

Когда Π²Ρ‹Π·ΠΎΠ² some_routine Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ О, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ†Π΅Π»ΡŒ Π²Ρ‹Π·ΠΎΠ²Π°, всС Π΅Ρ‰Π΅ доступСн (ΠΈΠ½Π°Ρ‡Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ этого Π²Ρ‹Π·ΠΎΠ²Π°). ПолС Π° этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° О Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π° присоСдинСно ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ B1 класса BOOK3, созданного ΠΏΠ΅Ρ€Π²ΠΎΠΉ инструкциСй создания нашСй ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ B1 остаСтся достиТимым ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π°. Напротив, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ B2 ΠΈ EB, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ присоСдинСны ΠΊ rb2 ΠΈ eb Π²ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π°, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ становятся нСдостиТимыми: Π² соотвСтствии с тСкстом ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ "Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ»" Π’2 ΠΈΠ»ΠΈ Π•Π’.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² ОО-ΠΌΠΎΠ΄Π΅Π»ΠΈ

Подводя ΠΈΡ‚ΠΎΠ³ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Ρ‹ ΠΈ соотвСтствСнно достиТимыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅, достиТимыС ΠΈ нСдостиТимыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния систСмы мноТСство ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠ² Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

[x]. ΠšΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ систСмы.

[x]. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, присоСдинСнный ΠΊ локальной сущности, ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ, выполняСмой Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ локальная ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Result).

Π›ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, прямо ΠΈΠ»ΠΈ косвСнно зависящиС ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠ², достиТимы. Π›ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ нСдостиТимы. ΠŸΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Π½ΡΡ‚ΡƒΡŽ нСдостиТимыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ) сохраняя ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ сСмантики выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° нСпрСдсказуСмости ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° мноТСство достиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: созданиС ΠΈ отсоСдинСниС.

Π’Π°ΠΊΠΎΠ΅ прСдсказаниС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях для строго управляСмых структур Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ класс, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ список, - LINKED_LIST, рассматриваСмый ΠΏΠΎΠ·ΠΆΠ΅, ΠΈ связанный с Π½ΠΈΠΌ класс LINKABLE, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ элСмСнты этого списка. ЭкзСмпляр LINKABLE создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ класса LINKED_LIST ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ нСдостиТимым Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ remove, ΡƒΠ΄Π°Π»ΡΡŽΡ‰Π΅ΠΉ элСмСнты списка. Для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… классов ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС ΠΎΡΠΎΠ±Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. (Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π΅Π½ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ.)

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, хотя ΠΈ Π²Π°ΠΆΠ΅Π½, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… случаСв. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС приходится ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° слоТный вопрос - Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с нСдостиТимыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ?

Π’Ρ€ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°

Π‘ нСдостиТимыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ трСмя способами:

[x]. ΠŸΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ…Π²Π°Ρ‚ΠΈΡ‚ памяти для размСщСния всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: достиТимых ΠΈ нСдостиТимых. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π½Π΅ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ (casual) ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ.