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

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

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

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

Π€ΠΎΡ€ΠΌΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ клонирования ΠΈ эквивалСнтности

Π€ΠΎΡ€ΠΌΠ° Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ clone ΠΈ equal являСтся стилСвой ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд нотация:


clone (x)

equal (x, y)


выглядит Π½Π΅ слишком ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ. Π”ΠΎΠ³ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠ΅ слСдованиС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "ОО-стиля вычислСний" ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ (Π‘ΠΌ. "ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ вычислСний", лСкция 7):


x.twin -- twin это Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ - ΠΊΠ»ΠΎΠ½.

x.is_equal (y)


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


if x = Void then

z := Void

else

z := x.twin

end


БоотвСтствСнно, рСализация Π²Ρ‹Π·ΠΎΠ²Π° is_equal Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ (and then являСтся Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ and. Π‘ΠΌ. "НСстрогиС Π±ΡƒΠ»Π΅Π²Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ", лСкция 13):


if

((x = Void) and (y = Void)) or

((x /= Void) and then x.is_equal (y))

then

...


ИзлишнС Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ слСдуСт ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этих соглашСний. Нам быстро надоСст ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²ΠΈΡ‚ΠΈΠ΅Π²Π°Ρ‚Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, Π° ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°Π±ΡƒΠ΄Π΅ΠΌ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ соглашСний, сформулированный Π² Π΄Π°Π½Π½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ, Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ Π΅Ρ‰Π΅ ΠΈ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ для x, Ρ€Π°Π²Π½ΠΎΠ³ΠΎ void, - clone (x) Π²Π΅Ρ€Π½Π΅Ρ‚ void, Π° equal (x, y) Π²Π΅Ρ€Π½Π΅Ρ‚ true, Ссли ΠΈ y - void.

Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ copy Π² Ρ„ΠΎΡ€ΠΌΠ΅ x.copy (y) Π½Π΅ создаСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСпустых x ΠΈ y. Π­Ρ‚ΠΎ слСдствиС сСмантики ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ copy, ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ поля ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² поля Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ смысл, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅, Ρ‚Π°ΠΊΠΎΠ΅ условиС для y фиксируСтся Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ прСдусловиСм copy, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π² явном Π²ΠΈΠ΄Π΅ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ввСдСнная Π²Ρ‹ΡˆΠ΅ функция is_equal сущСствуСт Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ систСмы. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ часто ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ спСцифичСскиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ эквивалСнтности элСмСнтов ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ класса, ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π² сСмантику ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Для достиТСния этого эффСкта достаточно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ is_equal Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ классС. Ѐункция equal опрСдСляСтся Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… is_equal (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ использования is_equal), ΠΈ поэтому слСдуСт Π·Π° всСми пСрСопрСдСлСниями is_equal.

Когда Π΅ΡΡ‚ΡŒ функция clone, Ρ‚ΠΎ Π½Π΅Ρ‚ нСобходимости Π² twin. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ функция clone ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ copy. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ clone ΠΊ спСцификС класса достаточно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ copy Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. (Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ лСкция 16)

Бтатус ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

ПослСдниС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ частично прояснили вопрос ΠΎ статусС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ clone, copy, equal, is_equal, deep_clone, deep_equal.

Π­Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ языковыми конструкциями, нСвзирая Π½Π° ΠΈΡ… Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. Они ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ классом ANY основной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Kernel. Π­Ρ‚ΠΎΡ‚ класс ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс, созданный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, автоматичСски становится наслСдником (прямым ΠΈΠ»ΠΈ косвСнным) класса ANY. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° эквивалСнтности ΠΈΠ»ΠΈ копирования. (Π‘ΠΌ. "Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ структура наслСдования", лСкция 16)

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

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

[x]. ОО-вычислСния Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ высоко Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΠΉ структурой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ запросу.

[x]. НСкоторыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ПО, ΡΠ²Π»ΡΡŽΡ‚ΡΡ модСлями Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ косвСнными). Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ слуТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ†Π΅Π»Π΅ΠΉ проСктирования ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

