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

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

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

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ обсуТдСнии ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ, сигнатура Π½Π΅ являСтся подходящим ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅ΠΌ распознавания. НапримСр: конструкторы make_cartesian ΠΈ make_polar ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ сигнатуру, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ придСтся Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ искусствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· конструкторов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ конструктора.

Наша Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° каТСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ Π²ΠΎ всСх ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ…. ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ усилий (Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ создания), Ссли инициализация ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ°; ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ позволяСт ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ; Π²Π²ΠΎΠ΄ΠΈΡ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ создания, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π΅ создавая Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ; каТдая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания ΠΈΠΌΠ΅Π΅Ρ‚ собствСнноС имя, облСгчая ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π΅Π΅ прСдназначСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ make_polar .

Π•Ρ‰Π΅ ΠΎ ссылках

МодСль ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° выполнСния опрСдСляСт Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ссылок. Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡ… свойства, Π² частности, понятиС пустой (void) ссылки ΠΈ связанныС с Π½Π΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Бостояния ссылок

Бсылка ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… состояний - ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустой ΠΈΠ»ΠΈ присоСдинСнной. ΠœΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ссылка всСгда находится Π² состоянии void ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ присоСдинСнной благодаря созданию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Π±ΠΎΠ»Π΅Π΅ полная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ всС возмоТности ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ состояниями:

Рис. 8.11.  Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ состояния ссылки ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹

Помимо создания, ссылка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ присваивания. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ сСбя, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ трСмя понятиями - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ссылкой ΠΈ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ:

[x]. "ΠžΠ±ΡŠΠ΅ΠΊΡ‚" - это понятиС ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° выполнСния; любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся экзСмпляром класса, создаСтся Π²ΠΎ врСмя выполнСния систСмы ΠΈ прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ.

[x]. "Бсылка" - это понятиС ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° выполнСния. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки Π»ΠΈΠ±ΠΎ void , Π»ΠΈΠ±ΠΎ ΠΎΠ½Π° присоСдинСна ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π’ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ "присоСдинСния" ΡƒΠΆΠ΅ появлялось. ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½Π°Ρ ссылка ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

[x]. "Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ" - это статичСскоС понятиС, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠ΅ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ тСксту, - это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² тСкстС класса, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния. Бущностями ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ константы, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Если b - ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ссылочного Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния являСтся ссылка, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присоСдинСна ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ O. Π’ этом случаС Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ b присоСдинСна ΠΊ O.

Π’Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈ пустыС ссылки

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


some_entity.some_feature (arg1, ...)


Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ выполнСния Π²Ρ‹Π·ΠΎΠ²Π° ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ some_entity Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ присоСдинСна ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ†Π΅Π»Π΅Π²ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Если случится, Ρ‡Ρ‚ΠΎ some_entity ссылочного Ρ‚ΠΈΠΏΠ° ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ void , Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ОО-систСма Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ void . Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (exception).(Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 12)

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ прСкрасно, Ссли Π±Ρ‹ компилятор провСрял ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ тСкст ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π», Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ события Π½Π΅ встрСтятся Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΎΠ½ провСряСт отсутствиС нСсовмСстимости Ρ‚ΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. К соТалСнию, такая Ρ†Π΅Π»ΡŒ нСдостиТима для компиляторов, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ТСстких ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° язык. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈΠΌΠ΅Π»ΠΈ присоСдинСнный Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, возлагаСтся Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΅ΡΡ‚ΡŒ простой способ - ΠΎΠΊΡ€ΡƒΠΆΠ°Ρ‚ΡŒ всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ тСстом:


if "x Π½Π΅ void" then

x.f (...)

else

...

end


Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π² качСствС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ трСбования, хотя ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ· контСкста Π½Π΅ слСдуСт, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ пуст.

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

[x]. Π’ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС доступныС ΠΏΡ€ΠΈΠ΅ΠΌΡ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ситуаций, примСняя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, срСдства, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ.

[x]. Если ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ малСйшиС сомнСния, Ρ‚ΠΎ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ПО с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ссылками

ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов измСнСния значСния ссылки x: использованиС инструкции создания Π² Ρ„ΠΎΡ€ΠΌΠ΅ create x , ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ ссылкС. Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрСсныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, доступныС ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со ссылками.

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ссылки ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ

ΠšΠ»Π°ΡΡΡ‹, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ - Ρƒ Π½ΠΈΡ… Π±Ρ‹Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, Ρ‚Π°ΠΊΠΈΠ΅ классы ΠΏΠΎΡ‡Ρ‚ΠΈ бСсполСзны, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚ способа ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². НСобходимы способы ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ссылок, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ этом инструкций Π² Π΄ΡƒΡ…Π΅ языков Pascal-C-Java-C++, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡŽ: my_beloved.loved_one := me (Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ»Π΅ loved_one), Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ скрытия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ синтаксичСски Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π² нашСй Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.

Для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ обязан Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ класса для этих Ρ†Π΅Π»Π΅ΠΉ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π² класс PERSON1 ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ loved_one. Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:


class PERSON2 feature

name: STRING

loved_one, landlord: PERSON2

set_loved (l: PERSON2) is

-- ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ loved_one Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ l.

do

loved_one := l

end

end


ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° set_loved присваиваСт ссылочному полю loved_one Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ экзСмпляра PERSON2 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ссылки l. БсылочноС присваиваниС (лСвая ΠΈ правая части ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылками) присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ источника (ΠΏΡ€Π°Π²ΠΎΠΉ части) Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ссылкС (слСва).

Π­Ρ„Ρ„Π΅ΠΊΡ‚ ссылочного присваивания ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½: цСлСвая ссылка становится присоСдинСнной ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ присоСдинСн источник - ΠΈΠ»ΠΈ становится void, Ссли Ρ‚Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ источник. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с ситуации, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠΉ Π½Π° рис.8.12 , Π³Π΄Π΅ поля landlord ΠΈ loved_one всСх ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠΊΠ° пусты.

Рис. 8.12.  ΠŸΠ΅Ρ€Π΅Π΄ присваиваниСм ссылкС

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ выполняСтся Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹:


a.set_loved (r)


Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ a присоСдинСна ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ O1, Π° ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ r - ΠΊ O3. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ set_loved выполнится присваиваниС:


loved_one := l


Π—Π΄Π΅ΡΡŒ Π² Ρ€ΠΎΠ»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выступаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ O1, сущности l ΠΈ r ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ - ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ O3. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ измСнится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля loved_one ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° O1 - ссылка присоСдинится ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ O3, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС:

Если Π±Ρ‹ r Π±Ρ‹Π»ΠΎ пустой ссылкой, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ присваивания стала Π±Ρ‹ ΠΈ ссылка Π² ΠΏΠΎΠ»Π΅ loved_one ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° O1.

Рис. 8.13.  ΠŸΠΎΡΠ»Π΅ присваивания ссылки

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ссылок

Наряду с присваиваниСм Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ Π² тСстС - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, присоСдинСны Π»ΠΈ Π΄Π²Π΅ ссылки ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Для этого Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ эквивалСнтности =.

Если x ΠΈ y - сущности ссылочного Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:


x = y


истинно Ρ‚ΠΎΠ³Π΄Π° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π΅ ссылки пусты ΠΈΠ»ΠΈ присоСдинСны ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ "Π½Π΅ эквивалСнтно" записываСтся ΠΊΠ°ΠΊ /=.