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

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

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

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ УтвСрТдСния ΠŸΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ опрСдСлСния ΠΈ ΡΡƒΠΆΠ°Ρ‚ΡŒ мноТСство Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². ΠŸΠΎΠΌΠ΅Ρ‚ΠΈΠ² Π½ΠΎΠ²Ρ‹Π΅ мноТСства Π·Π½Π°ΠΊΠΎΠΌ ', запишСм трСбования, Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ этим ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ:


DOM' DOM

RESULTS' (x) RESULTS (x) для всСх x ΠΈΠ· DOM



ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ устанавливаСт, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ объявлСния, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Ρ‹ (DOM), хотя ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ объявлСния ΠΌΠΎΠ³ΡƒΡ‚ это мноТСство ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ объявлСниями, ΠΌΠΎΠ³ΡƒΡ‚, самоС большСС, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния ΠΈΠ· RESULTS(x), ΠΎΠ΄Π½Π°ΠΊΠΎ, постусловия ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… ΠΌΠΎΠ³ΡƒΡ‚ это мноТСство ΡΡƒΠ·ΠΈΡ‚ΡŒ.

Π’ этом описании состояниС систСмы Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния опрСдСляСтся состояниСм (значСниями) всСх достиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ состояния (элСмСнты I) Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² матСматичСскоС описаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ языков программирования см. Π² [M 1990].

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ структура наслСдования

Π Π°Π½Π΅Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ ΡΡΡ‹Π»Π°Π»ΠΈΡΡŒ Π½Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ (universal) классы GENERAL ΠΈ ANY, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° Π±Π΅Π·ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ (objectless) класс NONE. ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΠΈΡ… Ρ€ΠΎΠ»ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ структуру наслСдования.

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ классы

Π£Π΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ соглашСниС:

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Класса

Π›ΡŽΠ±ΠΎΠΉ класс, Π½Π΅ содСрТащий ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ наслСдования, нСявно содСрТит ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π°:

inherit ANY,

ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅Π΅ΡΡ Π½Π° класс ANY ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Kernel.

Π’Π΅ΠΌ самым становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ†Π΅Π»Ρ‹ΠΉ ряд ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², наслСдуСмых всСми классами. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅, ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, сравнСниС, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π²ΠΎΠ΄.

Для большСй гибкости помСстим эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² класс GENERAL, Ρ‡ΡŒΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ являСтся ANY. Π‘Π°ΠΌ класс ANY ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π±ΡƒΠ΄ΡƒΡ‡ΠΈ классом Π²ΠΈΠ΄Π°: class ANY inherit GENERAL end. ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅Π³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΠ΅ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ слСдуСт Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² класс ANY, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ GENERAL остаСтся всСгда Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Для построСния Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ANY ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ±Π΅Π³Π½ΡƒΡ‚ΡŒ ΠΊ наслСдованию. Π’ самом Π΄Π΅Π»Π΅, класс ANY ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ HOUSE_STYLE ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°ΠΊΠΈΡ… классов, Π½Π΅ вводя Ρ†ΠΈΠΊΠ»Ρ‹ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ наслСдования ΠΈ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ± ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌ классС: достаточно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ класс HOUSE_STYLE ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ GENERAL. ВынСсСнный Π½Π° рис. 16.4 тСкст "ΠšΠ»Π°ΡΡΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°" ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ всС классы, написанныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΈ Π½Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ GENERAL явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Рис. 16.4.  Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ структура наслСдования

НиТняя Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ

На рис. 16.4 прСдставлСн Ρ‚Π°ΠΊΠΆΠ΅ класс NONE, Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄ класса ANY, ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ всСх классов, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… собствСнных наслСдников ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ наслСдования классов Π² Ρ€Π΅ΡˆΠ΅Ρ‚ΠΊΡƒ (ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру). NONE Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², Π΅Π³ΠΎ нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ - это лишь удобная фикция, ΠΎΠ΄Π½Π°ΠΊΠΎ, тСорСтичСскоС сущСствованиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ ΠΈ слуТит Π΄Π²ΡƒΠΌ практичСским цСлям:

[x]. Void - пустая ссылка, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ наряду с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ссылками, ΠΏΠΎ соглашСнию ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ NONE. (ЀактичСски, Void -это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² класса GENERAL.)

[x]. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², достаточно ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классу NONE. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ feature {NONE}(практичСски эквивалСнтноС feature {}, Π½ΠΎ записанноС явно) ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ наслСдования export {NONE}(Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π΄Π°ΡŽΡ‰Π΅Π΅ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ export {}), Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ нСдоступным для любого класса, написанного Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, ΠΈΠ±ΠΎ NONE Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ NONE скрываСт ΠΈ всС свои ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ свойство ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Void ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π»ΡŽΠ±ΠΎΠΌΡƒ элСмСнту ссылочного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎ сих ΠΏΠΎΡ€ статус Void оставался Π½Π΅ΠΊΠΎΠΉ Π·Π°Π³Π°Π΄ΠΊΠΎΠΉ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Void связано с классом NONE, этот статус становится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΡΠΎΠ³Π»Π°ΡΡƒΡŽΡ‰ΠΈΠΌΡΡ с систСмой Ρ‚ΠΈΠΏΠΎΠ²: ΠΏΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ NONE являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ всСх классов, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Void ΠΊΠ°ΠΊ допустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ любой ссылки, Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ ΠΏΡ€Π°Π²ΠΈΠ» описания Ρ‚ΠΈΠΏΠΎΠ².

По симмСтрии ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ свойству Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ объявлСниС, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ΡΡ с feature ΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²ΠΎ всС классы, написанныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, считаСтся сокращСниСм ΠΎΡ‚ feature {ANY}. Для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ экспорта Π²ΠΎ всС классы ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° родитСля, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±Ρ‹Π» ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ export {ANY} ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ сокращСниС export.

ΠšΠ»Π°ΡΡΡ‹ ANY ΠΈ NONE ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΠΎΡΡ‚ΡŒ систСмы Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ структуры наслСдования: Ρ€Π΅ΡˆΠ΅Ρ‚ΠΊΠ° (это строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ матСматичСский Ρ‚Π΅Ρ€ΠΌΠΈΠ½) ΠΈΠΌΠ΅Π΅Ρ‚ свой Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΈ Π½ΠΈΠΆΠ½ΠΈΠΉ элСмСнт.

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

Π’ΠΎΡ‚ лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, содСрТащиСся Π² классС GENERAL, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, доступныС всСм Π΄Ρ€ΡƒΠ³ΠΈΠΌ классам. Π§Π°ΡΡ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° ΠΈ использована Π² ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… лСкциях курса:

[x]. clone для создания ΠΊΠ»ΠΎΠ½Π° (дубля) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ "Π³Π»ΡƒΠ±ΠΈΠ½Π½Ρ‹ΠΉ" Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ deep_clone для рСкурсивного дублирования ΠΏΠΎΠ»Π½ΠΎΠΉ структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;

[x]. copy для копирования содСрТимого ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ;

[x]. equal для сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΏΠΎΠ»Π΅-с-ΠΏΠΎΠ»Π΅ΠΌ), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ "Π³Π»ΡƒΠ±ΠΈΠ½Π½Ρ‹ΠΉ" Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ deep_equal;

[x]. print ΠΈ print_line - ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ простого прСдставлСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (default representation);

[x]. tagged_out - строка, содСрТащая прСдставлСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅ сопровоТдаСтся своСй ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ (tag) (ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°);

[x]. same_type ΠΈ conforms_to - Π±ΡƒΠ»Π΅Π²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ;

[x]. generator - Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ (generating) класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ класса, экзСмпляром ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π—Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

ΠŸΡ€ΠΈ обсуТдСнии ΠΈΠ΄Π΅ΠΈ наслСдования Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ подчСркивался ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚ - ΠΏΡ€Π°Π²ΠΎ, взяв ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ класса-родитСля, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π²ΠΎΠ·Π»ΠΎΠΆΠΈΠ² Π½Π° Π½Π΅Π³ΠΎ ΠΈΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠœΠΎΠ³ΡƒΡ‚ Π»ΠΈ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚Π° Ρ‚Π°ΠΊΠΎΠΉ возмоТности?

Π—Π°ΠΏΡ€Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ объявлСния

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² Π½Π°Ρ‡Π°Π»Π΅ Π»Π΅ΠΊΡ†ΠΈΠΈ Π΄Π°Π»ΠΎ Π½Π°ΠΌ тСорСтичСскоС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ сути ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ. Π§Π°ΡΡ‚ΡŒ "ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚" ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², Π½ΠΎ ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ лишь Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ объявлСния, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализация согласуСтся со спСцификациСй, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ прСдусловиСм ΠΈ постусловиям ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°.

Π’ рядС случаСв ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ класса ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ классов ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² Π½ΡƒΠΆΠ½Π° гарантия, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Π½ΠΎ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² точности исходной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π”ΠΎΡΡ‚ΠΈΡ‡ΡŒ этого ΠΌΠΎΠΆΠ½ΠΎ лишь "Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΈΠ²" Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ - ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ² ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ΠŸΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π΅Ρ‚ простая языковая конструкция:


frozen feature_name ... is... ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ объявлСния - ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ...



ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ описании Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² класса Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² прСдлоТСния redefine ΠΈ undefine Π½ΠΈ ΠΏΠΎΠ΄ своим, Π½ΠΈ ΠΏΠΎΠ΄ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ (смСна ΠΈΠΌΠ΅Π½, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°). ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎ своСй сути Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½.

Ѐиксированная сСмантика ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² copy, clone ΠΈ equality

Π§Π°Ρ‰Π΅ всСго Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ (frozen) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² опСрациях ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΠ»ΠΈ Π² состав класса GENERAL. Π’Π°ΠΊ, Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ вСрсии Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ копирования:


copy, frozen standard_copy (other: ...) is

-- ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля other Π² поля Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

require

other_not_void: other /= Void

do

...

ensure

equal (Current, other)

end



Π”Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (copy ΠΈ standard_copy) описаны ΠΊΠ°ΠΊ синонимы. ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ совмСстно ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° класса, Ссли ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² допускаСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ Π²ΠΏΡ€Π°Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ copy, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ классам ARRAY ΠΈ STRING, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ содСрТимоС, Π° Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Однако ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° для Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΈ нСобходимости исходной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ - standard_copy.