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

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

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

[x]. Π‘ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сборки мусора Π² этом случаС Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ² ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ со ссылками Π½Π° ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π΄Π°ΠΆΠ΅ Ссли Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ всСго нСсколько ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ссылок ΠΈΠ»ΠΈ ΠΈΡ… Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сущСствСнной ΠΏΠΎΡ‚Π΅Ρ€Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

[x]. Π‘ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ модСлирования: ссылки Π½Π° ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ упрощСния описания систСмы, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅: Π΄Π²Π΅ сСмантики - ссылок ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ рассматриваСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ информация, ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.

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

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅

Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° присваивания, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, распространяСтся Π΅Ρ‰Π΅ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ - ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, сущСствуСт ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ»ΠΈ функция) Π² Ρ„ΠΎΡ€ΠΌΠ΅:


r (..., x: SOME_TYPE, ...)


Π—Π΄Π΅ΡΡŒ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ x это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² r. Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² r Π² любой ΠΈΠ· Π΄Π²ΡƒΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ - ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²:


r (..., y, ...)

t.r (..., y, ...)


Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ y являСтся фактичСским Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ x.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ r ΠΏΡ€ΠΈ любом ΠΈΠ· этих Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² начинаСтся с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² значСниями ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Для простоты ΠΈ согласованности ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° присваивания. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, инициализация Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° эквивалСнтна Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ присваивания:


x := y


Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ y ΠΊ x являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π² Ρ„ΠΎΡ€ΠΌΠ΅ x := y

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ x ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³Π΄Π΅ x - Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π° y - фактичСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π°.

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях x являСтся Ρ†Π΅Π»ΡŒΡŽ присоСдинСния, Π° y - источником.

Одни ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΎΠ±ΠΎΠΈΡ… случаях для опрСдСлСния коррСктности присоСдинСния (Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² Ρ†Π΅Π»ΠΈ ΠΈ источника). ΠŸΡ€ΠΈ условии коррСктности ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ эффСкт присоСдинСния Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния.

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅: ссылочноС ΠΈ ΠΊΠΎΠΏΠΈΠΈ

ΠŸΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ссылочного присваивания ΠΌΡ‹ ΡƒΠΆΠ΅ познакомились с эффСктом присоСдинСния. Если источник ΠΈ Ρ†Π΅Π»ΡŒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылками, Ρ‚ΠΎ эффСкт присваивания:


x := y


ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ x ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки y. Π­Ρ‚ΠΎ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ нСсколькими ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ y являСтся void, Ρ‚ΠΎ опСрация вмСсто присоСдинСния сдСлаСт ΠΈ x Ρ€Π°Π²Π½Ρ‹ΠΌ void; Ссли y присоСдинСн ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Ρ‚ΠΎ ΠΈ x Π±ΡƒΠ΄Π΅Ρ‚ присоСдинСн ΠΊ этому ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏΡ‹ x ΠΈ y Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹? БсылочноС присваиваниС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, Π° Π²ΠΎΡ‚ повСрхностная Ρ„ΠΎΡ€ΠΌΠ° копирования Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°. Π’Π°ΠΊ ΠΈ происходит. Рассмотрим объявлСния:


x, y: expanded SOME_CLASS


ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ x := y Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, присоСдинСнного ΠΊ y, Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, присоСдинСнного ΠΊ x, создавая Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:


