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

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

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

Для удобства ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ, Ссли Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс являСтся ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, класс FIGURE, рассматриваСмый ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ, являСтся ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ. Если Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ класс LIST являСтся ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ (ΠΊΠ°ΠΊ это ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ, Ссли ΠΎΠ½ прСдставляСт понятиС списка, Π½Π΅ зависящСС ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ), Ρ‚ΠΎ Ρ‚ΠΈΠΏ LIST [INTEGER] являСтся ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ. УчитываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс: C [X] Π±ΡƒΠ΄Π΅Ρ‚ эффСктивным, Ссли класс C эффСктивный, ΠΈ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ, Ссли C являСтся ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ, нСзависимо ΠΎΡ‚ статуса X.

БоглашСния ΠΎ графичСских обозначСниях

БСйчас ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ графичСскиС символы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° рис. 14.8. Π—Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΎΠΉ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ классы:


FIGURE*

display*

perimeter* -- На ΡƒΡ€ΠΎΠ²Π½Π΅ класса OPEN_FIGURE Π½Π° рис. 14.8



Π—Π½Π°ΠΊ плюс ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "эффСктивный" ΠΈ ΠΈΠΌ отмСчаСтся эффСктивизация ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:


perimeter+ -- На ΡƒΡ€ΠΎΠ²Π½Π΅ POLYGON Π½Π° рис. 14.8



Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ класс эффСктивный, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π·Π½Π°ΠΊΠΎΠΌ +. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½Π΅ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ класс считаСтся эффСктивным, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² тСкстовом Π²ΠΈΠ΄Π΅ объявлСниС class C Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова deferred ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс эффСктивный.

МоТно ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ плюс ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ для указания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ стал эффСктивным. НапримСр, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ perimeter появляСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ perimeter* Π² классС CLOSED_FIGURE. Π—Π°Ρ‚Π΅ΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ POLYGON для этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° даСтся рСализация ΠΈ ΠΎΠ½ отмСчаСтся Π² этом классС ΠΊΠ°ΠΊ perimeter+.

НаконСц, Π΄Π²Π° Π·Π½Π°ΠΊΠ° плюс ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:


perimeter++ -- На ΡƒΡ€ΠΎΠ²Π½Π΅ RECTANGLE ΠΈ SQUARE Π½Π° рис.14.8



Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ классами?

ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… элСмСнтов Π² систСмС Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ вопрос: "Ρ‡Ρ‚ΠΎ случится, Ссли ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ rotate ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° FIGURE?" ΠΈΠ»ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ - "ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊ прямому экзСмпляру ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса?" ΠžΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΊΡƒΡ€Π°ΠΆΠΈΡ‚ΡŒ: Ρ‚Π°ΠΊΠΎΠΉ Π²Π΅Ρ‰ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° FIGURE Π½Π΅ сущСствуСт - прямых экзСмпляров ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ отсутствия экзСмпляров ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов

Π’ΠΈΠΏ создания Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ создания Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ.

Напомним, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ создания - это Ρ‚ΠΈΠΏ x, для Ρ„ΠΎΡ€ΠΌΡ‹ create x, ΠΈ U для Ρ„ΠΎΡ€ΠΌΡ‹ create {U} x. Π’ΠΈΠΏ считаСтся ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ, Ссли Ρ‚Π°ΠΊΠΎΠ² Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ² конструктора create f Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚ компилятором, Ссли Ρ‚ΠΈΠΏΠΎΠΌ f Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов: FIGURE, OPEN_FIGURE, CLOSED_FIGURE. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ устраняСт ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅, Ссли Ρ‚ΠΈΠΏ сущности f ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ, Ρ‚ΠΎ допустима явная Ρ„ΠΎΡ€ΠΌΠ° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создания - create{RECTANGLE} f, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ здСсь Ρ‚ΠΈΠΏΠΎΠΌ создания являСтся эффСктивный ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ FIGURE - класс RECTANGLE. ΠœΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ этот ΠΏΡ€ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ создания для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса FIGURE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² зависимости ΠΎΡ‚ контСкста, Π±ΡƒΠ΄ΡƒΡ‚ экзСмплярами эффСктивных классов RECTANGLE, CIRCLE ΠΈ Π΄Ρ€.

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов, дСлая ΠΈΡ… просто синтаксичСской ΡƒΠ»ΠΎΠ²ΠΊΠΎΠΉ для ΠΎΠ±ΠΌΠ°Π½Π° систСмы статичСских Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²Π΅Ρ€Π½ΠΎ, Ссли Π±Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ динамичСскоС связываниС. НСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° FIGURE, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ этого Ρ‚ΠΈΠΏΠ°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅, Π½Π΅ зная Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ½Π° присоСдинСна Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ вычислСнии:


f: FIGURE

...

f := "НСкотороС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ эффСктивного Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ CIRCLE ΠΈΠ»ΠΈ POLYGON"

...

f.rotate (some_point, some_angle)

f.display

...



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

Π—Π°Π΄Π°Π½ΠΈΠ΅ сСмантики ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ классов

Π₯отя Ρƒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Ρƒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса Π»ΠΈΠ±ΠΎ Π½Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ частично, часто трСбуСтся Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΡ… абстрактныС сСмантичСскиС свойства. Для этой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ утвСрТдСния.

Как ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы, ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π° Ρƒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдусловиС, постусловиС ΠΈΠ»ΠΈ ΠΎΠ±Π° эти утвСрТдСния.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… списков, описанных нСзависимо ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Как ΠΈ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… структур Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ списком курсор, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ элСмСнт.

Рис. 14.9.  Π‘писок с курсором

Π­Ρ‚ΠΎΡ‚ класс являСтся ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ:


indexing

description: "Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ списки"

deferred class

LIST [G]

feature -- Access

count: INTEGER is

-- Число элСмСнтов

deferred

end

index: INTEGER is

-- ПолоТСниС курсора

deferred

end

item: G is

-- Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ курсора

deferred

end

feature - ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΎ статусС

after: BOOLEAN is

-- ΠšΡƒΡ€ΡΠΎΡ€ Π·Π° послСдним элСмСнтом?

deferred

end

before: BOOLEAN is

-- ΠšΡƒΡ€ΡΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом?

deferred

end

feature - Π‘Π΄Π²ΠΈΠ³ курсора

forth is

-- ΠŸΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ курсор Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²ΠΏΠ΅Ρ€Π΅Π΄.

require

not after

deferred

ensure

index = old index + 1

end

... Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ...

invariant

non_negative_count: count >= 0

offleft_by_at_most_one: index >= 0

offright_by_at_most_one: index <= count + 1

after_definition: after = (index = count + 1)

before_definition: before = (index = 0)

end



Π—Π΄Π΅ΡΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ запросами. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° прСдлоТСния ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ курсор ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ мноТСства элСмСнтов Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ слСва ΠΈΠ»ΠΈ справа.

Рис. 14.10.  ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΈ курсора

Π”Π²Π° послСдних прСдлоТСния ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ постусловий: ensure Result = (index = count + 1) для after ΠΈ ensure Result = (index = 0) для before. Π’Π°ΠΊΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ всСгда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ свойств, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ запросы Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСдлоТСния ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, рассматривая Ρ‚Π°ΠΊΠΈΠ΅ свойства ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ свойства класса, Π° Π½Π΅ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒ ΠΈΡ… ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ.

УтвСрТдСния ΠΎ forth Ρ‚ΠΎΡ‡Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°Ρ‚ΡŒ эта ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°: ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ курсор Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ курсор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… списка элСмСнтов плюс Π΄Π²Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ "ΠΌΠ΅Ρ‚ΠΎΠΊ" слСва ΠΈ справа, Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ forth Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выполнСния условия not after, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚, ΠΊΠ°ΠΊ сказано Π² постусловии, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ index Π½Π° ΠΎΠ΄ΠΈΠ½.

Π’ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - наш старый Π΄Ρ€ΡƒΠ³ стСк. НашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ потрСбуСтся ΠΎΠ±Ρ‰ΠΈΠΉ класс STACK [G], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ всСвозмоТныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π•Π³ΠΎ собствСнныС ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ FIXED_STACK ΠΈ LINKED_STACK, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Одной ΠΈΠ· ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ класса STACK являСтся put:


put (x: G) is

-- ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ x Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ.

require

not full

deferred

ensure

not_empty: not empty

pushed_is_top: item = x

one_more: count = old count + 1

end



БулСвскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ empty ΠΈ full (Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ STACK) Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ свойство стСка Π±Ρ‹Ρ‚ΡŒ пустым ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ.

Волько с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‚ своСй ΠΏΠΎΠ»Π½ΠΎΠΉ силы. Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ (хотя Π΄Π΅Ρ‚Π°Π»ΠΈ появятся Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π΅ Π»Π΅ΠΊΡ†ΠΈΠΈ), прСдусловия ΠΈ постусловия ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊΠΎ всСм пСрСопрСдСлСниям ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. Π­Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ Π² ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ случаС: Π² Π½Π΅ΠΌ Ρ‚Π°ΠΊΠΈΠ΅ утвСрТдСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ всС допустимыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, привСдСнная спСцификация ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ put Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ… класса STACK.