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

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, я написал класс MATRIX, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹. Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… возмоТностСй я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ своим ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ расчСта ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. ЀактичСски это сочСтаниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π΄Π²ΡƒΡ… запросов: ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° invert ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, присваиваСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ inverse Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΈ устанавливаСт логичСский Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ inverse_valid. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° inverse ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ³Π΄Π° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° inverse_valid являСтся истинным; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π²Ρ‹Ρ€ΠΎΠΆΠ΄Π΅Π½Π°. Π’ Ρ…ΠΎΠ΄Π΅ нашСго обсуТдСния случай Π²Ρ‹Ρ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, я ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ лишь ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈ Π³ΠΎΡ‚ΠΎΠ² Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ расчСтов, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ владСя числСнными ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π² ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Π΅, Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ лишь запросы с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ Π²Ρ‹ΡˆΠ΅ 10-6. Π’ ΠΈΡ‚ΠΎΠ³Π΅, моя ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ:


invert (epsilon: REAL) is

-- ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ epsilon

require

epsilon >= 10 ^ (-6)

do

"ВычислСниС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹"

ensure

((Current * inverse) |-| One) <= epsilon

end



ΠŸΠΎΡΡ‚ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс содСрТит ΠΈΠ½Ρ„ΠΈΠΊΡΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ infix "|-|" Ρ‚Π°ΠΊΡƒΡŽ, Ρ‡Ρ‚ΠΎ m1 |-| m2 Π΅ΡΡ‚ΡŒ |m1 - m2| (Π½ΠΎΡ€ΠΌΠ° разности ΠΌΠ°Ρ‚Ρ€ΠΈΡ† m1 ΠΈ m2), Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ infix "*", Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. One - Сдиничная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°.

