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

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

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

screen.wait_for_mouse_click -- ОТиданиС Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ

x := screen.mouse_position -- ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ мСста наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ

chosen_icon := screen.icon_where_is (x) -- ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΊΠ°,

-- Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ

if chosen_icon = rectangle_icon then

p := r

elseif ...

p := "ΠœΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°" ...

end

... ИспользованиС p, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, p.display, p.rotate, ...



Π’ послСднСй строкС p ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ любой ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ· класса POLYGON. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, подходящиС для ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ diagonal, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ r (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ if). Если придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ p Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ if, Ρ‚ΠΎ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ лишь ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ ΠΊΠΎ всСм Π²ΠΈΠ΄Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ².

Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ случаС p просто являСтся Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹:


some_routine (p: POLYGON) is ...



ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² some_routine (r), ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ согласования Ρ‚ΠΈΠΏΠΎΠ². Но ΠΏΡ€ΠΈ написании ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΎΠ± этом Π²Ρ‹Π·ΠΎΠ²Π΅ Π΅Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ извСстно. На самом Π΄Π΅Π»Π΅, Π²Ρ‹Π·ΠΎΠ² some_routine (t) для t Ρ‚ΠΈΠΏΠ° TRIANGLE ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° класса POLYGON Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ p прСдставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² - любой ΠΈΠ· ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ². Π’ΠΎΠ³Π΄Π° Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊ p ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса POLYGON.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² случаС, ΠΊΠΎΠ³Π΄Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ присоСдиняСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ сущности (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ p) вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ польза ΠΎΡ‚ нСвСдСния?

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

Если Π²Ρ‹ всС Π΅Ρ‰Π΅ испытываСтС нСудобство ΠΎΡ‚ нСвозмоТности Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ p.diagonal послС присваивания p :=r (Π² случаС (2)), Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈ. Π­Ρ‚ΠΎ ΡˆΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… людСй, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с этими понятиями. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ p - это ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Ρƒ нас Π½Π΅Ρ‚ доступа ΠΊ Π΅Π³ΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ? По Ρ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ бСсполСзно. ПослС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ присваивания, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ рисунка, ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° RECTANGLE ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΈΠΌΠ΅Π½ΠΈ: имя ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° p ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° r.

Рис. 14.7.  ΠŸΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ присваивания

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ извСстно, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ O2 являСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ ΠΈ доступСн Ρ‡Π΅Ρ€Π΅Π· имя ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° r, Π·Π°Ρ‡Π΅ΠΌ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π΅Π³ΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ посрСдством ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ p.diagonal? Π­Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ r.diagonal, использовав ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ имя ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ сняв всС сомнСния Π² правомСрности примСнСния Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ИспользованиС ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° p, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ с Ρ‚Π΅ΠΌ ΠΆΠ΅ успСхом ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π°Π΅Ρ‚ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСопрСдСлСнности.

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ тСряСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ: ΠΊΠΎΠ³Π΄Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ присваивания p :=r появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ O2 Ρ‡Π΅Ρ€Π΅Π· имя ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° p, Ρ‚ΠΎ тСряСтся Π½Π΅Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ - Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцифичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. Π’ Ρ‡Π΅ΠΌ Ρ‚ΠΎΠ³Π΄Π° польза? Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС - Π½ΠΈ Π² Ρ‡Π΅ΠΌ. Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, интСрСс Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π·Π°Ρ€Π°Π½Π΅Π΅ нСизвСстно, ΠΊΠ°ΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° p послС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ if some_condition then p:= r else p := something_else ... ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° p являСтся Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ нСизвСстно, ΠΊΠ°ΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΈΠΏ фактичСского Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Но Π² этих случаях Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈ опасно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ p Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² класса POLYGON.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Ρ‚Π΅ΠΌΡƒ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…, прСдставим, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΡ‚ΠΎ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚: "Π£ вас Π΅ΡΡ‚ΡŒ домашний Π»ΡŽΠ±ΠΈΠΌΠ΅Ρ†?" ΠΈ Π²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚Π΅: "Π”Π°, ΠΊΠΎΡ‚!". Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ присваиваниС - ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ извСстСн ΠΏΠΎΠ΄ двумя ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²: "ΠΌΠΎΠΉ_домашний_Π»ΡŽΠ±ΠΈΠΌΠ΅Ρ†" ΠΈ "ΠΌΠΎΠΉ_ΠΊΠΎΡ‚" ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ сСйчас ΠΎΠ΄Π½ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅. Но ΠΎΠ½ΠΈ Π½Π΅ слуТат ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ имя являСтся ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠ΅. МоТно ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ Π·Π²ΠΎΠ½ΠΊΠ΅ Π² ΠΎΡ‚Π΄Π΅Π» ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… хозяСв ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π›ΡŽΠ±ΠΈΠΌΡ†Ρ‹-По-ΠŸΠΎΡ‡Ρ‚Π΅ ("Π― ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Π² отпуск, сколько Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚ΠΎΠΈΡ‚ΡŒ наблюдСниС Π·Π° ΠΌΠΎΠΈΠΌ_домашним_Π»ΡŽΠ±ΠΈΠΌΡ†Π΅ΠΌ (ΠΈΠ»ΠΈ: ΠΌΠΎΠΈΠΌ_ΠΊΠΎΡ‚ΠΎΠΌ) Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… нСдСль?") Но ΠΏΡ€ΠΈ Π·Π²ΠΎΠ½ΠΊΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π» с вопросом: "ΠœΠΎΠ³Ρƒ Π»ΠΈ я ΠΏΡ€ΠΈΠ²Π΅Π·Ρ‚ΠΈ Π²ΠΎ Π²Ρ‚ΠΎΡ€Π½ΠΈΠΊ ΠΌΠΎΠ΅Π³ΠΎ домашнСго Π»ΡŽΠ±ΠΈΠΌΡ†Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΡ‚Ρ€ΠΈΡ‡ΡŒ ΠΊΠΎΠ³Ρ‚ΠΈ?", Π²Ρ‹ Π½Π΅ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ΡΡŒ Π½Π° ΠΏΡ€ΠΈΠ΅ΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π»ΠΈ Π² Π²ΠΈΠ΄Ρƒ своСго ΠΊΠΎΡ‚Π°.

Когда хочСтся Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

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

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ с надписью "Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅" вмСсто ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ надписи "Π‘ΠΎΠ±Π°ΠΊΠ°", ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Π»Π°Π·Π½ΠΈΡ‚ΡŒΡΡ ΠΈ всС ΠΆΠ΅ Π΅Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ, зная, Ρ‡Ρ‚ΠΎ, Ссли Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ собака, Ρ‚ΠΎ потСряСтся ΠΏΡ€Π°Π²ΠΎ Π½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ посылки ΠΈ, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ· Π½Π΅Π΅ появится, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΡˆΠΈΡ‚ΡŒΡΡ Π΄Π°ΠΆΠ΅ возмоТности Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ эту ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях трСбуСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ - ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° присваивания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²ΠΈΠ΄Π° r ?= p (Π³Π΄Π΅ ?= ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ символ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ присваивания, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ := для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ присваивания), ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΡƒΡŽ "Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ присваиваниС, Ссли Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° соотвСтствуСт r, Π° ΠΈΠ½Π°Ρ‡Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ r пустым". Но ΠΌΡ‹ ΠΏΠΎΠΊΠ° Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ такая ΠΊΠΎΠΌΠ°Π½Π΄Π° сочСтаСтся с ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, поэтому вСрнСмся ΠΊ этому вопросу Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… лСкциях. (А Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, считайтС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ± этом Π½Π΅ Ρ‡ΠΈΡ‚Π°Π»ΠΈ).

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ созданиС

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ наслСдования ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ нСпосрСдствСнно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠΎΠ²-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ².

Напомним, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ создания (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹-конструкторы) ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ²:


create x

create x.make (...)



Π³Π΄Π΅ вторая Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для Ρ‚ΠΈΠΏΠ° T, приписанного x, содСрТал ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ creation, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ make ΡƒΠΊΠ°Π·Π°Π½Π° ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€-конструкторов. (РазумССтся, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любоС имя, - make рСкомСндуСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ являСтся созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° T, Π΅Π³ΠΎ инициализация значСниями, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈ Π΅Π³ΠΎ присоСдинСниС ΠΊ x. А ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ инструкции для создания ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ make с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ T имССтся собствСнный ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ U. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ x ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎ ΠΈ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ сразу ΠΊ прямому экзСмпляру U, Π° Π½Π΅ ΠΊ экзСмпляру T. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° U.


some_routine (...) is

local

u_temp: U

do

...; create u_temp.make (...); x := u_temp; ...

end



Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ чСрСсчур Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ, особСнно Π² контСкстС ΠΌΠ½ΠΎΠ³ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π°, ΠΊΠΎΠ³Π΄Π° захочСтся ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ x ΠΊ экзСмпляру ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² наслСдников. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ сущности (u_temp Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, ΠΈΡ… объявлСния ΠΈ присваивания Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°ΡŽΡ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ конструкторов:


create {U} x

create {U} x.make (...)



Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ конструкторов create, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅, Π½ΠΎ создаваСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ²Π»ΡΡ‚ΡŒΡΡ прямым экзСмпляром U, Π° Π½Π΅ T. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΌΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ: Ρ‚ΠΈΠΏ U Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ согласован с Ρ‚ΠΈΠΏΠΎΠΌ T, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ make Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания Π² классС, Π±Π°Π·ΠΎΠ²ΠΎΠΌ для U, ΠΈ Ссли этот класс ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ создания, Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° лишь вторая Ρ„ΠΎΡ€ΠΌΠ°. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ здСсь Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ сам класс T ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создания, - всС зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ U.