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

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

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

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Π°Ρ‚ΡŒ понятным Π³Π»Π°Π²Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ· ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² наслСдования:

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ динамичСского связывания

Если Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ статичСского связывания Π½Π΅ совпадаСт с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ динамичСского связывания, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ статичСскоС связываниС сСмантичСски Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Рассмотрим Π²Ρ‹Π·ΠΎΠ² x.r. Если x объявлСна Ρ‚ΠΈΠΏΠ° A, Π½ΠΎ Π² процСссС вычислСния Π±Ρ‹Π»Π° присоСдинСна ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° B, Π° Π² классС B ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ r ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ρ‚ΠΎ использованиС Π² этом Π²Ρ‹Π·ΠΎΠ²Π΅ исходной вСрсии r ΠΈΠ· класса A - это Π½Π΅ вопрос Π²Ρ‹Π±ΠΎΡ€Π°, это просто ошибка!

БСзусловно, имСлись ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для пСрСопрСдСлСния r. Одной ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ оптимизация, ΠΊΠ°ΠΊ Π² случаС с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ perimeter Π² классС RECTANGLE, Π½ΠΎ ΠΌΠΎΠ³Π»ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ исходная вСрсия r просто Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· B. Рассмотрим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эскизно описанный класс BUTTON (КНОПКА), ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ наслСдником класса WINDOW (ОКНО) Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмС (ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ ΠΎΠΊΠΎΠ½). Π’ этом классС ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° display, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ изобраТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π΅ Ρ€Π°ΠΌΠΊΡƒ). Π’ этом случаС, Ссли w ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ WINDOW, Π½ΠΎ динамичСски связана, благодаря ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ, с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° BUTTON, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² w.display Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ для "ΠΊΠ½ΠΎΠΏΠΎΡ‡Π½ΠΎΠΉ" вСрсии! ИспользованиС display ΠΈΠ· класса WINDOW ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ искаТСнию изобраТСния Π½Π° экранС.

ΠœΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ нас ΠΎΠ±ΠΌΠ°Π½ΡƒΠ»Π° Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ систСмы Ρ‚ΠΈΠΏΠΎΠ², основанная Π½Π° наслСдовании, особСнно Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ совмСстимости Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ абстракции Π±ΠΎΠ»Π΅Π΅ высоком, Ρ‡Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚ΠΈΠΏΠ° присоСдинСнного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ выполнСния. Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ СдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, - это Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π° сущности - ΠΈΠΌΠ΅Π½Π° Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ - ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π·Π°Π±Ρ‹Ρ‚Ρ‹. Кнопка ΠΏΠΎΠ΄ Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ остаСтся ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½Π°Π·Π²Π°Π½Π° Π»ΠΈ ΠΎΠ½Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΈΠ»ΠΈ присоСдинСна ΠΊ сущности Ρ‚ΠΈΠΏΠ° ΠΎΠΊΠ½ΠΎ.

Π­Ρ‚ΠΎ рассуТдСниС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ матСматичСским Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ. Напомним условиС коррСктности ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ· Π»Π΅ΠΊΡ†ΠΈΠΈ 11 ΠΎΠ± утвСрТдСниях:


{prer (xr) and INV} Bodyr {postr (xr) and INV}.



Для Ρ†Π΅Π»Π΅ΠΉ нашСго обсуТдСния Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ, оставив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ, ΠΎΡ‚Π½ΠΎΡΡΡ‰ΡƒΡŽΡΡ ΠΊ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ классов, опустив Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² качСствС индСкса имя класса A:

[A-CORRECT]


{INVA} rA {INVA}



Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всякоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ r ΠΈΠ· класса A сохраняСт ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ этого класса. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ r Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ собствСнном ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅ B. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ свойство Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Ссли Π½ΠΎΠ²Ρ‹ΠΉ класс ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½:

[B-CORRECT]


{INVB} rB {INVB}



Напомним, Ρ‡Ρ‚ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ структурС наслСдования, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ INVB Π²Π»Π΅Ρ‡Π΅Ρ‚ INVA, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Рис. 14.14.  Π’Срсия родитСля ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ

Напомним, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ RECTANGLE добавляСт собствСнныС условия ΠΊ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ класса POLYGON. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, рассмотрСнный ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 11, это класс ACCOUNT1 с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ withdrawals_list ΠΈ deposits_list; Π΅Π³ΠΎ собствСнный ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ACCOUNT2 добавляСт ΠΊ Π½Π΅ΠΌΡƒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎ сообраТСниям эффСктивности, Π½ΠΎΠ²Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ balance для постоянного запоминания Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ баланса счСта. К ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ добавляСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅:


consistent_balance: deposits_listltotal - withdrawals_listltotal = current_balance