x.copy (y)


ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ являСтся лСгальной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, эквивалСнтной Π² этом случаС ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡŽ. (Π’ случаС ссылок ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ присваиваниС Ρ‚ΠΎΠΆΠ΅ Π»Π΅Π³Π°Π»ΡŒΠ½Ρ‹, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΉ эффСкт.)

Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° копирования для Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ эффСкт для всСх базисных Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅ всС относятся ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ. НапримСр, Ссли m ΠΈ n Ρ‚ΠΈΠΏΠ° INTEGER, Ρ‚ΠΎ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΠΎΡ‚ присваивания m := n, (ΠΈΠ»ΠΈ ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) копирования значСния n Π² m.

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈ ΠΊ связанной с присваиваниСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ эквивалСнтности. Рассмотрим Π±ΡƒΠ»Π΅Π²Ρ‹ выраТСния: x = y ΠΈ x /= y. Для x ΠΈ y ссылочных Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΈΡΡ‚ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ выраТСния (Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ) достигаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° источник ΠΈ Ρ†Π΅Π»ΡŒ ΠΎΠ±Π° ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ void ΠΈΠ»ΠΈ ΠΎΠ±Π° присоСдинСны ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Для Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… x ΠΈ y, такая сСмантика Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠ°, - здСсь дСйствуСт другая сСмантика, основанная Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ сравнСнии Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² этом случаС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ x = y ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ equal (x, y).

Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΡ€ΠΈ обсуТдСнии наслСдования, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сСмантику equal для придания ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ смысла эквивалСнтности экзСмпляров Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ отразится Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ эквивалСнтности =, которая ΠΏΠΎ сообраТСниям бСзопасности ΠΈ простоты всСгда ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ standard_equal.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ присваивания ΠΈ сравнСния обобщаСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΈ.

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ y ΠΊ x ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° x, Ссли x ΠΈ y ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ. Π­Ρ‚ΠΎ ссылочноС присоСдинСниС, Ссли x ΠΈ y ссылочного Ρ‚ΠΈΠΏΠ°. Аналогично, тСсты: x=y ΠΈ x/=y ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ сравнСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для x ΠΈ y Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²; это ссылочноС сравнСниС, Ссли x ΠΈ y ссылочного Ρ‚ΠΈΠΏΠ°.

Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎΠ΅ присоСдинСниС

Π’ рассматриваСмых Π΄ΠΎ сих ΠΏΠΎΡ€ случаях источник ΠΈ Ρ†Π΅Π»ΡŒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π»ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ - ΠΎΠ±Π° Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ссылочного Ρ‚ΠΈΠΏΠ°. Π§Ρ‚ΠΎ Ссли ΠΎΠ½ΠΈ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ?

Π’Π½Π°Ρ‡Π°Π»Π΅ рассмотрим ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π² присваивании x := y Ρ†Π΅Π»ΡŒ x Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π° источник y - ссылочного Ρ‚ΠΈΠΏΠ°. ЕдинствСнно ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Π² этом случаС являСтся сСмантика копирования: ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, присоСдинСнного ΠΊ y, Π² поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, присоСдинСнного ΠΊ x. ВсС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли y Π½Π΅ void Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния. Если y - void, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. (Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 12)

Для Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ x тСст x = Void Π½Π΅ являСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ появлСния ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации; ΠΎΠ½ просто Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false. Но Π½Π΅Ρ‚ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ сСмантики для присваивания x := Void, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ всякая подобная ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ появлСнию ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ случай присваивания: x := y, Π³Π΄Π΅ x ссылочного Ρ‚ΠΈΠΏΠ°, Π° y - Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ. Π’ΠΎΠ³Π΄Π° Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния y всСгда присоСдинСн ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ OY, ΠΈ присоСдинСниС Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ x ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Казалось Π±Ρ‹, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ x нСпосрСдствСнно ΠΊ OY. Однако это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ ΠΊ созданию ссылки Π½Π° ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ссылки Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ нашими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ стратСгиСй являСтся ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ источника OY ΠΈ присоСдинСниС x ΠΊ созданной ΠΊΠΎΠΏΠΈΠΈ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


class C feature

...

end

class COMPOSITE2 feature

x: C

y: expanded C

reattach is

do x := y end

end


ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° reattach Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ присваивания x Π±ΡƒΠ΄Π΅Ρ‚ присоСдинСн ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΡΠ²Π»ΡΡŽΡ‰Π΅ΠΌΡƒΡΡ ΠΊΠ»ΠΎΠ½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° y.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΎΠ±ΠΎΠ±Ρ‰Π°Π΅Ρ‚ сСмантику присоСдинСния ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… случаСв:

Π’ΠΈΠΏ Ρ†Π΅Π»ΠΈ x Π’ΠΈΠΏ источника y Бсылочный Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ Бсылочный БсылочноС присоСдинСниС ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: эффСкт x := clone(y) Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: эффСкт x.copy(y) Ошибка, Ссли y - void ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: эффСкт x.copy(y)

Π’Π°Π±Π»ΠΈΡ†Π° 8.1. Π­Ρ„Ρ„Π΅ΠΊΡ‚ присоСдинСния x:=y