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

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

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

РСшСниС ЗакрСплСния Π±Ρ‹Π»ΠΎ прСдставлСно Π² ΠΌΠΎΠ΅ΠΌ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Π½Π° сСминарС TOOLS EUROPE 1994. Π’ΠΎΠ³Π΄Π° я, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ усмотрСл нСобходимости Π² anchor-ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… ΠΈ связанных с этим ограничСниях совмСстимости. Поль Π”ΡŽΠ±ΡƒΠ° (Paul Dubois) ΠΈ Амирам Π™Π΅Ρ…ΡƒΠ΄Π°ΠΉ (Amiram Yehudai) Π½Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½ΡƒΠ»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² этих условиях ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ковариантности остаСтся. Они, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π Π΅ΠΉΠ½Ρ…Π°Ρ€Π΄Ρ‚ Π‘ΡƒΠ΄Π΄Π΅ (Reinhardt Budde), ΠšΠ°Ρ€Π»-Π₯Π°ΠΉΠ½Ρ† Π—ΠΈΠ»Π»Π° (Karl-Heinz Sylla), Ким Π’Π°Π»ΡŒΠ΄Π΅Π½ (Kim Walden) ΠΈ ДТСймс Мак-Ким (James McKim) высказали мноТСство Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ, ΠΈΠΌΠ΅Π²ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅, которая ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ написанию этой Π»Π΅ΠΊΡ†ΠΈΠΈ.

Вопросам ковариантности посвящСно большоС количСство Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹. Π’ [Castagna 1995] ΠΈ [Castagna 1996] Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ ΠΎΠ±ΡˆΠΈΡ€Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±Π·ΠΎΡ€ матСматичСских аспСктов ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ссылок Π½Π° ΠΎΠ½Π»Π°ΠΉΠ½ΠΎΠ²Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π² ООП ΠΈ Web-страницы ΠΈΡ… Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² см. Π½Π° страницС Π›ΠΎΡ€Π°Π½Π° Π”Π°ΠΌΠΈ (Laurent Dami) [Dami-Web]. ΠŸΠΎΠ½ΡΡ‚ΠΈΡ ковариантности ΠΈ контравариантности заимствованы ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ. Π˜Ρ… появлСниСм Π² контСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΡ‹ обязаны Π›ΡƒΠΊΠ΅ ΠšΠ°Ρ€Π΄Π΅Π»Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ‡Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² своих выступлСниях с Π½Π°Ρ‡Π°Π»Π° 80-Ρ… Π³Π³., Π½ΠΎ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° 80-Ρ… Π½Π΅ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Π» ΠΊ Π½ΠΈΠΌ Π² ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ.

ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ Π½Π° основС Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… описаны Π² [Simons 1995], [Shang 1996], [Bruce 1997].

ΠšΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² языкС Sather. ПояснСния Π΄Π°Π½Ρ‹ Π² [Szypersky 1993].

ЛСкция 18. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ константы

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ Π½Π΅ достаточно - ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ПО Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° глобальная информация: раздСляСмыС Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ±Ρ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ для Π²Ρ‹Π²ΠΎΠ΄Π° ошибок, шлюз для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ сСти. Π’ классичСском ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ достаточно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ОО-систСмах Π½Π΅Ρ‚ Π½ΠΈ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Но раздСляСмыС (shared) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ - Π½Π΅ΠΊΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, ΠΏΡ€ΠΎΠ²ΠΎΠ·Π³Π»Π°ΡˆΠ°ΡŽΡ‰Π΅ΠΌΡƒ ΠΈΠ΄Π΅ΠΈ Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ автономности. Π‘ΠΎΡ€ΡŒΠ±Π° шла Π·Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π·Π° ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ власти. Π’Π΅ΠΏΠ΅Ρ€ΡŒ этой власти Π½Π΅Ρ‚. Как ΠΆΠ΅ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ систСму, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ тСряя своСй автономности, гибкости, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС?

ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ раздСляСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ число ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно Π²Π΅Π»ΠΈΠΊΠΎ. Π”Π° ΠΈ сама ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ сущСствованиС Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, хотя ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π²Π»Π°Π΄Π΅Ρ‚ΡŒ значСниями Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Поиск Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстного понятия, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΈ Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ проСктирования. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ константах. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ константа Pi, ΠΊΠ°ΠΊ Π½Π΅ простой, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚? ΠžΠ±ΠΎΠ±Ρ‰ΠΈΠ² это понятиС Π½Π° Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΌΡ‹ сдСлаСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

НачнСм с Ρ„ΠΎΡ€ΠΌΡ‹ записи констант.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ стиля - ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ символичСских констант - гласит, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (числу, символу ΠΈΠ»ΠΈ строкС) ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ косвСнным. Π”ΠΎΠ»ΠΆΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ константы, Π·Π°Π΄Π°ΡŽΡ‰Π΅Π΅ имя, ΠΈΠ³Ρ€Π°ΡŽΡ‰Π΅Π΅ Ρ€ΠΎΠ»ΡŒ символичСской константы (symbolic constant), ΠΈ связанноС с Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ - константа, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠ°ΡŽ манифСстной (manifest constant). Π”Π°Π»Π΅Π΅ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ константу. Π’ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ Π΄Π²Π° объяснСния.

[x]. Π§ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ тСкст Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ смысл US_states_count, Ρ‡Π΅ΠΌ числа 50;

[x]. Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ: ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ константу Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ, исправив лишь Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ допускаСт ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ манифСстных ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ часто говорят, Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… констант Π² качСствС "Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ…" элСмСнтов Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ Π² случаС с Ρ†ΠΈΠΊΠ»ΠΎΠΌ from i = 1 until i > n (Но n, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ символичСской константой).

Π˜Ρ‚Π°ΠΊ, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ простой ΠΈ ясный способ опрСдСлСния символичСских констант.

Атрибуты-константы

Как ΠΈ всС сущности, символичСскиС константы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса. Π‘ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ константы ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ с фиксированным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ для всСх экзСмпляров класса.

БинтаксичСски вновь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ слуТСбноС слово is, примСняСмоС ΠΏΡ€ΠΈ описании ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚ΠΎΠ»ΡŒΠΊΠΎ здСсь Π·Π° Π½ΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ опрСдСлСния констант Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² INTEGER, BOOLEAN, REAL ΠΈ CHARACTER:


Zero: INTEGER is 0

Ok: BOOLEAN is True

Pi: REAL is 3.1415926524

Backslash: CHARACTER is '\'



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

ΠŸΠΎΡ‚ΠΎΠΌΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²-констант.

Как ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ константы ΠΈΠ»ΠΈ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ. Π’Π°ΠΊ, Ссли C - класс, ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΡˆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ константы, Π° Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° класса ΠΊ сущности x присоСдинСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° C, Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ x.Backslash ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ символ '\'.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, константы Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π² памяти мСста. Π˜Ρ… Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ связано с ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π½Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, Ссли ΠΈΡ… Π² классС достаточно ΠΌΠ½ΠΎΠ³ΠΎ.

ИспользованиС констант

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ константы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС:


class FILE feature

error_code: INTEGER; -- Атрибут-пСрСмСнная

Ok: INTEGER is 0

Open_error: INTEGER is 1

...

open (file_name: STRING) is

-- ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ file_name

-- ΠΈ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π΅Π³ΠΎ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ

do

error_code := Ok

...

if "Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ" then

error_code := Open_error

end

end

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

end



ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ open ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:


f: FILE; ...

f.open

if f.error_code = f.Open_error then

"ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ€Ρ‹"

else

...

end



НСрСдко Π½ΡƒΠΆΠ½Ρ‹ ΠΈ Π½Π°Π±ΠΎΡ€Ρ‹ констант, Π½Π΅ связанных с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π˜Ρ…, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² класс, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΉ Π² Ρ€ΠΎΠ»ΠΈ родитСля всСх классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ константы. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляр класса:


class EDITOR_CONSTANTS

feature

Insert: CHARACTER is 'i'

Delete: CHARACTER is 'd'; -- ΠΈ Ρ‚.Π΄.

...

end

class SOME_CLASS_FOR_THE_EDITOR

inherit

EDITOR_CONSTANTS

...Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ...

feature ...

... ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ класса ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ константам, описанным Π² EDITOR_CONSTANTS ...

end



Класс, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ EDITOR_CONSTANTS, слуТит лишь для размСщСния Π² Π½Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹ констант, ΠΈ Π΅Π³ΠΎ Ρ€ΠΎΠ»ΡŒ ΠΊΠ°ΠΊ "Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ АВД" (Π° это - нашС Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса) Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. ВСорСтичСскоС обоснованиС ввСдСния Ρ‚Π°ΠΊΠΈΡ… классов ΠΌΡ‹ обсудим ΠΏΠΎΠ·Π΄Π½Π΅Π΅. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Π°Ρ схСма работоспособна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ мноТСствСнном наслСдовании, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ классу SOME_CLASS_FOR_THE_EDITOR ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов

БимволичСскиС константы ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ INTEGER. Они Π½ΡƒΠΆΠ½Ρ‹ ΠΈ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… значСниями ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов, созданных Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ. Π’ этом случаС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ с манифСстом для этого Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ слуТит класс, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ комплСксноС число:


class COMPLEX creation

make_cartesian, make_polar

feature

x, y: REAL

-- Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΈ мнимая Ρ‡Π°ΡΡ‚ΡŒ

make_cartesian (a, b: REAL) is

-- Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ a, ΠΌΠ½ΠΈΠΌΡƒΡŽ - b.

do

x := a; y := b

end

... ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (ΠΏΠΎΠΌΠΈΠΌΠΎ x ΠΈ y, Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π½Π΅Ρ‚) ...

end



ΠŸΡƒΡΡ‚ΡŒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ константу - комплСксноС число i, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π²Π½Π° 0, Π° мнимая 1. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ, - это Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½Π°Ρ константа Π²ΠΈΠ΄Π°


i: COMPLEX is "Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ комплСксноС число (0, 1)"



Как Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ послС is? Для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ записи Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… констант Π½Π΅ сущСствуСт.

МоТно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° основС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² класса: