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

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

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

Π­Ρ‚ΠΈ наблюдСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странными Ρ‚ΠΎΠΌΡƒ, ΠΊΡ‚ΠΎ познакомился с ОО-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· Π»ΠΈΠ½Π·Ρƒ прСдставлСний ΠΎΠ± ОО-Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализация ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ·Π΅ΠΌΠ»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдуСт Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΎ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° всСх ΡˆΠ°Π³Π°Ρ…, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ПО, ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ увязкС ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π»Π΅ΠΊΡ†ΠΈΠΉ, Ссли Π²Ρ‹ ΠΎΡ‚ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ эффСктивности, Ρ‚ΠΎ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ откаТСтся ΠΎΡ‚ вас. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ОО-тСхнология это Π½Π΅Ρ‡Ρ‚ΠΎ большСС, Ρ‡Π΅ΠΌ динамичСскоС связываниС Π·Π° константноС врСмя, Π½ΠΎ Π±Π΅Π· этого Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ОО-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.


ΠžΡ†Π΅Π½ΠΊΠ° Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π³Ρ€ΡƒΠ±ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π½Π° Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы для описанных Π²Ρ‹ΡˆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² динамичСского связывания. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹ взяты ΠΈΠ· ΠΎΠΏΡ‹Ρ‚ΠΎΠ² ISE ΠΏΠΎ использованию динамичСского связывания (Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ объясняСмой Π½ΠΈΠΆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ статичСского связывания).

Для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, которая Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚, Ρ‚. Π΅. описана ΠΊΠ°ΠΊ p1 is do end, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ динамичСского связывания Π½Π°Π΄ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ статичСского связывания (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Π΄ эквивалСнтной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ Π½Π° C) составляСт ΠΎΠΊΠΎΠ»ΠΎ 30%.

Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΡ†Π΅Π½ΠΊΠ° свСрху, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π° Π΄Π΅Π»Π°ΡŽΡ‚. Π¦Π΅Π½Π° динамичСского связывания ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π° для всСх ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ нСзависимо ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡ… выполнСния, поэтому, Ρ‡Π΅ΠΌ больший объСм вычислСний выполняСт ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Ρ‚Π΅ΠΌ мСньшС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ доля Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов. Если вмСсто p1 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, которая выполняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°ΠΊ


p2 (a, b, c: INTEGER) is

local

x, y

do

x := a; y := b + c + 1; x := x * y; p2

if x > y then x := x + 1 else x := x - 1 end

end



Ρ‚ΠΎ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΏΠ°Π΄Π°ΡŽΡ‚ Π΄ΠΎ 15%. Для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ Π½Π΅Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ сущСствСнноС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ†ΠΈΠΊΠ») ΠΈΡ… доля совсСм ΠΌΠ°Π»Π°.

БтатичСскоС связываниС ΠΊΠ°ΠΊ оптимизация

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π³Π»Π°Π²Π½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ являСтся ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ нСбольшиС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ всСгда обоснованы. Π’Ρ‹Π·ΠΎΠ² x.f (a, b, c...) Π½Π΅ нуТдаСтся Π² динамичСском связывании Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

1 f Π½ΠΈΠ³Π΄Π΅ Π² систСмС Π½Π΅ пСрСопрСдСляСтся (ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ объявлСниС);

2 x Π½Π΅ являСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ, ΠΈΠ½Π°Ρ‡Π΅ говоря, Π½Π΅ являСтся Ρ†Π΅Π»ΡŒΡŽ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ присоСдинСния, источник ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ.

Π’ любом ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… случаСв, выявляСмых Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ компилятором, сгСнСрированный для x.f (a, b, c...) ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ΄, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ компиляторами C, Pascal, Ada ΠΈΠ»ΠΈ Fortran для Π²Ρ‹Π·ΠΎΠ²Π° f (x, a, b, c...). НикакиС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ISE, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ окруТСния, описанного Π² послСднСй Π»Π΅ΠΊΡ†ΠΈΠΈ, сСйчас выполняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ (1), планируСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈ (2) (Π°Π½Π°Π»ΠΈΠ· (2) являСтся, фактичСски, слСдствиСм ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π° Ρ‚ΠΈΠΏΠΎΠ², описанных Π² Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ).

Π₯отя (1) интСрСсно ΠΈ само ΠΏΠΎ сСбС, нСпосрСдствСнная Π΅Π³ΠΎ польза ограничиваСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ динамичСского связывания (см. ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ статистику). Настоящий Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ ΠΎΡ‚ Π½Π΅Π³ΠΎ нСпрямой, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ (1) Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

4. ΠŸΡ€ΠΈ любой возмоТности ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ подстановку ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

Вакая подстановка ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ тСкстом Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² мСстС Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π°. НапримСр, для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹


set_a (x: SOME_TYPE) is

-- Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ x Π½ΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° a.

do

a := x

end



компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для Π²Ρ‹Π·ΠΎΠ²Π° s.set_a (some_value) Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊΠΎΠΉ компилятор Pascal сгСнСрируСт для присваивания s.a := some_value (нСдопустимоС для нас ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ скрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ). Π’ этом случаС Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сгСнСрированный ΠΊΠΎΠ΄ Π½Π΅ содСрТит Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

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

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

К ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ эффСктивности, растущСму с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ слоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, автоматичСская подстановка ΠΊΠΎΠ΄Π° добавляСт прСимущСство большСй надСТности ΠΈ гибкости. Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, подстановка ΠΊΠΎΠ΄Π° сСмантичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ статичСски ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Π² случаях (1) ΠΈ (2). Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ допустимо, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ согласуСтся с ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, Π² частности, с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° ΠΏΠΎΠ»ΠΏΡƒΡ‚ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ большой систСмы Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, имСвшСго ΠΊ этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Если ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ вставляСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ сСмантикой (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС трСбуСтся динамичСскоС связываниС, Π° вставка ΠΊΠΎΠ΄Π°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ статичСскоС связываниС). Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° построСнии ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π΅ занимаясь ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ оптимизациями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ приводят ΠΊ ошибкам, Π° Π½Π° Π΄Π΅Π»Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ трСбования для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ подстановка ΠΊΠΎΠ΄Π° Π±Ρ‹Π»Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ, Π² частности, ΠΎΠ½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ нСрСкурсивным Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ. Π”Π°ΠΆΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ подстановку слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠΌ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ: подставляСмая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ нСбольшой ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ нСбольшоС число Ρ€Π°Π·.

ПослСднСС Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎΠ± эффСктивности. ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Π°Ρ статистика для ОО-языков ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ ΠΎΡ‚ 30% Π΄ΠΎ 60% Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π° самом Π΄Π΅Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ динамичСскоС связываниС. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько интСнсивно Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ спСцифичСскиС свойства ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’ систСмС ISE это ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ 60%. Π‘ использованиСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ описанных ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ придСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° динамичСскоС связываниС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Π½Π΅ΠΌ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ. Для ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ динамичСских Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Π»Ρ‹ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ константой), Π½ΠΎ ΠΈ логичСски Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, - Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв для достиТСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, эквивалСнтного динамичСскому ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ, придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (if ... then ... ΠΈΠ»ΠΈ case ... of ...), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π΄ΠΎΡ€ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ простого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, основанного Π½Π° доступС ΠΊ массивам. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ОО-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ компилятором, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡ€Π΅Π²Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ с написанным Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° C.

Кнопка ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ: ΠΊΠΎΠ³Π΄Π° статичСскоС связываниС ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ

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

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

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

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

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