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

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

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

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

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

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

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ являСтся слово ΠΊΠΎΠ³Π΄Π°. Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°. НапримСр, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ "ΠŸΡƒΡΠΊ Ρ‚ΠΎΡ€ΠΏΠ΅Π΄Ρ‹" для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° "Π‘Π»ΡƒΠΆΠ°Ρ‰ΠΈΠΉ" Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π·. Однако Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ошибки ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅, Π° Π½Π΅ ΠΏΠΎΠ·ΠΆΠ΅.

БтатичСская ΠΈ динамичСская типизация

Π₯отя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, здСсь прСдставлСны Π΄Π²Π° Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

[x]. ДинамичСская типизация: ΠΆΠ΄Π°Ρ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

[x]. БтатичСская типизация: с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ исходному тСксту, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. БистСма выполняСтся, Ссли ΠΏΡ€Π°Π²ΠΈΠ»Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ отсутствиС ошибок.

Π­Ρ‚ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΠΌΡ‹: ΠΏΡ€ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² происходит Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы (динамичСски), Π° ΠΏΡ€ΠΈ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполняСтся Π½Π°Π΄ тСкстом статичСски (Π΄ΠΎ выполнСния).

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (typed/untyped) Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ вмСсто статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (statically/dynamically typed). Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π»ΡŽΠ±Ρ‹Ρ… Π½Π΅Π΄ΠΎΡ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ.

БтатичСская типизация ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΠΌΡƒΡŽ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π° компилятор. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΠΌΠ΅Π΅ΠΌ простоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык

ОО-язык статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ссли ΠΎΠ½ поставляСтся с Π½Π°Π±ΠΎΡ€ΠΎΠΌ согласованных ΠΏΡ€Π°Π²ΠΈΠ», провСряСмых компилятором, соблюдСниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ систСмы Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠΎΠ².

Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ встрСчаСтся Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "сильная типизация" (strong). Он соотвСтствуСт ΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ опрСдСлСния, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ отсутствия Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΈ слабыС (weak) Ρ„ΠΎΡ€ΠΌΡ‹ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»Π° ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ, Π½Π΅ ликвидируя ΠΈΡ… Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Π’ этом смыслС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ОО-языки ΡΠ²Π»ΡΡŽΡ‚ΡΡ статичСски слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ Π·Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π’ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках, извСстных ΠΊΠ°ΠΊ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ объявлСния Ρ‚ΠΈΠΏΠΎΠ², Π° ΠΊ сущностям Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ Π»ΡŽΠ±Ρ‹Π΅ значСния. БтатичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π² Π½ΠΈΡ… Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Наша ОО-нотация являСтся статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ. Π•Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ‚ΠΈΠΏΠΎΠ² Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… лСкциях ΠΈ сводятся ΠΊ Ρ‚Ρ€Π΅ΠΌ простым трСбованиям.

[x]. ΠŸΡ€ΠΈ объявлСнии ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сущности ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π΅Π΅ Ρ‚ΠΈΠΏ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, acc: ACCOUNT. КаТдая ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ 0 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: put (x: G; i: INTEGER).

[x]. Π’ любом присваивании x := y ΠΈ ΠΏΡ€ΠΈ любом Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ y - это фактичСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° x, Ρ‚ΠΈΠΏ источника y Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ совмСстим с Ρ‚ΠΈΠΏΠΎΠΌ Ρ†Π΅Π»ΠΈ x. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ совмСстимости основано Π½Π° наслСдовании: B совмСстим с A, Ссли являСтся Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ, - Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ для Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (см. Π»Π΅ΠΊΡ†ΠΈΡŽ 14).

[x]. Π’Ρ‹Π·ΠΎΠ² x.f (arg) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ f Π±Ρ‹Π» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса для Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π»ΠΈ x, ΠΈ f Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ экспортирован классу, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ появляСтся Π²Ρ‹Π·ΠΎΠ² (см. 14.3).

Π Π΅Π°Π»ΠΈΠ·ΠΌ

Π₯отя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ языка Π΄Π°Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ, Π΅Π³ΠΎ нСдостаточно, - Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ ΠΏΡ€ΠΈ создании ΠΏΡ€Π°Π²ΠΈΠ» Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Рассмотрим Π΄Π²Π° ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… случая.

[x]. Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ язык, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ каТдая синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ систСма ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π° ΠΈ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€Π°Π²ΠΈΠ»Π° описания Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π’Π°ΠΊΠΈΠ΅ языки ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΠΏΠΎΠ»ΡŒΡΠΊΡƒΡŽ запись выраТСния со слоТСниСм ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ΠΌ Ρ†Π΅Π»Ρ‹Ρ… чисСл). К соТалСнию, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ этому ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ.

