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

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

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

НиТняя Ρ‡Π°ΡΡ‚ΡŒ Π½Π° рисункС - Ρ€Π°Π·Π΄Π΅Π» D - ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:


d := deep_clone (a)


Π’ этом случаС Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ раздСляСмыС ссылки. ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, прямо ΠΈΠ»ΠΈ косвСнно доступныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ O1, Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, создавая Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ O5, O6 ΠΈ O7. НСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… связСй ΠΌΠ΅ΠΆΠ΄Ρƒ старыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ (O1, O2 ΠΈ O3) ΠΈ Π½ΠΎΠ²Ρ‹ΠΌΠΈ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ O5, Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ O1, ΠΈΠΌΠ΅Π΅Ρ‚ собствСнныС ссылки Π½Π° сСбя.

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΈ повСрхностного клонирования, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ эквивалСнтности. Ѐункция deep_equal сравниваСт Π΄Π²Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ структуры, опрСдСляя ΠΈΡ… ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½Π° рисункС, deep_equal Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎ для любой ΠΏΠ°Ρ€Ρ‹ ΠΈΠ· a, b ΠΈ d. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя equal (a, c) истинно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² O1 ΠΈ O4 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, equal (a, d) - Π»ΠΎΠΆΠ½ΠΎ. ЀактичСски equal Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎ Π½ΠΈ для ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ ΠΈΠ· d ΠΈ любого элСмСнта ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ Ρ‚Ρ€ΠΎΠΉΠΊΠΈ. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ мСсто ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства:

[x]. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ присваивания x := clone (y) ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° x.copy (y), Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ equal (x, y) ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true (Π² случаС присваивания это свойство ΠΈΠΌΠ΅Π΅Ρ‚ мСсто нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ y Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ void).

[x]. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ присваивания x := deep_clone (y), Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ deep_equal (x, y) ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true.

Π­Ρ‚ΠΈ свойства Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² постусловиях ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π½Π° ΡΠΎΡ…Ρ€Π°Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ

Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ копирования ΠΈ эквивалСнтности ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ практичСскиС прСимущСства ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, СстСствСнно, ΠΏΡ€ΠΈ условии Π΅Π³ΠΎ доступности Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π”ΠΎ сих ΠΏΠΎΡ€ обсуТдСниС Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π»ΠΎ вопросов Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°. Но, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ОО-систСмС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с внСшним ΠΌΠΈΡ€ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ систСмами. Π’Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ чтСния ΠΈ записи ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° - Ρ„Π°ΠΉΠ»Ρ‹, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠ΅Ρ‚ΡŒ.

Для простоты Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сводится ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈ записи Ρ„Π°ΠΉΠ»ΠΎΠ². Для этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ "Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ" (retrieval) ΠΈ "ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ" (storage), Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌ Π²Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ (input, output). Π˜Π·ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌΠΈ ΠΏΡ€ΠΈ использовании Π΄Ρ€ΡƒΠ³ΠΈΡ… срСдств ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ посылкС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ сСти.

Для экзСмпляров Ρ‚Π°ΠΊΠΈΡ… классов, ΠΊΠ°ΠΊ POINT ΠΈΠ»ΠΈ BOOK1 сохранСниС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ являСтся ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π½ΠΎΠ²ΠΈΠ½ΠΊΠΎΠΉ. Π­Ρ‚ΠΈ классы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² качСствС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² этой Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅ΡŽΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ INTEGER, REAL ΠΈ STRING, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… доступно Ρ…ΠΎΡ€ΠΎΡˆΠΎ понятноС внСшнСС прСдставлСниС. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ экзСмпляра Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° записСй Π² языкС Паскаль ΠΈΠ»ΠΈ структур языка Π‘. Для этих Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных тСхничСских ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ стандартныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π΅Π·ΠΎΠ½Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ ОО-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, скаТСм read ΠΈ write, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ clone ΠΈ copy Π±ΡƒΠ΄ΡƒΡ‚ доступны для всСх классов.

Но Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ нас ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π³Π»Π°Π²Π½Ρ‹ΠΌ элСмСнтом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ структуры - ссылками. Π’Π°ΠΊ ΠΊΠ°ΠΊ ссылки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСны адрСсами памяти ΠΈΠ»ΠΈ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, Ρ‚ΠΎ ΠΈ для Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ подходящСС внСшнСС прСдставлСниС. Π­Ρ‚ΠΎ Π½Π΅ самая трудная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π‘Π»ΠΎΠΆΠ½Π΅Π΅ обстоит Π΄Π΅Π»ΠΎ с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ смысла самих ссылок. Бсылки присоСдинСны ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈ бСсполСзны Π² отсутствиС этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, содСрТащими ссылки, нас ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ старыС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ сохранСния ΠΈ возвращСния, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со значСниями. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ вмСстС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ всСх Π΅Π³ΠΎ связников (dependents) Π² соотвСтствии со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: связники, прямыС связники

