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

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

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

class A feature {B, ...}

f...

...



Π΄Π΅Π»Π°Π΅Ρ‚ f доступным Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ собствСнных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² B. ΠŸΠΎΡ‚ΠΎΠΌΠΊΠΈ B, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΊΠ°, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΏΡ€Π°Π²Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠΎ всСм доступным B возмоТностям, Π² Ρ‚ΠΎΠΌ числС, ΠΊ f.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ наблюдСния ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚ это тСорСтичСскоС обоснованиС. ВсС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ классу, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ трСбуСтся ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ. Однако Π½Π°ΠΌ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ с появлСниСм ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ класса B Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² A ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ экспорта.

Богласно ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Бкрытия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ A Π΄Π°Π½ΠΎ ΠΏΡ€Π°Π²ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Π΄Π΅Π»Π°Ρ‚ΡŒ Π»ΠΈ f доступным для B, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΅ΠΌΡƒ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ свободу Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° B. Π’Π΅ΠΌ самым, ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ наслСдования ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠΌ экспортС

Π’Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ экспортированный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ доступСн ΠΊΠ°ΠΊ самому классу, Ρ‚Π°ΠΊ ΠΈ всСм Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ.

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

[x]. К ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ класса автоматичСски Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ.

[x]. Π’ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ наслСдованиС, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ динамичСскоС связываниС приводят ΠΊ ΠΈΠ΄Π΅Π΅ субподрядов.

[x]. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ созданиС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ) ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡΠ»Π°Π±ΠΈΡ‚ΡŒ прСдусловиС, ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ постусловиС.

[x]. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ require else (ΠΏΡ€ΠΈ объСдинСнии с прСдусловиСм связкой "ΠΈΠ»ΠΈ") ΠΈ ensure then (ΠΏΡ€ΠΈ объСдинСнии с постусловиСм связкой "ΠΈ"). ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ require/ensure Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ. Π’ отсутствиС Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сохраняСт исходныС утвСрТдСния.

[x]. Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс GENERAL ΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ настройку Π΅Π³ΠΎ наслСдник ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ пСрСопрСдСляСмыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΠΉ интСрСс для всСх создаваСмых Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ классов. Класс NONE Π·Π°ΠΌΡ‹ΠΊΠ°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Ρ‚ΠΊΡƒ наслСдования снизу.

[x]. Π—Π°ΠΌΠΎΡ€ΠΎΠ·ΠΈΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π΅Ρ‡Π½ΡƒΡŽ ΡΠ΅ΠΌΠ°Π½Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

[x]. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Π°Ρ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ со спСцифичСскими свойствами.

[x]. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° присваивания позволяСт динамичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. Π­Ρ‚Π° опСрация Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½Π° динамичСского связывания.

[x]. ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ Π²ΠΏΡ€Π°Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ любой сущности (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌ - Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ исходныС Ρ‚ΠΈΠΏΡ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ, ΡΠΎΠ³Π»Π°ΡΡƒΡΡΡŒ с трСбованиями ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°.

[x]. Π—Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ объявлСния (like anchor) - это ваТная Ρ‡Π°ΡΡ‚ΡŒ систСмы Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… объявлСний.

[x]. НаслСдованиС ΠΈ скрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ - это нСзависимыС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. ΠŸΠΎΡ‚ΠΎΠΌΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ экспортированныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ скрытыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

[x]. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, доступный самому классу, доступСн ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ.

БиблиографичСскиС замСчания

Π˜Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ зрСния Π½Π° взаимосвязь наслСдования ΠΈ скрытия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. Π² [Snyder 1986].

УпраТнСния

Π£16.1 НаслСдованиС: простота ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΈ упроститС Ρ€Π°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ стСка, сдСлав класс STACK3 ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ, Π° Π½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ STACK, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΠ·Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ. (Подсказка: см. ΠΏΡ€Π°Π²ΠΈΠ»Π° взаимодСйствия наслСдования ΠΈ скрытия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.)

Π£16.2 Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ класс VECTOR, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ числовыС Π²Π΅ΠΊΡ‚ΠΎΡ€Π° (ΠΊΠΎΠ»ΡŒΡ†ΠΎ) с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ матСматичСскими опСрациями. Π‘Π°ΠΌ класс рСкурсивно Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ числСнному Ρ‚ΠΈΠΏΡƒ, допуская Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, для этого Π²Π°ΠΌ придСтся ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ класс NUMERIC (ΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΈΠ· [M 1994a]).

Π£16.3 Экстракт?

Π’ случаС, ΠΊΠΎΠ³Π΄Π° x1 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ X, y1 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Y, ΠΈ Y являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ X, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ y1 := x1 Π±ΡƒΠ΄Π΅Ρ‚ нСдопустимым. Однако ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ extract, Ρ‚Π°ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ y1.extract (x1) ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ значСния ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° x1 Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° y1 ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· этих ссылок Π½Π΅ содСрТится Void.

ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ extract стоит ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ. (Подсказка: ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ вопросам коррСктности, Π² частности, ΠΊ ΠΏΠΎΠ½ΡΡ‚ΠΈΡŽ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.) ВыяснитС, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ эту Π·Π°Π΄Π°Ρ‡Ρƒ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΈΠ½Ρ‹ΠΌ способом.

ЛСкция 17. Випизация

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ описания Π² тСкстС систСмы Ρ‚ΠΈΠΏΠΎΠ² всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° этапС выполнСния. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, извСстноС ΠΊΠ°ΠΊ статичСская типизация (static typing), Π΄Π΅Π»Π°Π΅Ρ‚ нашС ПО:

[x]. Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ, позволяя компилятору ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ срСдствам ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ нСсоотвСтствия ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ смогут нанСсти Π²Ρ€Π΅Π΄;

[x]. Π±ΠΎΠ»Π΅Π΅ понятным, обСспСчивая Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ: Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² клиСнтских систСм ΠΈ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒ систСму;

[x]. Π±ΠΎΠ»Π΅Π΅ эффСктивным, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ информация ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ компилятору ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π₯отя вопросами Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ занимались ΠΈ Π²Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ срСды, Π΄Π° ΠΈ сама статичСская типизация примСняСтся Π² языках, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ООП, особСнно ярко эти ΠΈΠ΄Π΅ΠΈ проявили сСбя ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ основанном Π½Π° понятии Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, сливаясь с понятиСм модуля, ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ОО-ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ - класс.

О Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ: эта Π·Π°Π΄Π°Ρ‡Π° проста Π² своСй постановкС, Π½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π΅ подчас Π½Π΅Π»Π΅Π³ΠΊΠΎ.

Базисная конструкция

ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ОО-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ слСдствиС простоты ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠžΠΏΡƒΡΠΊΠ°Ρ Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ОО-систСмы происходят события Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° - Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (feature call):


x.f (arg)



ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ f Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, присоСдинСнным ΠΊ x, с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° arg (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ нСсколько Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Smalltalk говорят Π² этом случаС ΠΎ "ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ x сообщСния f с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ arg", Π½ΠΎ это - лишь ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΎΠ½ΠΎ нСсущСствСнно.

Π’ΠΎ, Ρ‡Ρ‚ΠΎ всС основано Π½Π° этой Базисной ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ (Basic Construct), ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ частично ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ красоты ОО-ΠΈΠ΄Π΅ΠΉ.

Из Базисной ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΈ Ρ‚Π΅ Π½Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ситуации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² процСссС выполнСния:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°

ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния ΠΈΠ»ΠΈ, для краткости, просто Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° (type violation) Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° x.f (arg), Π³Π΄Π΅ x присоСдинСн ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ OBJ, Ссли Π»ΠΈΠ±ΠΎ:

[x]. Π½Π΅ сущСствуСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ f ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠ³ΠΎ ΠΊ OBJ,

[x]. Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ имССтся, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ arg для Π½Π΅Π³ΠΎ нСдопустим.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ - ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… ситуаций:

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ОО-систСм

Когда ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ОО-систСмы ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°?