[x]. Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, взяв любой ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ язык ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Π΄Π΅Π»Π°ΡŽΡ‰Π΅Π΅ Π»ΡŽΠ±ΡƒΡŽ систСму Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ. По ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, этот язык Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½: Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅Ρ‚ систСм, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° систСма Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ².

МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ языки ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹, Π½ΠΎ бСсполСзны, Π²Ρ‚ΠΎΡ€Ρ‹Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° систСма Ρ‚ΠΈΠΏΠΎΠ², пригодная ΠΈ полСзная ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ: достаточно мощная для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ потрСбностСй вычислСний ΠΈ достаточно удобная, Π½Π΅ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ нас ΠΈΠ΄Ρ‚ΠΈ Π½Π° услоТнСния для удовлСтворСния ΠΏΡ€Π°Π²ΠΈΠ» Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ язык рСалистичСн, Ссли ΠΎΠ½ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ опрСдСлСния статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ бСзапСлляционный ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос: "Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π»ΠΈ язык X статичСски?", ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΌΠ° отчасти ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ.

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ убСдимся, Ρ‡Ρ‚ΠΎ прСдлагаСмая Π½Π°ΠΌΠΈ нотация рСалистична.

ПСссимизм

БтатичСская типизация ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ ΠΊ "пСссимистичСской" ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π΄Π°Ρ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ, Ρ‡Ρ‚ΠΎ всС вычислСния Π½Π΅ приводят ΠΊ ΠΎΡ‚ΠΊΠ°Π·Π°ΠΌ, ΠΎΡ‚Π²Π΅Ρ€Π³Π°Π΅Ρ‚ вычислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· ошибок.

Рассмотрим ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ, Π½Π΅ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ, Pascal-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ язык с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ REAL ΠΈ INTEGER. ΠŸΡ€ΠΈ описании n: INTEGER; r: Real ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ n := r Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½, ΠΊΠ°ΠΊ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π°Π²ΠΈΠ»Π°. Π’Π°ΠΊ, компилятор ΠΎΡ‚Π²Π΅Ρ€Π³Π½Π΅Ρ‚ всС Π½ΠΈΠΆΠ΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹:


n := 0.0 [A]

n := 1.0 [B]

n := -3.67 [C]

n := 3.67 - 3.67 [D]



Если ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ [A] Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всСгда, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ любая систСма счислСния ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС вСщСствСнного числа 0,0, нСдвусмыслСнно ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π² 0 Ρ†Π΅Π»Ρ‹Ρ…. [B] ΠΏΠΎΡ‡Ρ‚ΠΈ навСрняка Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСйствия [C] Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½ (Ρ…ΠΎΡ‚ΠΈΠΌ Π»ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ‚ΠΎΠ³ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ отбрасываниСм Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части?). [D] справится со своСй Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:


if n ^ 2 < 0 then n := 3.67 end [E]



ΠΊΡƒΠ΄Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ нСдостиТимоС присваиваниС (n ^ 2 - это ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ числа n). ПослС Π·Π°ΠΌΠ΅Π½Ρ‹ n ^ 2 Π½Π° n ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ даст Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ряд запусков. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ n большого вСщСствСнного значСния, Π½Π΅ прСдставимого Ρ†Π΅Π»Ρ‹ΠΌ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρƒ.

Π’ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках всС эти ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ (Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅, Π½Π΅Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅, ΠΈΠ½ΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅) бСзТалостно Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΏΡ€Π°Π²ΠΈΠ» описания Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΡΡŽΡ‚ΡΡ Π»ΡŽΠ±Ρ‹ΠΌ компилятором.

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

БтатичСская типизация: ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ

Π₯отя прСимущСства статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Π½ΠΈΡ… Π΅Ρ‰Π΅ Ρ€Π°Π·.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ примСнСния статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΡ‹ пСрСчислили Π² Π½Π°Ρ‡Π°Π»Π΅ Π»Π΅ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ, простота понимания ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ обусловлСна ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΎΡΠ²ΠΈΡ‚ΡŒ сСбя лишь Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· ΠΏΡ€Π°Π²ΠΈΠ», Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ сущности, ΠΊΠ°ΠΊ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, вносит Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ тСкст ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ позволяСт компилятору, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ нСсоотвСтствия ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΌ ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ сущностСй, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Π Π°Π½Π½Π΅Π΅ выявлСниС ошибок Π²Π°ΠΆΠ½ΠΎ Π΅Ρ‰Π΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ дольшС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… поиск, Ρ‚Π΅ΠΌ сильнСС вырастут ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° исправлСниС. Π­Ρ‚ΠΎ свойство, ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятноС всСм программистам-профСссионалам, количСствСнно ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстныС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π‘Π΅ΠΌΠ° (Boehm). Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠ΅ΠΊ Π½Π° исправлСниС ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ отыскания ошибок ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅, построСнном ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ряда Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… экспСримСнтов с нСбольшим управляСмым ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ: