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

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

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

[x]. ВстраиваниС ΠΊΠΎΠ΄Π° Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ, ΠΈ компилятор Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

[x]. ΠŸΡ€ΠΈ внСсСнии ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ПО, Π² частности с использованиСм наслСдования, встроСнная ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π½Π΅ встроСнной. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ выявит Ρ‚Π°ΠΊΠΈΠ΅ ситуации Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.

[x]. Π’ случаС Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСм компилятор всСгда Π±ΠΎΠ»Π΅Π΅ эффСктивСн. На основС Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ числа Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ цСлСсообразно Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ сущСствСнно Π² случаС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ПО, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π΅ Π² состоянии ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°.

[x]. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΡΡ‚ΡŒ врСмя Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ.

БоврСмСнная концСпция Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΈ Ρ‚ΠΎΠ½ΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π»Π°Π³Π°Ρ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Π° Π½Π΅ Π½Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Π­Ρ‚ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΈ C++ ΠΈ Ada. ΠœΡ‹ вСрнСмся ΠΊ этому вопросу ΠΏΡ€ΠΈ обсуТдСнии Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ - управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ динамичСского связывания. (Π‘ΠΌ. "ВрСбования ΠΊ сборщику мусора", лСкция 9, ΠΈ "ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ C++ ΠΊ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ", лСкция 14)

АрхитСктурная Ρ€ΠΎΠ»ΡŒ сСлСктивного экспорта

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

Π‘Π΅Π· сСлСктивного экспорта СдинствСнным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ собой Π³Ρ€ΡƒΠΏΠΏΡƒ классов. Π’Π°ΠΊΠΈΠ΅ супСрмодули - Π°Π½Π°Π»ΠΎΠ³ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ada ΠΈ Java - Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ скрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ экспорт ΠΏΠΎ своим ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ»Π΅Π³Π°Π½Ρ‚Π½ΡƒΡŽ структуру, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° классах, Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ частично нСсовмСстимого ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ уровня ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΡƒΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡŽ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ объСма языка.

Π›ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся использованиС Π² качСствС супСрмодулСй самих классов. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Simula, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΌ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ классов. Однако ΠΎΠ½ Π½Π΅ Π΄Π°Π΅Ρ‚ ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹Ρ… прСимущСств.

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

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ объСдинСния классов Π² структурированныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ сохраняСтся. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΎΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‡Π΅Ρ€Π΅Π· понятиС кластСра (лСкция 10 курса "ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования"). Однако понятиС кластСра относится ΠΊ области управлСния ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. Если Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² качСствС языковой конструкции, Ρ‚ΠΎ это ΡƒΠ³Ρ€ΠΎΠ·Π° ΠΏΠΎΡ‚Π΅Ρ€ΠΈ простоты ОО-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

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

Π˜ΠΌΠΏΠΎΡ€Ρ‚ листингов

Π’ исходных тСкстах классов, Π² прСдлоТСниях feature, пСрСчислСны ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, доступныС Π΄Ρ€ΡƒΠ³ΠΈΠΌ классам. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ списки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов? Π―Π·Ρ‹ΠΊ Modula-2 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, объявлСниС import.

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


a.f


Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ объявлСниС a:


a: C


нСдвусмыслСнно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ f ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° C. Π’ случаС классов ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² информация Π±ΡƒΠ΄Π΅Ρ‚ доступна ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ класса, Π΅Π³ΠΎ плоской ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅Ρ‚ нСобходимости Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ import. ("Плоская краткая Ρ„ΠΎΡ€ΠΌΠ°", лСкция 11)

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, удобная графичСская срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ прСдоставлСния программисту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ поставщиках ΠΈ ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΈ ΠΈΡ… поставщиках ΠΈ ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ…, слСдуя Π΄Π°Π»Π΅Π΅ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅.

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° являСтся интСрСсной языковой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, обсуТдСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΎ Π½Π°Ρ‡Π°Ρ‚ΠΎ Ρ€Π°Π½Π΅Π΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π²Π²ΠΈΠ΄Ρƒ Π΅Π΅ ваТности ΠΈ для языков, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ОО-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ - ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. ЦСлью любого Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся вычислСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Вопрос Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ этот Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² тСкстС самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² частности Π² инструкциях ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ соглашСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Result. Она рассматриваСтся ΠΊΠ°ΠΊ локальная ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, инициализируСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Result. Π’ соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСгда ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Π΄Π°ΠΆΠ΅ Ссли Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅Ρ‚ присваивания Result значСния. Π’Π°ΠΊ функция


f: INTEGER is

do

if some_condition then Result := 10 end

end


Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ 10 ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ условия some_condition Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ 0 (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ INTEGER) Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Насколько извСстно Π°Π²Ρ‚ΠΎΡ€Ρƒ, Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° использования Result Π±Ρ‹Π»Π° Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅. Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ издания ΠΎΠ½Π° Π±Ρ‹Π»Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π² ΠΎΠ΄ΠΈΠ½ язык - Borland Delphi. Надо Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠ° для языков, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΡ… объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ имя Result становится двусмыслСнным. Π’ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹:

[x]. (A) Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструкции return (C, C++/Java, Ada, Modula-2).

[x]. (B) ИспользованиС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Fortran, Algol 60, Simula, Algol 68, Pascal).

БоглашСниС A основано Π½Π° инструкции Π²ΠΈΠ΄Π° return e , Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ функция, возвращая e Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Π΅Π³ΠΎ ясности, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ‚ΠΊΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π² тСкстС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Однако ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ стороны:

[x]. (A1) На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ часто опрСдСляСтся Π² процСссС вычислСний, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ряд ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ значСния. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для хранСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

[x]. (A2) ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΊ использованию ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с нСсколькими Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ структурирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

[x]. (A3) Π’ языкС Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ прСдусмотрСна ситуация, ΠΊΠΎΠ³Π΄Π° послСдняя инструкция, выполнСнная ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ являСтся return. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Ada Π² этом случаС возбуТдаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

Π”Π²Π΅ послСдниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ, Ссли Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ return Π½Π΅ ΠΊΠ°ΠΊ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, Π° ΠΊΠ°ΠΊ синтаксичСскоС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ тСкста любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:


function name (arguments): TYPE is

do

...

return

expression

end


Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ идСю инструкции return ΠΈ устраняСт Π΅Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ нСдостатки. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ язык Π΅Π³ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, оставляя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ A1 ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ.

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° B ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² тСкстС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ совпадаСт с ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ избавляСт ΠΎΡ‚ нСобходимости объявлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, упомянутой Π² A1.

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ. Но Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ трудности, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΅Π΅ Ρ‚Π΅Π»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ истолковано двояко: ΠΊΠ°ΠΊ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΊΠ°ΠΊ рСкурсивный Π²Ρ‹Π·ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ язык Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΈΡ… ситуациях Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Π² ΠΊΠ°ΠΊΠΈΡ… ΠΎ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f, имя f присутствуСт ΠΊΠ°ΠΊ Ρ†Π΅Π»ΡŒ присваивания, Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