[x]. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ состоит ΠΈΠ· ряда Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… полями. КаТдоС ΠΏΠΎΠ»Π΅ соотвСтствуСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (класса, прямым экзСмпляром ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚).

[x]. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π² частности ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈΠ»ΠΈ ссылкой.

[x]. Бсылка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустой (void) ΠΈΠ»ΠΈ присоСдинСнной ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия x = Void позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ссылки. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° x.f (...) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли x Π½Π΅ пустая ссылка.

[x]. Если объявлСниС класса начинаСтся с прСдлоТСния class C ..., Ρ‚ΠΎ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° CΠ±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ссылку, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присоСдинСна ΠΊ экзСмпляру C. Если Π½Π°Ρ‡Π°Π»ΠΎ объявлСния выглядит ΠΊΠ°ΠΊ expanded class D ..., Ρ‚ΠΎ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° D Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (экзСмпляр D) ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустой ссылкой.

[x]. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (BOOLEAN, CHARACTER, INTEGER, REAL, DOUBLE) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ классы.

[x]. Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ объявлСния Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ составныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

[x]. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ структуры ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ цикличСскиС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ссылок.

[x]. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ создания create x создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ поля значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ присоСдиняСт ΠΊ Π½Π΅ΠΌΡƒ x. Если Π² классС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создания, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ инструкции Π²ΠΈΠ΄Π° create x.creatproc (...) ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ спСцифичСской ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ.

[x]. Для сущностСй ссылочного Ρ‚ΠΈΠΏΠ° присваиваниС (:=) ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° эквивалСнтности (=) ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылочными опСрациями. Для сущностСй Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сСмантика Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ сСмантика распространяСтся ΠΈ Π½Π° ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹.

[x]. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ссылочных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ динамичСскиС псСвдонимы. Они Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ систСмы ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Π΅Π΅ тСкста. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… дСйствий со ссылками ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ классы.

БиблиографичСскиС замСчания

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ идСнтичности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ для Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, особСнно ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Π»Π΅ΠΊΡ†ΠΈΡŽ 13 курса "ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования", ΠΏΠΎΡΠ²ΡΡ‰Π΅Π½Π½ΡƒΡŽ Ρ‚Π°ΠΊΠΈΠΌ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ ΠΊ Π½Π΅ΠΉ.

ГрафичСскиС обозначСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BON (Business Object Notation) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Jean-Marc Nerson ΠΈ Kim Walden [Walden 1995]. James McKim ΠΈ Richard Bielak Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ рассмотрСли прСимущСства Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ [Bielak 1994].

Риски, связанныС с Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ указатСлями ΠΈ ссылочными опСрациями, ΡƒΠΆΠ΅ Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя Π²ΠΎΠ»Π½ΡƒΡŽΡ‚ спСциалистов Π² области ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ программирования, пороТдая Π½Π°ΠΌΠ΅ΠΊΠΈ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² области Π΄Π°Π½Π½Ρ‹Ρ… это Π°Π½Π°Π»ΠΎΠ³ нСнавистной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ goto Π² области управлСния Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°. Π’ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ малоизвСстной ΡΡ‚Π°Ρ‚ΡŒΠ΅ Nori Suzuki [Suzuki 1982] обсуТдаСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… строгого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° с использованиСм высокоуровнСвых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с динамичСскими псСвдонимами (ΠΊΠ°ΠΊ ΠΈΠ·Π±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ примСнСния goto, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ "структурного программирования"). Π₯отя ΠΏΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΡŽ Π°Π²Ρ‚ΠΎΡ€Π° Π²Ρ‹Π²ΠΎΠ΄Ρ‹ Π½Π΅ΡƒΡ‚Π΅ΡˆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹, данная ΡΡ‚Π°Ρ‚ΡŒΡ вСсьма ΠΏΠΎΠ»Π΅Π·Π½Π°.