Как Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π΅Π³ΠΎΡ€Π΄Ρ‹ΠΉ, Π»Π΅Ρ‚ΠΎΠΌ я ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΡƒ программиста, ΠΈ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅Ρ‚ мою ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ invert, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π»ΡƒΡ‡ΡˆΠ΅ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ мСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ epsilon (ΠΊΠ°ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС, эта запись синтаксичСски Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°:


require

epsilon >= 10 ^ (-20)

...

ensure

((Current * inverse) |-| One) <= (epsilon / 2)



Автор Π½ΠΎΠ²ΠΎΠΉ вСрсии достаточно ΡƒΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ MATRIX Π² Ρ†Π΅Π»ΠΎΠΌ. ИзмСнСния коснутся лишь Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Они Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² состав ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ MATRIX класса NEW_MATRIX.

Если ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС содСрТит Π½ΠΎΠ²Ρ‹Π΅ утвСрТдСния, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠ½ΠΎΠΉ синтаксис, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ появится Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

ИзмСнСния, внСсСнныС Π² утвСрТдСния, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ объявлСния: Π½ΠΎΠ²ΠΎΠ΅ прСдусловиС epsilon >= 10 ^ (-20) слабСС исходного epsilon >= 10 ^ (-6), Π½ΠΎΠ²ΠΎΠ΅ ΠΆΠ΅ постусловиС сильнСС сформулированного Π²Π½Π°Ρ‡Π°Π»Π΅.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ исходного класса MATRIX Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ расчСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρƒ Π½Π΅Π³ΠΎ, Π½ΠΎ Π½Π° Π΄Π΅Π»Π΅ - Π²Π²ΠΈΠ΄Ρƒ динамичСского связывания - Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ класса NEW_MATRIX. Π’ΠΎΡ‚ ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² своСм составС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ


some_client_routine (m1: MATRIX; precision: REAL) is

do

... ; m1.invert (precision); ...

-- Π’ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π²Ρ‹Π·ΠΎΠ² вСрсии ΠΊΠ°ΠΊ MATRIX, Ρ‚Π°ΠΊ ΠΈ NEW_MATRIX

end



ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ собствСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° NEW_MATRIX.

NEW_MATRIX Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ любой Π²Ρ‹Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ принимаСтся Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΠΎΠ»Π΅Π΅ слабоС прСдусловиС ΠΈ Π±ΠΎΠ»Π΅Π΅ сильноС постусловиС, ΠΌΡ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ всС обращСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² MATRIX ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠΌ своим ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€Π΅ΠΆΠ½Π΅Π³ΠΎ.

ΠŸΡ€ΠΈ усилСнии прСдусловия invert, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, epsilon >= 10 ^ (-5), Π²Ρ‹Π·ΠΎΠ², ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ для класса MATRIX, ΠΌΠΎΠ³ ΡΡ‚Π°Ρ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ. ΠŸΡ€ΠΈ ослаблСнии постусловия Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ стал Π±Ρ‹ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ для MATRIX.

УстранСниС посрСдника

ПослСдний ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° вСсьма интСрСсноС слСдствиС ΠΏΡ€Π°Π²ΠΈΠ»Π° Π£Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠŸΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡ. Π’ ΠΎΠ±Ρ‰Π΅ΠΉ схСмС

Рис. 16.3.  ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ подрядчик

утвСрТдСния Ξ³ ΠΈ , Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ объявлСнии, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Ссли ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΈ Ξ² (прСдусловия - Π±ΠΎΠ»Π΅Π΅ слабыС, постусловия - Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅). Но ΠΊΠ»ΠΈΠ΅Π½Ρ‚ класса A, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ A' благодаря ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ ΠΈ динамичСскому ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠΌ, ΠΈΠ±ΠΎ СдинствСнный ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ с классом A.

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСством Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ лишь став нСпосрСдствСнным ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ A' (пунктирная связь с Π²ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ Π½Π° рисункС 16.3), ΠΊΠ°ΠΊ Π² случаС:


a1: A'

...

if a1.Ξ³ then a1.r end

check a1. end -- постусловиС выполняСтся



ΠŸΡ€ΠΈ этом Π²Ρ‹, СстСствСнно, ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ a1 ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° A', Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° A, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΆΠ΄Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ тСряСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, идущая ΠΎΡ‚ A.

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

Бубподряды

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ УтвСрТдСния ΠŸΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΠΎ сочСтаСтся с Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ.

ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ утвСрТдСния ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ связанный с Π½Π΅ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ прСдусловия, получая ΠΏΡ€Π°Π²ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΈΡΡ‚ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ постусловия; для поставщика всС Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

НаслСдованиС совмСстно с ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌ объявлСниСм ΠΈ динамичСским связываниСм ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ созданию субподрядов. ΠŸΡ€ΠΈΠ½ΡΠ² условия ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, Π²Ρ‹ Π½Π΅ обязаны Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ сами. ΠŸΠΎΠ΄Ρ‡Π°Ρ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, способного ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π»ΡƒΡ‡ΡˆΠ΅ ΠΈ с мСньшими ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ. Π’Π°ΠΊ происходит, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· MATRIX, Π½ΠΎ благодаря динамичСскому ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° этапС выполнСния фактичСски Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅. "МСньшиС ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ" ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ здСсь Π±ΠΎΠ»Π΅Π΅ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ Π² Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌ Π½Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Π° "Π»ΡƒΡ‡ΡˆΠ΅" - ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π² описанном здСсь смыслС.

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ УтвСрТдСния ΠŸΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡ просто устанавливаСт, Ρ‡Ρ‚ΠΎ чСстный субподрядчик, приняв условия ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° Ρ‚Π΅Ρ… ΠΆΠ΅ условиях, Ρ‡Ρ‚ΠΎ ΠΈ подрядчик ΠΈΠ»ΠΈ Π»ΡƒΡ‡ΡˆΠΈΡ…, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Ρ…ΡƒΠ΄ΡˆΠΈΡ….

Π‘ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ, ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ классов - это ограничСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π°, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ ΠΈ ΠΊ подрядчикам, ΠΈ ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ всС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ограничСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ субподрядчикам.

Π‘Π²ΠΎΠ΅ истинноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ наслСдованиС ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ лишь совмСстно с утвСрТдСниями ΠΈ двумя ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. ΠœΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² ΠΈ субподрядов - прСкрасная аналогия, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰Π°Ρ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ОО-ПО. НСсомнСнно, Π² этом - ΠΎΠ΄Π½Π° ΠΈΠ· Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ проСктирования.

АбстрактныС прСдусловия

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ ослаблСния прСдусловий ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ чСрСсчур ТСстким Π² случаС, ΠΊΠΎΠ³Π΄Π° наслСдник ΠΏΠΎΠ½ΠΈΠΆΠ°Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π΅ΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΈΠΉ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ³Π»Π°ΡΡƒΡŽΡ‰ΠΈΠΉΡΡ с Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ этого являСтся ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ BOUNDED_STACK ΠΎΡ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ класса стСка (STACK). ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° занСсСния Π² стСк элСмСнта (put) Π² ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΌ классС ΠΈΠΌΠ΅Π΅Ρ‚ прСдусловиС count <= capacity, Π³Π΄Π΅ count - Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число элСмСнтов Π² стСкС, capacity - физичСская Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ накопитСля.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ понятии стСка Π½Π΅Ρ‚ понятия Смкости. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ создаСтся Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΊ BOUNDED_STACK прСдусловиС приходится ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ (ΠΎΡ‚ бСсконСчной Смкости ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ). Как Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ структуру наслСдования, Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ УтвСрТдСния ΠŸΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡ?

ΠžΡ‚Π²Π΅Ρ‚ становится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½, Ссли ΠΌΡ‹ Π±Π»ΠΈΠΆΠ΅ познакомимся с трСбованиями ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡΠ»Π°Π±ΠΈΡ‚ΡŒ, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ являСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ прСдусловиСм, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ видится Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ поставщика (рСализация это Π΅Π³ΠΎ Π·Π°Π±ΠΎΡ‚Π°), Π½ΠΎ касаСтся прСдусловия, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ видится ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. ΠŸΡƒΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° put класса STACK ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄: