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

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

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

Для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π½Π΅ ΡΠΎΠ³Π»Π°ΡΡƒΡŽΡ‰Π΅Π΅ΡΡ с количСством выполняСмых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², каТущихся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΏΠΎ сущСству, ΠΊΠ»ΠΎΠ½Π°ΠΌΠΈ), создаСт ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ ПО. И эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ использования слоТных ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств. ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ сами ΠΏΠΎ сСбС, эти ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ срСдства ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ "Π»Π΅Ρ‡ΠΈΡ‚ΡŒ" ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· рассмотрСнных Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π’Π΅Π΄ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ избыточности, Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π΅.

НСсомнСнно, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ окаТСтся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, Π½ΠΎ лишь Π² случаС, Ссли удастся Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ послС Π²ΠΎΠ·Π½ΠΈΠΊΡˆΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ компиляции ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π² этом. (Π’ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ Π£3.6 прСдлагаСтся Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС программирования.)

Но ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ? МоТно Π»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ A ΠΈ всСх Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части рисунка, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ A' ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части, избСгая дублирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств? Благодаря ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ наслСдования (inheritance), ОО-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ обСспСчиваСт особСнно изящный Π²ΠΊΠ»Π°Π΄ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ наслСдования ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСтся Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… лСкциях, Π° здСсь даСтся лишь ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎΠ± этом. Для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄ΠΈΠ»Π΅ΠΌΠΌΡ‹, - ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ - наслСдованиС позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ A' Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ модуля A, констатируя лишь различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ОпишСм A' ΠΊΠ°ΠΊ


class A' inherit

A

redefine f, g, ... end

feature

f is ...

g is ...

...

u is ...

...

end


Π³Π΄Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ feature содСрТит ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Ρ… для A', Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ u, Ρ‚Π°ΠΊ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ f, g,:), прСдставлСниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² A' отличаСтся ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅Π»ΠΈ Π² A.

Для графичСской ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ наслСдования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стрСлка ΠΎΡ‚ "наслСдника" (heir) (Π½ΠΎΠ²ΠΎΠ³ΠΎ класса A') ΠΊ "Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ" (parent) (классу A):

Рис. 3.14.  ΠΠ΄Π°ΠΏΡ‚ация модуля ΠΊ Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ

Благодаря ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ наслСдования ОО, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО, Ρ‡Π΅ΠΌ это Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ использовании ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Один ΠΈΠ· способов описания ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ· Π½Π΅Π³ΠΎ ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² состоит Π² рассмотрСнии ΠΈΡ… ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ хакСрства. Под "хакСрством" здСсь понимаСтся Π½Π΅Π±Ρ€Π΅ΠΆΠ½Ρ‹ΠΉ (slipshod) ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π° вовсС Π½Π΅ нСсанкционированноС ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, нСдопустимоС ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ сСти). Π₯Π°ΠΊΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ»ΠΎΡ…ΠΈΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, Π½ΠΎ часто намСрСния Π΅Π³ΠΎ чисты. Он ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… потрСбностСй, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ прСвосходящих потрСбности, прСдусмотрСнныС ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π΄ΠΎΡ…Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ…Π²Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, наш Ρ…Π°ΠΊΠ΅Ρ€ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, дополняя Π΅Π³ΠΎ срСдствами для выполнСния Π½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡ€Ρ‹Π² Π½Π΅ΠΏΠ»ΠΎΡ…, Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ часто оказываСтся "засорСниС" ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ многочислСнными выраТСниями Π²ΠΈΠ΄Π°: if(этот_частный_случай) then. ПослС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, осущСствляСмыми Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ…Π°ΠΊΠ΅Ρ€Π°ΠΌΠΈ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π»ΠΎΠΌΠΎΡ‚ΡŒ ΡˆΠ²Π΅ΠΉΡ†Π°Ρ€ΡΠΊΠΎΠ³ΠΎ сыра, оставлСнного слишком Π΄ΠΎΠ»Π³ΠΎ Π½Π° августовской ΠΆΠ°Ρ€Π΅ (Π±Π΅Π·Π²ΠΊΡƒΡΠ½ΠΎΡΡ‚ΡŒ этой ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Ρ‹ оправдываСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ воспроизводит появлСниС Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠ°ΠΊ "Π΄Ρ‹Ρ€ΠΎΠΊ", Ρ‚Π°ΠΊ ΠΈ "наростов").

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° хакСрства Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΡΠΏΠΎΡΠ°Π±Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉΡΡ структурС Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹Ρ… Π·Π°Π΄Π°Ρ‡, Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ нСпротиворСчивости исходной вСрсии.

НСбольшоС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: здСсь Π½Π΅ прСдлагаСтся Π½Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ хакСрство. Π’ частности:

[x]. Если имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π°, Π±Π΅Π· излишнСго услоТнСния, смогла ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ потрСбности Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… разновидностСй ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ слСдуСт это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

[x]. Как ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚, Ρ‚Π°ΠΊ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ наслСдования Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Если Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Π² порядкС, Ρ‚ΠΎ слСдуСт это сразу ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π½Π΅ ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π° являСтся случай Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚ ΠΈ связанныС с Π½ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ программирования, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ "Π·Π΄ΠΎΡ€ΠΎΠ²Ρ‹Ρ…" ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотя ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΎΠ²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ трСбованиям Π² интСрСсах своих ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

ЕдинствСнный Π’Ρ‹Π±ΠΎΡ€

ПослСдний ΠΈΠ· пяти ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ слСдствиСм ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Бкрытия Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ ЕдинствСнного Π’Ρ‹Π±ΠΎΡ€Π°, рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ создаСтся систСма для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ (Π² Π½Π΅-программистском смыслС слова: с мноТСством ΠΊΠ½ΠΈΠ³ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ·Π΄Π°Π½ΠΈΠΉ, Π° Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). Π­Ρ‚Π° систСма Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. МоТно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ Π² синтаксисС языков Pascal-Ada:


type PUBLICATION =

record

author, title: STRING;

publication_year: INTEGER

case pubtype:(book, journal, conference_proceedings) of

book:(publisher: STRING);

journal:(volume, issue: STRING);

proceedings:(editor, place: STRING) -- Conference proceedings

end


Π—Π΄Π΅ΡΡŒ использован "Ρ‚ΠΈΠΏ записи с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ" (record type with variants) для описания Π½Π°Π±ΠΎΡ€ΠΎΠ² структур Π΄Π°Π½Π½Ρ‹Ρ… с полями, ΠΎΠ΄Π½ΠΈ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… (Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ author, title, publication_year) ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ Π²ΠΎ всСх случаях, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ - Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ для частных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

ИспользованиС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ синтаксичСской конструкции здСсь Π½Π΅ являСтся сущСствСнным. Π―Π·Ρ‹ΠΊΠΈ программирования Algol 68 ΠΈ C ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΈΠΏΠ° "объСдинСниС" (union). Π’ΠΈΠΏ union это Ρ‚ΠΈΠΏ T, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ объСдинСниС Ρ€Π°Π½Π΅Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² A, B,:: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° T это Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° A, Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° B,: . Достоинством Ρ‚ΠΈΠΏΠΎΠ² записСй с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½ΠΈΡ… с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ явно связан Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ярлык (tag), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ book, journal, conference_proceedings.

ΠŸΡƒΡΡ‚ΡŒ A - ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит описанноС Π²Ρ‹ΡˆΠ΅ объявлСниС Ρ‚ΠΈΠΏΠ°. Пока ΠΌΠΎΠ΄ΡƒΠ»ΡŒ A считаСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ поля ΠΈΠ»ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ Π½ΠΎΠ²Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Но ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ A пСрСдаСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, слСдуСт Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ, Π° это ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ ΡƒΠΆΠ΅ пСрСчислСны всС сущСствСнныС поля ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Π˜Ρ‚Π°ΠΊ, ΠΏΡƒΡΡ‚ΡŒ B это Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ модуля A. B Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с публикациями Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


p: PUBLICATION


Π§Ρ‚ΠΎΠ±Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ p ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ дСйствия, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ случаи:


case p of

book:... Instructions which may access the field p.publisher...

journal:... Instructions which may access fields p.volume, p.issue...

proceedings:... Instructions which may access fields p.editor, p.place...

end


Π—Π΄Π΅ΡΡŒ оказалась ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π±ΠΎΡ€Π° case ΠΈΠ· языков Pascal ΠΈ Ada; Π΅Π΅ синтаксис воспроизводит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° записи с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ. Π’ Fortran'Π΅ ΠΈ C это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌ использованиСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° goto (switch Π² языкС C). Π’ этих ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° (if ... then ... elseif ... elseif ... else ... end).

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, нСзависимо ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ синтаксичСской конструкции, для осущСствлСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² прСдставлСния для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ A. ΠŸΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡ этого Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. Наступит ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° потрСбуСтся Π½ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ тСхничСскиС ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ Ρ„ΠΈΡ€ΠΌ ΠΈ унивСрситСтов. Π’ΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° PUBLICATION Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ A, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΉ случай. Π­Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ: Ссли Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ понятия ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‚ΠΎ слСдуСт ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ объявлСниС Ρ‚ΠΈΠΏΠ°. Однако Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡŽ: любой ΠΊΠ»ΠΈΠ΅Π½Ρ‚ модуля A, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ B, Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ обновлСния, Ссли Π² Π½Π΅ΠΌ использовалась рассмотрСнная Π²Ρ‹ΡˆΠ΅ структура, основанная Π½Π° ΠΏΠΎΠ»Π½ΠΎΠΌ спискС случаСв для p. А это, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ мСсто для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².