ΠŸΡ€ΡΠΌΡ‹ΠΌΠΈ связниками ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, присоСдинСнныС ΠΊ Π΅Π³ΠΎ ссылочным полям, Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ.

Бвязниками ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ (рСкурсивно) связники Π΅Π³ΠΎ прямых связников.

Для структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½Π° рис.8.17, Π±Ρ‹Π»ΠΎ Π±Ρ‹ бСссмыслСнно ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠΎ сСти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ O1. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ связников O1 - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ O2 ΠΈ O3.

Рис. 8.17.  Π’Ρ€ΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎ зависимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ любой ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² рассматриваСт ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π΄Π²Π° ΠΊΠ°ΠΊ своих связников. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½Π° рис.8.18, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ W1 ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСзависимо, Π½ΠΎ сохранСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² B1 ΠΈΠ»ΠΈ B2 Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сохранСния Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ W1.

Рис. 8.18.  ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Β«BookΒ» ΠΈ Β«WriterΒ»

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ связников нСявно присутствуСт Π² прСдставлСнии deep_equal. Π’ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Замыкания БохраняСмости (Persistence Closure principle)

Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сохранСния сохраняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈ связников этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ возвращСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈ связников этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ссли ΠΎΠ½ΠΈ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹.

Базисным ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌ эти Ρ†Π΅Π»ΠΈ, являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ класс STORABLE, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Base. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ класса STORABLE ΡΠ²Π»ΡΡŽΡ‚ΡΡ:


store (f: IO_MEDIUM)

retrieved (f: IO_MEDIUM): STORABLE


Π’Ρ‹Π·ΠΎΠ² x.store (f) сохраняСт Π² Ρ„Π°ΠΉΠ»Π΅, связанном с f, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, присоСдинСнный ΠΊ x, вмСстС со всСми Π΅Π³ΠΎ связниками. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, присоСдинСнный ΠΊ x, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π³ΠΎΠ»ΠΎΠ²Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ структуры. ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ класс для x Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ STORABLE. Π­Ρ‚ΠΎ трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для класса Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½Π΅ распространяСтся Π½Π° связников.

Класс IO_MEDIUM это Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ класс Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Base, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π½ΠΎ ΠΈ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ сСти. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, f Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ void, Π° присоСдинСнный Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ сСтСвоС устройство Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ запись.

Π’Ρ‹Π·ΠΎΠ² retrieved (f) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ структуру ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΡƒΡŽ структурС, сохраняСмой Π² f ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ store. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ retrieved - это функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ссылку Π½Π° Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ STORABLE это наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π°ΠΆΠ½ΠΎΠ³ΠΎ свойства сохраняСмости (persistence) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠ±ΡŠΠ΅ΠΊΡ‚ сохраняСм, Ссли ΠΎΠ½ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ сСссии Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы. Класс STORABLE обСспСчиваСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ частичноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, накладывая ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ:

[x]. Π’ сохраняСмой ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ структурС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ извСстСн ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ - Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

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

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

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

ΠžΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ограничСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° STORABLE нисколько Π½Π΅ ΡƒΠΌΠ°Π»ΡΡŽΡ‚ Π΅Π³ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Π₯ΠΎΡ€ΠΎΡˆΠΎ извСстно, Ρ‡Ρ‚ΠΎ отсутствиС ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° - ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… прСпятствий Π½Π° ΠΏΡƒΡ‚ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ использования слоТных структур Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Π‘Π΅Π· Π½Π΅Π³ΠΎ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… программистских усилий: для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° структуры приходится ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько взаимосвязанных рСкурсивных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΎΠ±Ρ…ΠΎΠ΄Π° динамичСских структур Π΄Π°Π½Π½Ρ‹Ρ…. Но Ρ…ΡƒΠΆΠ΅ всСго - ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… приходится вновь ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ этим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ, внося ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ исправлСния.

ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ STORABLE позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ²Π° структура ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, учитывая ΠΏΡ€ΠΈ этом ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡŽ ПО.