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

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

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

Π§ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° понимания (readability) ΠΈΠΌΠ΅Π΅Ρ‚ свои прСимущСства. Π’ΠΎ всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… этой ΠΊΠ½ΠΈΠ³ΠΈ появлСниС Ρ‚ΠΈΠΏΠ° Ρƒ сущности Π΄Π°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΅Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ. Π§ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½Π° Π½Π° этапС сопровоТдСния.

Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΠ² Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΊΡ€ΡƒΠ³Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прСимущСства, Π½Π΅ вводя явных объявлСний. Π’ самом Π΄Π΅Π»Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° нСявная Ρ„ΠΎΡ€ΠΌΠ° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° компилятор, Π½Π΅ трСбуя явного указания Ρ‚ΠΈΠΏΠ°, пытаСтся автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· контСкста примСнСния сущности. Π­Ρ‚Π° стратСгия извСстна ΠΊΠ°ΠΊ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² (type inference). Но Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ явныС объявлСния Ρ‚ΠΈΠΏΠΎΠ² это ΠΏΠΎΠΌΠΎΡ‰ΡŒ, Π° Π½Π΅ Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΠ΅, - Ρ‚ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ясСн Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ машинС, Π½ΠΎ ΠΈ Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ тСкст Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ.

НаконСц, ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ успСх ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π’ отсутствиС статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ x.f (arg) ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΉΡ‚ΠΈ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° этапС выполнСния, Π½Π΅ найдя f Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС Ρ†Π΅Π»ΠΈ x, поиск Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ Ρƒ Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², Π° это вСрная Π΄ΠΎΡ€ΠΎΠ³Π° ΠΊ нСэффСктивности. Π‘Π½ΡΡ‚ΡŒ остроту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ² поиск ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ. Авторы языка Self ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΡΡ‚Ρ€Π΅ΠΌΡΡΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΊΠΎΠ΄ для языка с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Но ΠΈΠΌΠ΅Π½Π½ΠΎ статичСская типизация ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Ρ‚Π°ΠΊΠΎΠΌΡƒ ОО-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΡΡ€Π°Π²Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ эффСктивности с Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ПО.

ΠšΠ»ΡŽΡ‡ΠΎΠΌ ΠΊ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся ΡƒΠΆΠ΅ высказанная идСя ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ для конструкции x.f (arg), Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ x. Из-Π·Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π½Π΅Ρ‚ возмоТности ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° f. Но объявлСниС суТаСт мноТСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², позволяя компилятору ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ доступ ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ f с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ, - с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ константой ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ доступа. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ выполняСмыС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ статичСского связывания (static binding) ΠΈ подстановки (inlining) - Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ΡΡ благодаря статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ устраняя ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹.

АргумСнты Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

НСсмотря Π½Π° всС это, динамичСская типизация Π½Π΅ тСряСт своих ΠΏΡ€ΠΈΠ²Π΅Ρ€ΠΆΠ΅Π½Ρ†Π΅Π², Π² частности, срСди Smalltalk-программистов. Π˜Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ основаны ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΌΠ΅, Ρ€Π΅Ρ‡ΡŒ ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ шла Π²Ρ‹ΡˆΠ΅. Они ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ статичСская типизация чСрСсчур ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ…, Π½Π΅ давая ΠΈΠΌ свободно Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ свои творчСскиС ΠΈΠ΄Π΅ΠΈ, называя ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Π΅ "поясом цСломудрия".

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

Випизация: слагаСмыС успСха

ΠšΠ°ΠΊΠΎΠ²Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ рСалистичной статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ? ВсС ΠΎΠ½ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… лСкциях, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ остаСтся лишь ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΎ Π½ΠΈΡ… Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. Π˜Ρ… совмСстноС пСрСчислСниС ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠΎΡ‰ΡŒ ΠΈΡ… объСдинСния.

Наша систСма Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ основана Π½Π° понятии класса. Классами ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠ°ΠΊ INTEGER, Π° стало Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ особыС ΠΏΡ€Π°Π²ΠΈΠ»Π° описания ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². (Π’ этом наша нотация отличаСтся ΠΎΡ‚ "Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Ρ…" языков Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Object Pascal, Java ΠΈ C++, Π³Π΄Π΅ систСма Ρ‚ΠΈΠΏΠΎΠ² старых языков сочСтаСтся с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, основанной Π½Π° классах.)

Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°ΡŽΡ‚ Π½Π°ΠΌ большС гибкости, допуская Ρ‚ΠΈΠΏΡ‹, Ρ‡ΡŒΠΈ значСния ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, наряду с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ‡ΡŒΠΈ значСния ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ссылки.

Π Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ слово Π² создании Π³ΠΈΠ±ΠΊΠΎΠΉ систСмы Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ наслСдованию ΠΈ связанному с Π½ΠΈΠΌ ΠΏΠΎΠ½ΡΡ‚ΠΈΡŽ совмСстимости. Π’Π΅ΠΌ самым прСодолСваСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ классичСских Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Pascal ΠΈ Ada, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ x := y Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΈΠΏ x ΠΈ y Π±Ρ‹Π» ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ слишком строго: ΠΎΠ½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сущности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ взаимосвязанных Ρ‚ΠΈΠΏΠΎΠ² (SAVINGS_ACCOUNT ΠΈ CHECKING_ACCOUNT). ΠŸΡ€ΠΈ наслСдовании ΠΌΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌ лишь совмСстимости Ρ‚ΠΈΠΏΠ° y с Ρ‚ΠΈΠΏΠΎΠΌ x, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, x ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ ACCOUNT, y - SAVINGS_ACCOUNT, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ класс - наслСдник ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык нуТдаСтся Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ мноТСствСнного наслСдования. Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ обвинСния статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’Π°ΠΊ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DOCUMENT (Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ сСти, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ нуТдаСтся Π² наличия ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², связанных с Ρ‚ΠΈΠΏΠΎΠΌ MESSAGE (сообщСниС). Но эта ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ° Π²Π΅Ρ€Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для языков, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ наслСдованиСм.

Рис. 17.2.  ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для описания Π³ΠΈΠ±ΠΊΠΈΡ…, Π½ΠΎ бСзопасных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ class LIST [G] ...). НС Π±ΡƒΠ΄ΡŒ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, статичСская типизация ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° Π±Ρ‹ объявлСния Ρ€Π°Π·Π½Ρ‹Ρ… классов для списков, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ элСмСнтов.

Π’ рядС случаСв ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ трСбуСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ лишь ΠΊ сущностям Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Если Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ класс SORTABLE_LIST ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сортировку, ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ сущностСй Ρ‚ΠΈΠΏΠ° G, Π³Π΄Π΅ G - Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, наличия ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сравнСния. Π­Ρ‚ΠΎ достигаСтся связываниСм с G класса, Π·Π°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, - COMPARABLE:


class SORTABLE_LIST [G -> COMPARABLE] ...



Π›ΡŽΠ±ΠΎΠΉ фактичСский Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SORTABLE_LIST Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ класса COMPARABLE, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ - ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° присваивания - ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ доступ ΠΊ Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ПО Π½Π΅ управляСт. Если y - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ, Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ x ?= y присвоит x Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ y, Ссли y ΠΈΠΌΠ΅Π΅Ρ‚ совмСстимый Ρ‚ΠΈΠΏ, ΠΈΠ»ΠΈ, Ссли это Π½Π΅ Ρ‚Π°ΠΊ, даст x Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Void.

УтвСрТдСния, связанныС, ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ, с классами ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ΅ прСдусловий, постусловий ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² класса, Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сСмантичСскиС ограничСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ спСцификациСй Ρ‚ΠΈΠΏΠ°. Π’ Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Pascal ΠΈ Ada, Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹-Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹, способныС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ значСния сущности, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ ΠΎΡ‚ 10 Π΄ΠΎ 20, ΠΎΠ΄Π½Π°ΠΊΠΎ, примСняя ΠΈΡ…, Π²Π°ΠΌ Π½Π΅ удастся Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i являлось ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, всСгда Π²Π΄Π²ΠΎΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ j. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ классов, ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ограничСния, ΠΊΠ°ΠΊΠΈΠΌΠΈ Π±Ρ‹ слоТными ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ.

Π—Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ объявлСния Π½ΡƒΠΆΠ½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π»Π°Π²ΠΈΠ½Π½ΠΎΠ³ΠΎ дублирования ΠΊΠΎΠ΄Π°. Объявляя y: like x, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ y Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ вслСд Π·Π° Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ объявлСниями Ρ‚ΠΈΠΏΠ° x Ρƒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Π’ отсутствиС этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ бСспрСстанно занимались Π±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ объявлСниями, ΡΡ‚Ρ€Π΅ΠΌΡΡΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ соотвСтствиС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Π—Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ объявлСния - это особый случай послСднСго Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°ΠΌ языкового ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° - ковариантности, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ обсуТдСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΠΌ прСдстоит ΠΏΠΎΠ·ΠΆΠ΅.

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

"Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π»ΠΈ ΠΊΡ€ΠΎΡ…Π°"?

Наша Ρ†Π΅Π»ΡŒ - строгая статичСская типизация. ИмСнно поэтому ΠΌΡ‹ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Ρ… Π»Π°Π·Π΅Π΅ΠΊ Π² нашСй "ΠΈΠ³Ρ€Π΅ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ", ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ссли ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚.