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

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

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

Π­Ρ‚Π° схСма ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌ set_attribute. Π’ классС DEVICE ΠΈΠΌΠ΅Π΅ΠΌ:


class DEVICE feature

alternate: like Current

set_alternate (a: like Current) is

-- ΠŸΡƒΡΡ‚ΡŒ a - Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ устройство.

do

alternate := a

end

... ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ...

end



Π•Ρ‰Π΅ Ρ€Π°Π· ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классах

Π‘ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² нуТдаСтся Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ понятиС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Ρ‚ΠΈΠΏΠ°.

Π‘Π½Π°Ρ‡Π°Π»Π° классы ΠΈ Ρ‚ΠΈΠΏΡ‹ Π±Ρ‹Π»ΠΈ для нас Π΅Π΄ΠΈΠ½Ρ‹, ΠΈ это ΠΈΡ… свойство - ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ ΠΏΡƒΠ½ΠΊΡ‚ ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, - ΠΏΠΎ сущСству, сохраняСтся, хотя Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ систСму Ρ‚ΠΈΠΏΠΎΠ², добавляя Π² классы Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ основан Π½Π° классС ΠΈ для Ρ‚ΠΈΠΏΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ понятиС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Для Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ классом с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ фактичСскими Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ фактичСскиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для LIST [INTEGER] Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом являСтся LIST. На классах основаны ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹; ΠΈ для Π½ΠΈΡ… Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ: для expanded SOME_CLASS [...] Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс - SOME_CLASS.

Π—Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² - это Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ систСмы Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π΄Π²ΡƒΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ, сохраняСт свойство выводимости ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° нСпосрСдствСнно ΠΈΠ· класса. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΌ для like anchor являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Ρ‚ΠΈΠΏΠ° сущности anchor Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ классС. Если anchor Π΅ΡΡ‚ΡŒ Current, Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ это объявлСниС содСрТится.

ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΎ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…

ВСорСтичСски Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π½Π°ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ like anchor для самого элСмСнта anchor ΠΊΠ°ΠΊ сущности Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Достаточно ввСсти ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π»ΠΎ Π±Ρ‹ Ρ†ΠΈΠΊΠ»Ρ‹ Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°Ρ….

Π’Π½Π°Ρ‡Π°Π»Π΅ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠΎΡ€Π½Ρ‹Π΅ элСмСнты (anchored anchor) Π±Ρ‹Π»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹, Π½ΠΎ это Π½ΠΎΠ²ΠΎΠ΅, Π±ΠΎΠ»Π΅Π΅ Π»ΠΈΠ±Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ систСмС Ρ‚ΠΈΠΏΠΎΠ² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ.

ΠŸΡƒΡΡ‚ΡŒ T - Ρ‚ΠΈΠΏ anchor (Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ класс, Ссли anchor Π΅ΡΡ‚ΡŒ Current). Π’ΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ like anchor совмСстим ΠΊΠ°ΠΊ с самим собой, Ρ‚Π°ΠΊ ΠΈ с T.

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ симмСтрично: СдинствСнный Ρ‚ΠΈΠΏ, совмСстимый с like anchor, - это ΠΎΠ½ сам. Π’ частности, с Π½ΠΈΠΌ Π½Π΅ совмСстим Ρ‚ΠΈΠΏ T. Если Π±Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π±Ρ‹Π» Π²Π΅Ρ€Π΅Π½:


anchor, other: T; x: like anchor

...

create other

x := other -- ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ присваиваниС



Ρ‚ΠΎ Π² ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΌ классС, Π³Π΄Π΅ anchor мСняСт свой Ρ‚ΠΈΠΏ Π½Π° U, совмСстимый с T, Π½ΠΎ основанный Π½Π° Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅, сущности x Π±Ρ‹Π» Π±Ρ‹ присвоСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° T, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° U ΠΈΠ»ΠΈ U-совмСстимого Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Π‘ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ x ΠΎΠΏΠΎΡ€Π½ΠΎ-эквивалСнтСн y, Ссли x Π΅ΡΡ‚ΡŒ y ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ like z, Π³Π΄Π΅ z ΠΏΠΎ рСкурсии ΠΎΠΏΠΎΡ€Π½ΠΎ-эквивалСнтСн y. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ: x := anchor, anchor := x, ΠΊΠ°ΠΊ ΠΈ присваивания ΠΎΠΏΠΎΡ€Π½ΠΎ-эквивалСнтных (anchor-equivalent) элСмСнтов, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, допустимы.

ΠŸΡ€ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΊΠ°ΠΊ Π² случаС


r (other: like Current)



фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²Ρ‹Π·ΠΎΠ²Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, b Π² a.r(b), Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΠΎΡ€Π½ΠΎ-эквивалСнтСн a.

Когда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ объявлСния

НС всякоС объявлСниС Π²ΠΈΠ΄Π° x: A Π² классС A слСдуСт ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° x: like Current ΠΈ Π½Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° слСдуСт ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΌ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ - Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹ΠΌ.

Π—Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ΅ объявлСниС - это своСго Ρ€ΠΎΠ΄Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ измСнСния Ρ‚ΠΈΠΏΠ° Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠΉ сущности ΠΏΡ€ΠΈ смСнС Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта. Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΎΠ½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ силы: объявив Ρ‚ΠΈΠΏ сущности ΠΊΠ°ΠΊ like anchor, Π²Ρ‹ тСряСтС ΠΏΡ€Π°Π²ΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ (коль скоро Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ совмСстим с исходным, Π° с Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ совмСстим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ сам). Пока Π½Π΅ Π²Π²Π΅Π΄Π΅Π½ΠΎ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅, остаСтся свобода: Ссли x Ρ‚ΠΈΠΏΠ° T, Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, ввСдя Π±ΠΎΠ»Π΅Π΅ походящий Ρ‚ΠΈΠΏ U.

Достоинства ΠΈ нСдостатки закрСплСния сущностСй ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹. Π—Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ придСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ объявлСния вслСд Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта, Π½ΠΎ ΠΎΠ½ΠΎ Ρ€Π°Π· ΠΈ навсСгда привязываСт вас ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта. Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ случай "свободы Π²Ρ‹Π±ΠΎΡ€Π°". (Π’ ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС Ѐауст объявил сСбя like ΠœΠ΅Ρ„ΠΈΡΡ‚ΠΎΡ„Π΅Π»ΡŒ.)

Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ закрСплСния рассмотрим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ first_child для Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сына Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π΄Π΅Ρ€Π΅Π²Π°. (ΠŸΡ€ΠΈ построСнии Π΄Π΅Ρ€Π΅Π²Π° ΠΎΠ½ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ first_element для списков, Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ являСтся CELL [G] ΠΈΠ»ΠΈ LINKABLE [G].) Для Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² трСбуСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ умСстным ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ΅ объявлСниС:


first_child: like Current



Но Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Класс Π΄Π΅Ρ€Π΅Π²Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² (ΠΈΡ… ΡƒΠ·Π»ΠΎΠ²): UNARY_TREE (ΡƒΠ·Π»Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ сыном), BINARY_TREE (ΡƒΠ·Π»Ρ‹ с двумя ΡΡ‹Π½ΠΎΠ²ΡŒΡΠΌΠΈ) ΠΈ BOUNDED_ARITY_TREE (ΡƒΠ·Π»Ρ‹ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ числом сыновСй). ΠŸΡ€ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠΈ first_child всС ΡΡ‹Π½ΠΎΠ²ΡŒΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ отцовский Ρ‚ΠΈΠΏ.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈ построСнии Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΡ… структур, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° с ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ. Для этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π±Π΅Π· закрСплСния:


first_child: TREE [G]



Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ связано с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ ограничСниями, ΠΈ для создания Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² с ΡƒΠ·Π»Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²Ρ‹, оставив класс TREE Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ Π½Π΅Π³ΠΎ HOMOGENEOUS_TREE, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ first_child ΠΊΠ°ΠΊ


first_child: like Current



Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² всСх ΡƒΠ·Π»ΠΎΠ² Π΄Π΅Ρ€Π΅Π²Π°.

БтатичСский ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ

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

Π—Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ΅ объявлСниС ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ синтаксичСским ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ пСрСопрСдСлСния Π½Π° компилятор. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΎ являСтся ваТнСйшим инструмСнтом достиТСния компромисса ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌ использованиСм ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ².

НаслСдованиС ΠΈ скрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

ПослСдний вопрос, ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ ΠΏΠΎΠΊΠ° Π±Π΅Π· ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΊΠ°ΠΊ наслСдованиС взаимодСйствуСт с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ Бкрытия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ классом ΠΈ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ скрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ опрСдСляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ класса. ИмСнно ΠΎΠ½ опрСдСляСт ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° класса: экспортируя Π΅Π³ΠΎ всСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΉ экспорт, ΠΈΠ»ΠΈ дСлая ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ.

КоС-Ρ‡Ρ‚ΠΎ ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅

Π§Ρ‚ΠΎ происходит со статусом экспорта ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΏΠΎΡ‚ΠΎΠΌΠΊΡƒ? НаслСдованиС ΠΈ скрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ - ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. НаслСдованиС опрСдСляСт ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ классом ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ, экспорт - ΠΌΠ΅ΠΆΠ΄Ρƒ классом ΠΈ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. Класс B ΠΌΠΎΠΆΠ΅Ρ‚ свободно ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ любой ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² f, унаслСдованных ΠΈΠΌ ΠΎΡ‚ класса A. ΠŸΡ€ΠΈ этом доступны всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ:

[x]. f экспортируСтся Π² классС A ΠΈ Π² классС B (хотя ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ);

[x]. f скрыто Π² A ΠΈ B;

[x]. f скрыто Π² A, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ частично экспортируСтся Π² B;

[x]. f экспортируСтся Π² A, Π½ΠΎ скрыто Π² B.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ гласит: ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ f сохраняСт Ρ‚ΠΎΡ‚ статус экспорта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±Ρ‹Π» Π½Π°Π΄Π΅Π»Π΅Π½ Π² A. Однако Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ export Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ наслСдования класса. НапримСр:


class B inherit

A

export {NONE} f end

-- Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ f (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, экспортируСмый Π² классС A)

...



ΠΈΠ»ΠΈ


class B inherit

A

export {ANY} f end

-- Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ f (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, скрытый Π² классС A)

...



ΠΈΠ»ΠΈ


class B inherit

A

export {X, Y, Z} f end

-- Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ f доступным ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ классам