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

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

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

[x]. Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² устранСния всСх нСоднозначностСй;

[x]. Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π΅ΠΊΡƒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’ соотвСтствии с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, класс C, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ f ΠΎΡ‚ A ΠΈ B, Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, с Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ прСдупрСТдСния. НичСго ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° Π² тСкстС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° C Π½Π΅ обнаруТится Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅:


x: C

... x.f ...



ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ придСтся ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ссылку Π½Π° f, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΡƒΡŽ: x.f | A, Π»ΠΈΠ±ΠΎ x.f | B, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌΡ‹ΠΉ класс.

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ², Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π»ΠΈ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ: структура наслСдования класса касаСтся лишь самого класса ΠΈ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠΎΠ², Π½ΠΎ Π½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ примСнСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠŸΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ f ΠΈΠ· C, я Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Π²Π²Π΅Π΄Π΅Π½Π° эта функция классом C Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° ΠΈΠΌ ΠΎΡ‚ A ΠΈΠ»ΠΈ B.

Богласно Π²Ρ‚ΠΎΡ€ΠΎΠΉ стратСгии, запись x.f ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°. Π’Ρ‹Π±ΠΎΡ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² дСлаСтся срСдствами языка. ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅ΠΌ Π²Ρ‹Π±ΠΎΡ€Π° являСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ C пСрСчисляСт своих Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Для обращСния ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ особая Ρ„ΠΎΡ€ΠΌΠ° записи.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΎΡ‚ Lisp языках с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ мноТСствСнного наслСдования. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Ρ‹Π±ΠΎΡ€ сСмантики ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ вСсьма опасСн Π²Π²ΠΈΠ΄Ρƒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ нСсовмСстимости со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ смСна ΠΈΠΌΠ΅Π½. Одним ΠΈΠ· Π΅Π΅ прСимущСств являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания клиСнтского интСрфСйса с "понятными" ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ°

Анализ Ρ€ΠΎΠ»ΠΈ ΠΈΠΌΠ΅Π½, сдСланный Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ, позволяСт Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ вопросу ΠΎ внутриклассовой ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ (in-class name overloading).

Напомню, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Ada 83 ΠΈ Ada 95, ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° - ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ имя Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ синтаксичСского модуля. НапримСр, Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ опрСдСлСния:


infix "+" (a, b: VECTOR) is...

infix "+" (a, b: MATRIX) is...



Π―Π·Ρ‹ΠΊΠΈ Java ΠΈ C++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… класса.

Π Π°Π½Π΅Π΅ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π»ΠΈ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ синтаксичСской ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Π­Ρ‚ΠΎ - статичСский ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. Для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹Π·ΠΎΠ²Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, x + y, достаточно ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² x ΠΈ y, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½ ΠΈΠ· тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ примСняСтся ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сСмантичСской (ΠΈΠ»ΠΈ динамичСской) ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π’Π°ΠΊ, Ссли классы VECTOR ΠΈ MATRIX Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° NUMERIC ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚


infix "+" (a: T) is...



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

БохраняСтся Π»ΠΈ Ρ€ΠΎΠ»ΡŒ синтаксичСской ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ? Π’Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ. МоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ язык Ada 83, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ классов, Π΅Π΅ использовал. Но Π² ОО-языкС Π²Ρ‹Π±ΠΎΡ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ для обозначСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ - это прямой ΠΏΡƒΡ‚ΡŒ ΠΊ созданию бСспорядка.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π΅Ρ‰Π΅ ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ синтаксичСская Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ вступаСт Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с сСмантичСской, Π² Π°ΠΊΡ‚ΠΈΠ²Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ - ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ динамичСскоС связываниС. Рассмотрим Π²Ρ‹Π·ΠΎΠ² x.f (a). Если ΠΎΠ½ слСдуСт Π·Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ присваивания x := y ΠΈ a := b, Ρ‚ΠΎ ΠΏΡ€ΠΈ сохранСнии ΠΈΠΌΠ΅Π½ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π² точности Ρ‚Π΅ΠΌ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ для y.f (b), Π΄Π°ΠΆΠ΅ Ссли Ρ‚ΠΈΠΏΡ‹ b ΠΈ y ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² a ΠΈ x. Но ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ это свойство Π½Π΅ сохраняСтся! Π’Π΅ΠΏΠ΅Ρ€ΡŒ f ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: ΠΎΠ΄Π½ΠΎΠ³ΠΎ - Ρ‚ΠΈΠΏΠ° a, Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ - Ρ‚ΠΈΠΏΠ° b. Π§Π΅ΠΌΡƒ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅: синтаксичСской ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ»ΠΈ динамичСскому ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ? Π₯ΡƒΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Ρ‚ΠΈΠΏΠ° y ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΎΠ±Π° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. И Ρ‚Π°ΠΊΠΈΠΌ комбинациям, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ошибок, Π½Π΅Ρ‚ числа.

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

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

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π² ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ полСзности ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ, связан с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ класса STRING. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ строкС, ΠΏΡ€ΠΈ отсутствии ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ строку ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: s1.add_string (s2) ΠΈ s1.add_character ('A'), ΠΈΠ»ΠΈ Π² инфиксной записи s := s1++ s2 ΠΈ s := s1 + 'A'. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΎΠ±Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Π’Π°ΠΊ Π»ΠΈ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ? ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² CHARACTER ΠΈ STRING Π½Π°Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ свойствами. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ символа всСгда ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ строки Π½Π° 1. Π‘Ρ†Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ строк ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ (Ссли вторая строка пуста) ΠΈΠ»ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ каТСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ, Π½ΠΎ ΠΈ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, особСнно ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ошибок Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΄Π°ΠΆΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ, Π½ΠΎ ΠΈ Π² этом случаС придСтся ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. ΠžΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ½ΡΡ‚Ρ‹ΠΉ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ синтаксичСской ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎ ΠΈΡ… сигнатурС, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСоднозначности. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создания Ρ‚ΠΎΡ‡Π΅ΠΊ Π² полярной ΠΈΠ»ΠΈ Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚: make_cartesian ΠΈ make_polar. Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Ρ‹ ΠΎΠ±Π΅ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹, - ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° REAL, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСльзя. Для отраТСния Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ Π² самом Π΄Π΅Π»Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹, ΠΈΠΌ слСдуСт Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°.

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ создания ("конструкторов") Π² Java ΠΈ C++ нСльзя ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π±Π΅Π· ΠΈΡ€ΠΎΠ½ΠΈΠΈ. Π’Π°ΠΊ, Π²Ρ‹ Π½Π΅ Π²ΠΏΡ€Π°Π²Π΅ Π΄Π°Π²Π°Ρ‚ΡŒ конструкторам Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Π° Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ. ΠŸΡ‹Ρ‚Π°ΡΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, я Π½Π΅ нашСл Π½ΠΈΡ‡Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ ввСсти искусствСнный Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ (внутриклассовая) синтаксичСская ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ОО-срСдС создаСт Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½Π΅ давая Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… прСимущСств. (Π’Π΅ΠΌ ΠΆΠ΅, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Java, C++ ΠΈΠ»ΠΈ Ada 95, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ²Π΅Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ, прибСгая ΠΊ Π½Π΅ΠΉ лишь ΠΏΡ€ΠΈ создании конструкторов, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° язык Π½Π΅ оставляСт Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π°.) Π‘Ρ‚Π°Ρ€Π°ΡΡΡŒ ΡƒΠΌΠ΅Π»ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ΡΡŒ простого ΠΏΡ€Π°Π²ΠΈΠ»Π°: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ имя, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ имя ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

[x]. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ПО, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈΠ· ΠΊΡƒΠ±ΠΈΠΊΠΎΠ², Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ возмоТности объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… абстракций Π² ΠΎΠ΄Π½Ρƒ. Π­Ρ‚ΠΎ достигаСтся благодаря мноТСствСнному наслСдованию.

[x]. Π’ самых простых ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΡ… случаях мноТСствСнного наслСдования Π΄Π²Π° родитСля ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ нСзависимыС абстракции.

[x]. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊ для модСлирования систСм, Ρ‚Π°ΠΊ ΠΈ для повсСднСвной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО, Π² частности, создания ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

[x]. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅Π½ ΠΏΡ€ΠΈ мноТСствСнном наслСдовании Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

[x]. ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт ввСсти Π² классС контСкстно-Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ.

[x]. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ слСдуСт ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΡ‚ ΠΈΡ… ΠΈΠΌΠ΅Π½. Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Ρ€Π°Π·Π½Ρ‹Ρ… классах ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ извСстСн ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Класс опрСдСляСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

[x]. Π”ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ наслСдованиС - мощная Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° - Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ мноТСствСнного наслСдования, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ΄ΠΈΠ½ класс становится ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ нСсколькими способами.