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

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

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

Π’ΠΎΡ‚ Π΄Π²Π° основных ΠΏΡ€Π°Π²ΠΈΠ»Π°, прСдставлСнных Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎ наслСдовании (лСкция 14).

[x]. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π’Ρ‹Π·ΠΎΠ²Π° ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: запись x.f осмыслСнна лишь Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс x содСрТит ΠΈ экспортируСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ f.

[x]. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ БовмСстимости Π’ΠΈΠΏΠΎΠ²: ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ a ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ присваивании Π΅Π³ΠΎ Π½Π΅ΠΊΠΎΠΉ сущности Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΈΠΏ a Π±Ρ‹Π» совмСстим с ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ основан Π½Π° классС, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΌ ΠΎΡ‚ класса сущности.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π’Ρ‹Π·ΠΎΠ²Π° ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π΅ являСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ - это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ условиС всякой Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ЕстСствСнно, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ класс ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΈ экспортируСт Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ БовмСстимости Π’ΠΈΠΏΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС внимания. Оно ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρƒ нас всСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это Ρ‚Π°ΠΊ, - создав ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° информация ΠΌΠΎΠΆΠ΅Ρ‚ частично ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΎΡ‚ Π΄Π²Π° Ρ‚Π°ΠΊΠΈΡ… случая.

[x]. Π’ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ структурС Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ располагаСм лишь ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ±Ρ‰Π΅ΠΉ для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² структуры; ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈ спСцифичСская информация, примСнимая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

[x]. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· внСшнСго ΠΌΠΈΡ€Π° - Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠΎ сСти - ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ займСмся исслСдованиСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² этих Π΄Π²ΡƒΡ… случаСв. Рассмотрим для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°ΠΊ список гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€:


figlist: LIST [FIGURE]



Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… лСкциях Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ иСрархия наслСдования Ρ„ΠΈΠ³ΡƒΡ€. ΠŸΡƒΡΡ‚ΡŒ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡΠ°ΠΌΡƒΡŽ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ диагональ срСди всСх ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² списка (ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ -1, Ссли ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π½Π΅Ρ‚). Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это нСпросто. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ item (i).diagonal, Π³Π΄Π΅ item (i) - i-ΠΉ элСмСнт списка, ΠΈΠ΄Π΅Ρ‚ Π²Ρ€Π°Π·Ρ€Π΅Π· с ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: item (i) ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ FIGURE, Π° этот класс, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° RECTANGLE, Π½Π΅ содСрТит Π² своСм составС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° diagonal. РСшСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π΄ΠΎ сих ΠΏΠΎΡ€, измСняло ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса, - Π² Π½Π΅ΠΌ появлялся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹. Однако это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ элСгантно, ΠΊΠ°ΠΊ Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ рассматриваСмого случая. ΠŸΡƒΡΡ‚ΡŒ имССтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΡ… ΠΏΠΎ сСти, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ классу STORABLE, описанному Π½Π°ΠΌΠΈ Ρ€Π°Π½Π΅Π΅. Для получСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ:


my_last_book: BOOK

...

my_last_book := retrieved (my_book_file)



Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ retrieved, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ STORABLE Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Kernel, хотя с Ρ‚Π΅ΠΌ ΠΆΠ΅ успСхом ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ ANY. Но ΠΌΡ‹ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ STORABLE ΠΈΠ»ΠΈ ANY, - ΠΌΡ‹ надСялись ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ BOOK. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ my_last_book Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ БовмСстимости Π’ΠΈΠΏΠΎΠ².

Π”Π°ΠΆΠ΅ Ссли Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ retrieved, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ спСцифику прилоТСния ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ с подходящим Ρ‚ΠΈΠΏΠΎΠΌ, Π²Π°ΠΌ Π½Π΅ удастся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° Π½Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² вашСго ПО, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² гарантируСтся Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊ Π²Π°ΠΌ поступаСт со стороны. ΠŸΡ€ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ Π² Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ EMPLOYEE вмСсто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° BOOK, Ρ„Π°ΠΉΠ» ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Π»Π°Π½, Π° ΠΏΡ€ΠΈ сСтСвом доступС Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ искаТСны ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Из этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ясно: Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ удостовСрСния Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

РСшСниС этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅ΠΉ Π² спСцифичСских, Π½ΠΎ критичСски Π²Π°ΠΆΠ½Ρ‹Ρ… случаях, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ прСимущСств ОО-стиля Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ частности, ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΉ схСмС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ сами ΠΈ осудили:


if "f Ρ‚ΠΈΠΏΠ° RECTANGLE" then

...

elseif "f Ρ‚ΠΈΠΏΠ° CIRCLE" then

...

ΠΈ Ρ‚.Π΄.



Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ Π²Ρ€Π°Π·Ρ€Π΅Π· с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ ЕдинствСнного Π’Ρ‹Π±ΠΎΡ€Π° ΠΈ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚. Π˜Π·Π±Π΅ΠΆΠ°Ρ‚ΡŒ риска ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π΄Π²Π° ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°.

[x]. НСт смысла ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выяснСния Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ Ρ‚ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ извСстСн. ВсС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, - это способ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρ‹. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ принадлСТности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ носит Π±ΠΎΠ»Π΅Π΅ частный Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€, Ρ‡Π΅ΠΌ запрос Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π°ΠΌ Π½Π΅ трСбуСтся Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² наш язык Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΈΡ… сравнСниС - ΡƒΠΆΠ°ΡΠ°ΡŽΡ‰Π°Ρ ΠΌΡ‹ΡΠ»ΡŒ.