Из-Π·Π° этого, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, придСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ класса ACCOUNT1; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° deposit, которая использовалась просто для добавлСния элСмСнта Π² список deposits_list, сСйчас Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ balance. Π˜Π½Π°Ρ‡Π΅ класс просто станСт ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ вСрсия ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ display ΠΈΠ· класса WINDOW Π½Π΅ являСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ для экзСмпляра класса BUTTON.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° B, достиТимому Ρ‡Π΅Ρ€Π΅Π· ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° A, примСняСтся статичСскоС связываниС. ΠŸΡ€ΠΈ этом ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ вСрсия ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ rA , ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ (ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, depositACCOUNT1 для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° ACCOUNT2 ΠΈΠ»ΠΈ displayWINDOW для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° BUTTON), Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ACCOUNT2 с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ balance ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса BUTTON, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½Π° экранС).

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

Π‘ΡƒΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ: статичСскоС связываниС являСтся Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Π»ΠΈΠ±ΠΎ ошибкой. Если Π΅Π³ΠΎ сСмантика совпадаСт с сСмантикой динамичСского связывания (ΠΊΠ°ΠΊ Π² случаях (1) ΠΈ (2)), Ρ‚ΠΎ ΠΎΠ½ΠΎ являСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ компилятор. Если Ρƒ Π½Π΅Π³ΠΎ другая сСмантика, Ρ‚ΠΎ это ошибка.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ языка Π‘++ ΠΊ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ

Учитывая ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС ΠΈ влияниС языка Π‘++ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π² Π½Π΅ΠΌ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· обсуТдаСмых здСсь вопросов.

БоглашСния, принятыС Π² Π‘++, каТутся странными. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ связываниС являСтся статичСским. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° (Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Π‘++ - функция ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄) ΡΠ²ΡΠ·Ρ‹Π²Π°Π»Π°ΡΡŒ динамичСски, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ объявлСна ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ (virtual).

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ приняты Π΄Π²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

1 Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ программиста отвСтствСнным Π·Π° Π²Ρ‹Π±ΠΎΡ€ статичСского ΠΈΠ»ΠΈ динамичСского связывания.

2 Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСскоС связываниС Π² качСствС ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ.

Оба Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ПО, Π½ΠΎ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ стСпСни: (1) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Π° (2) Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ.

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ этой ΠΊΠ½ΠΈΠ³ΠΈ (1) Π²Π΅Π΄Π΅Ρ‚ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ пониманию Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ людьми (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ПО), Π° ΠΊΠ°ΠΊΠΈΠ΅ - ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ (Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, компиляторами). Π­Ρ‚ΠΎ Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ ΠΏΡ€ΠΈ обсуТдСнии автоматичСского распрСдСлСния памяти. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Π‘++ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ C ΠΈ Π΄Π°Π΅Ρ‚ программисту ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ случится Π²ΠΎ врСмя выполнСния, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ этого, Π² Π΄ΡƒΡ…Π΅ ОО-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ стрСмлСниС ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° ΠΏΠ»Π΅Ρ‡ΠΈ компилятора всС ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам, ΠΈ для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ подходящиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. Π’ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅ ΠΈ Π½Π° большом ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляторы всСгда справятся с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π»ΡƒΡ‡ΡˆΠ΅.

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

ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ нСсогласиС с Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ (1): Π‘++ считаСт, Ρ‡Ρ‚ΠΎ статичСскоС связываниС, ΠΊΠ°ΠΊ ΠΈ подстановка ΠΊΠΎΠ΄Π°, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Π° Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ Π² этой ΠΊΠ½ΠΈΠ³Π΅ ОО-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π° это ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ сам ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹. БтатичСскоС связываниС - это оптимизация, Π° Π½Π΅ Π²Ρ‹Π±ΠΎΡ€ сСмантики.

Для ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° имССтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ послСдствиС (1). ВсСгда ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ трСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ связывания: являСтся ΠΎΠ½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Ρ‚.Π΅. Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ динамичСски ΠΈΠ»ΠΈ статичСски. Вакая ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ заставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° с самого Π½Π°Ρ‡Π°Π»Π° ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ, Π° Ρ‡Ρ‚ΠΎ - Π½Π΅Ρ‚. Π­Ρ‚ΠΎ Π½Π΅ соотвСтствуСт Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ наслСдованиС: Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Π΄Π°Π»Π΅ΠΊΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅ класса, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ нСльзя Π±Ρ‹Π»ΠΎ это ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. ΠŸΡ€ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π‘++, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ исходного класса Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ прСдусмотрСл, Ρ‚ΠΎ придСтся снова Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ этому классу, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ объявлСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π° virtual. ΠŸΡ€ΠΈ этом прСдполагаСтся, Ρ‡Ρ‚ΠΎ исходный тСкст доступСн для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. А Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚, ΠΈΠ»ΠΈ Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π΅Ρ‚ ΠΏΡ€Π°Π²Π° Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ, Ρ‚ΠΎ вас ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π³ΠΎΡ€ΡŒΠΊΠ°Ρ ΡƒΡ‡Π°ΡΡ‚ΡŒ.