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

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

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

ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… присваиваний, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ p := r ΠΈ p := t, Π² качСствС Ρ‚ΠΈΠΏΠ° источника ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² класса-Ρ†Π΅Π»ΠΈ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Ρ‚ΠΈΠΏ источника согласован с классом Ρ†Π΅Π»ΠΈ. НапримСр, SQUARE согласован с RECTANGLE ΠΈ с POLYGON, Π½ΠΎ Π½Π΅ с TRIANGLE. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ это понятиС, Π΄Π°Π΄ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ

Π’ΠΈΠΏ U согласован с Ρ‚ΠΈΠΏΠΎΠΌ T, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для U являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса для T; ΠΏΡ€ΠΈ этом для ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ U Π΄ΠΎΠ»ΠΆΠ΅Π½ (ΠΏΠΎ рСкурсии) Π±Ρ‹Ρ‚ΡŒ согласован с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ T.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ нСдостаточно понятия ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Π² этом ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ? ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° снова Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ допускаСтся ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Ρ… классов, поэтому приходится Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΈ классы. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° имССтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ отсутствии пороТдСния совпадаСт с самим Ρ‚ΠΈΠΏΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, POLYGON являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ для сСбя). ΠŸΡ€ΠΈ этом для ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ класса Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс с ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. НапримСр, для класса LIST [POLYGON] Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ класс LIST. Вторая Ρ‡Π°ΡΡ‚ΡŒ опрСдСлСния Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ B [Y] Π±ΡƒΠ΄Π΅Ρ‚ согласован с A [X], Ссли B являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ A, Π° Y - ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ X.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс являСтся собствСнным ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ согласован сам с собой.

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ понятия ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ:

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ согласования Ρ‚ΠΈΠΏΠΎΠ²

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊ источнику y Ρ†Π΅Π»ΠΈ x (Ρ‚. Π΅. присваиваниС x:=y ΠΈΠ»ΠΈ использованиС y Π² качСствС фактичСского ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ x) допустимо Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ y согласован с Ρ‚ΠΈΠΏΠΎΠΌ x.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ согласования Ρ‚ΠΈΠΏΠΎΠ² Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ присваиваниС p := r допустимо, Π° r := p Π½Π΅Ρ‚.

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ я Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½, Ρ‡Ρ‚ΠΎ послал Π² компанию Π›ΡŽΠ±ΠΈΠΌΡ†Ρ‹-По-ΠŸΠΎΡ‡Ρ‚Π΅ Π·Π°ΠΊΠ°Π· Π½Π° "Animal" ("Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅"). Π’ этом случаС, Ρ‡Ρ‚ΠΎ Π±Ρ‹ я Π½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»: собаку, боТью ΠΊΠΎΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ»ΠΈ Π΄Π΅Π»ΡŒΡ„ΠΈΠ½Π°-касатку, Ρƒ мСня Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²Π° ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ. (ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ DOG ΠΈ всС ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ класса ANIMAL). Но Ссли я Π·Π°ΠΊΠ°Π·Π°Π» собаку, Π° ΠΏΠΎΡ‡Ρ‚Π°Π»ΡŒΠΎΠ½ принСс ΠΌΠ½Π΅ ΡƒΡ‚Ρ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ с надписью ANIMAL, ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MAMMAL (ΠΌΠ»Π΅ΠΊΠΎΠΏΠΈΡ‚Π°ΡŽΡ‰Π΅Π΅), Ρ‚ΠΎ я имСю ΠΏΡ€Π°Π²ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŽ, Π΄Π°ΠΆΠ΅ Ссли ΠΈΠ· Π½Π΅Π΅ доносится нСдвусмыслСнный Π»Π°ΠΉ ΠΈ Ρ‚ΡΠ²ΠΊΠ°Π½ΡŒΠ΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΉ Π·Π°ΠΊΠ°Π· Π½Π΅ Π±Ρ‹Π» исполнСн Π² соотвСтствии со спСцификациСй, я Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ„ΠΈΡ€ΠΌΠ΅ Π›ΡŽΠ±ΠΈΠΌΡ†Ρ‹-По-ΠŸΠΎΡ‡Ρ‚Π΅.

ЭкзСмпляры

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: прямой экзСмпляр, экзСмпляр

ΠŸΡ€ΡΠΌΠΎΠΉ экзСмпляр класса C - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, созданный Π² соотвСтствии с Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ C с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ создания create x ..., Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ†Π΅Π»ΡŒ x ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ C (ΠΈΠ»ΠΈ, рСкурсивно, ΠΏΡƒΡ‚Π΅ΠΌ клонирования прямого экзСмпляра C).

ЭкзСмпляр C - это прямой экзСмпляр ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° C.

Из послСднСй части этого опрСдСлСния слСдуСт, Ρ‡Ρ‚ΠΎ прямой экзСмпляр класса C являСтся Ρ‚Π°ΠΊΠΆΠ΅ экзСмпляром C, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ класс Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π²ΠΎ мноТСство своих ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ².

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°:


p1, p2: POLYGON; r: RECTANGLE

...

create p1 ...; create r ...; p2 := r



создаст Π΄Π²Π° экзСмпляра класса POLYGON, Π½ΠΎ лишь ΠΎΠ΄ΠΈΠ½ прямой экзСмпляр (Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ присоСдинСн ΠΊ p1). Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ p2 ΠΈ r, являСтся прямым экзСмпляром класса RECTANGLE, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, экзСмпляром ΠΎΠ±ΠΎΠΈΡ… классов POLYGON ΠΈ RECTANGLE.

Π₯отя понятия прямого экзСмпляра ΠΈ экзСмпляра ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Ρ‹ΡˆΠ΅ для классов, ΠΎΠ½ΠΈ СстСствСнно Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° Π»ΡŽΠ±Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ).

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ элСмСнт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ прямым экзСмплярам этого Ρ‚ΠΈΠΏΠ°, Π½ΠΎ ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π΅Π³ΠΎ экзСмплярам. МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€ΠΎΠ»ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° согласования Ρ‚ΠΈΠΏΠΎΠ² состоит Π² обСспСчСнии ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ свойства:

Π‘Ρ‚Π°Ρ‚ΠΈΠΊΠΎ-динамичСская ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²

Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° T ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ экзСмплярам класса T.

БтатичСский Ρ‚ΠΈΠΏ, динамичСский Ρ‚ΠΈΠΏ

НазваниС послСднСго свойства ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ "статичСского Ρ‚ΠΈΠΏΠ°" ΠΈ "динамичСского Ρ‚ΠΈΠΏΠ°". Π’ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ объявлСнии Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта, являСтся статичСским Ρ‚ΠΈΠΏΠΎΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ссылки. Если Π²ΠΎ врСмя выполнСния эта ссылка присоСдиняСтся ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ этот Ρ‚ΠΈΠΏ становится динамичСским Ρ‚ΠΈΠΏΠΎΠΌ этой ссылки.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ объявлСнии p: POLYGON статичСский Ρ‚ΠΈΠΏ ссылки, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ p, Π΅ΡΡ‚ΡŒ POLYGON, послС выполнСния create p динамичСским Ρ‚ΠΈΠΏΠΎΠΌ этой ссылки Ρ‚Π°ΠΊΠΆΠ΅ являСтся POLYGON, Π° послС присваивания p := r, Π³Π΄Π΅ r ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ RECTANGLE ΠΈ Π½Π΅ пусто, динамичСским Ρ‚ΠΈΠΏΠΎΠΌ становится RECTANGLE.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ согласования Ρ‚ΠΈΠΏΠΎΠ² ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ динамичСский Ρ‚ΠΈΠΏ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ статичСскому Ρ‚ΠΈΠΏΡƒ.

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

Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ динамичСский Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π²ΠΎ врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ измСняСтся.

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

Волько Ρƒ сущности ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΈ статичСский, ΠΈ динамичСский Ρ‚ΠΈΠΏΡ‹. Π•Π΅ статичСский Ρ‚ΠΈΠΏ - это Ρ‚ΠΈΠΏ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½Π° Π±Ρ‹Π»Π° объявлСна: Ссли объявлСниС ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ x: T, Ρ‚ΠΎ этим Ρ‚ΠΈΠΏΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ T. Π•Π΅ динамичСский Ρ‚ΠΈΠΏ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния - это Ρ‚ΠΈΠΏ значСния этой ссылки, Ρ‚.Π΅. Ρ‚ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½Π° присоСдинСна.

Π’ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠΌ случаС Π½Π΅Ρ‚ ссылки, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ x являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° T, ΠΈ T являСтся ΠΈ статичСским Ρ‚ΠΈΠΏΠΎΠΌ ΠΈ СдинствСнно Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ динамичСским Ρ‚ΠΈΠΏΠΎΠΌ для x.

ΠžΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ‹ Π»ΠΈ ограничСния?

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слишком строгими. НапримСр, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΎΠ±ΠΎΠΈΡ… случаях статичСски отвСргаСтся:

1


p:= r; r := p




2


p := r; x := p.diagonal




Π’ (1) запрСщаСтся ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ сущности-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΡƒ, хотя Π²ΠΎ врСмя выполнСния Ρ‚Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ являСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ собаку ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ написано "ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅"). Π’ (2) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ diagonal оказался Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ p нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя выполнСния ΠΎΠ½, фактичСски, присутствуСт.

Но Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ наши ΠΏΡ€Π°Π²ΠΈΠ»Π° Π²ΠΏΠΎΠ»Π½Π΅ обоснованы. Если ссылка присоСдиняСтся ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΡƒΠ±Π΅Π΄ΠΈΠ²ΡˆΠΈΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ согласованы. А Ссли хочСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ сразу Π½Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ?

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, случаи Π²ΠΈΠ΄Π° (1) ΠΈ (2) маловСроятны. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Ρ‚ΠΈΠΏΠ° p:= r ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… структур, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ условий, опрСдСляСмых Π²ΠΎ врСмя выполнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π‘ΠΎΠ»Π΅Π΅ рСалистичная полиморфная схСма ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:


create r.make (...); ...

screen.display_icons -- Π’Ρ‹Π²ΠΎΠ΄ Π·Π½Π°Ρ‡ΠΊΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²