[x]. Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π’Ρ‹Π·ΠΎΠ²Π° ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Ни ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ссли класс ΠΏΡ€ΠΎΡˆΠ΅Π» ΡΡ‚Π°Ρ‚ΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. ВсС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, - это Π±ΠΎΠ»Π΅Π΅ свободная вСрсия Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° - ΠΏΡ€Π°Π²ΠΈΠ»Π° совмСстимости Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ "ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ" ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

И снова запись ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· Π°Π½Π°Π»ΠΈΠ·Π° поставлСнной ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’Π²Π΅Π΄Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ присваивания, Π½Π°Π·Π²Π°Π² Π΅Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ присваивания (assignment attempt):


target ?= source



Π—Π½Π°ΠΊ вопроса ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΡƒΡΡ‚ΡŒ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ target ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ T, Ρ‚ΠΎΠ³Π΄Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° присваивания Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

[x]. Ссли source ссылаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ совмСстимого с T Ρ‚ΠΈΠΏΠ°, ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ target ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ присваиваниС;

[x]. ΠΈΠ½Π°Ρ‡Π΅ (Ссли source Ρ€Π°Π²Π½ΠΎ void ΠΈΠ»ΠΈ ссылаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСсовмСстимого Ρ‚ΠΈΠΏΠ°) ΠΏΡ€ΠΈΠΏΠΈΡΠ°Ρ‚ΡŒ target Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ void.

На эту ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ограничСния Ρ‚ΠΈΠΏΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ: Ρ‚ΠΈΠΏ target (T) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ссылочным.

НовоС срСдство быстро ΠΈ элСгантно Ρ€Π΅ΡˆΠ°Π΅Ρ‚ поставлСнныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ структуры с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΈΡ… Ρ‚ΠΈΠΏΠ°:


maxdiag (figlist: LIST [FIGURE]): REAL is

-- Максимальная Π΄Π»ΠΈΠ½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π² спискС;

-- Ссли ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π½Π΅Ρ‚, Ρ‚ΠΎ -1.

require

list_exists: figlist /= Void

local

r: RECTANGLE

do

from

figlist.start; Result := -1.0

until

figlist.after

loop

r ?= figlist.item

if r /= Void then

Result := Result.max (r.diagonal)

end

figlist.forth

end

end



Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ… (лСкция 5 курса "ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования"). ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ start слуТит для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту (Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ), after - для выяснСния Ρ‚ΠΎΠ³ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π»ΠΈ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ элСмСнты, forth - для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, item (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ, Ссли not after) - для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта.

Π’ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ присваивания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ локальная ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ r Ρ‚ΠΈΠΏΠ° RECTANGLE. УспСх присваивания провСряСтся сравнСниСм значСния r с Void. Если r Π½Π΅ Void, Ρ‚ΠΎ r ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ r.diagonal. Π­Ρ‚Π° схСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²ΠΏΠΎΠ»Π½Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Π°.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π’Ρ‹Π·ΠΎΠ²Π° ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: обращСния ΠΊ r.diagonal Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ Π΄Π²Π°ΠΆΠ΄Ρ‹: статичСски - компилятором, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΌ, являСтся Π»ΠΈ diagonal ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ класса RECTANGLE, ΠΈ динамичСски - нашСй Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠ΅ΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ r Π½Π΅ Void, Π° ΠΈΠΌΠ΅Π΅Ρ‚ присоСдинСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту списка - ΠΏΠΎΡ‚ΠΎΠΌΠΊΡƒ класса RECTANGLE, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ SQUARE (ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚), связываСт r с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΈ Π΅Π³ΠΎ диагональ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² вычислСниях.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ чтСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² retrieval выглядит Ρ‚Π°ΠΊ:


my_last_book: BOOK

... Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ с := Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅

my_last_book ?= retrieved (my_book_file)

if my_last_book /= Void then

... "ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ my_last_book" ...

else

... "ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π½Π΅ соотвСтствуСт оТиданию" ...

end



ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ присваивания

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ присваивания обусловлСна, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° статичСски ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ сущности ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ нСльзя, Π° ΠΎΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ фактичСски адрСсуСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ "Π½Π° Π»Π΅Ρ‚Ρƒ". НапримСр, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ… Ρ€ΡƒΠΊ.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, ΠΊΠ°ΠΊ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» спроСктирован ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ шанс Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎΠ± ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΌ стилС Ρ€Π°Π·Π±ΠΎΡ€Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² (case-by-case). Если Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΈΡ‚Ρ€ΠΈΡ‚ΡŒ динамичСскоС связываниС ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‚ΠΈΠΏΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, хотя Π²Π°ΠΌ ΠΈ придСтся Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΠΎΡ‚Ρ€ΡƒΠ΄ΠΈΡ‚ΡŒΡΡ. Π’Π°ΠΊ, вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ f.display, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ОО-ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ динамичСского связывания, ΠΌΠΎΠΆΠ½ΠΎ, - Π½ΠΎ Π½Π΅ рСкомСндуСтся, - ΠΏΠΈΡΠ°Ρ‚ΡŒ: