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

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

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

ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ссылки Π±Ρ‹Π»ΠΈ связаны ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ условиСм. Если ссылка forward ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ экзСмпляр класса Π’, Ρ‚ΠΎ ссылка backward этого экзСмпляра, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ экзСмпляр класса А. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΎ ΠΊΠ°ΠΊ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса А:


round_trip: (forward /= Void) implies (forward.backward = Current)



Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ситуации, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ экзСмпляры ΠΎΠ±ΠΎΠΈΡ… классов ΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅ΠΉ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ:

Рис. 11.9.  Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ссылок forward ΠΈ backward

Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ round_trip встрСчаСтся Π² классах довольно часто. НапримСр, Π² Ρ€ΠΎΠ»ΠΈ класса А ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ класс PERSON, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ пСрсону. Бсылка forward ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² этом случаС Π½Π° Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ пСрсоны - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса HOUSE. Бсылка backward Π² этом классС ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° Π΄ΠΎΠΌΠ°. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ рСализация динамичСской структуры - Π΄Π΅Ρ€Π΅Π²Π°, ΡƒΠ·Π΅Π» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ содСрТит ссылки Π½Π° ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ сына ΠΈ Π½Π° родитСля. Для этого класса ΠΌΠΎΠΆΠ½ΠΎ ввСсти ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² стилС round_trip:

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса Π’, Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ backward. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ вСрсия класса А ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:


class A feature

forward: B

attach (b1: B) is

-- Бсылка b1 Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

do

forward := b1

-- ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ссылку backward ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° b1 для согласованности:

if b1 /= Void then

b1.attach (Current)

end

end

invariant

round_trip: (forward /= Void) implies (forward.backward = Current)

end



Π’Ρ‹Π·ΠΎΠ² b1.attach восстанавливаСт ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ послС обновлСния forward. Класс Π’ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ attach:


class B feature

backward: B

attach (a1: A) is

-- Бсылка a1 Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

do

backward := a1

end

end



Класс А сдСлал всС для своСй коррСктности: ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ устанавливаСт forward Ρ€Π°Π²Π½Ρ‹ΠΌ void, Π° Π΅Π³ΠΎ СдинствСнная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΡ‚ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°. Но рассмотрим Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:


a1: A; b1: B

...

create a1; create b1

a1.attach (b1)

b1.attach (Void)



Π’ΠΎΡ‚ ситуация послС выполнСния послСднСй инструкции:

Рис. 11.10.  ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°

Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для ОА Π½Π°Ρ€ΡƒΡˆΠ΅Π½. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠžΠ’, Π½ΠΎ ΠžΠ’ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ОА, - backward Ρ€Π°Π²Π½ΠΎ void. Π’Ρ‹Π·ΠΎΠ² b1.attach ΠΌΠΎΠ³ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠžΠ’ с Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса А ΠΈ это Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Π§Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ? ДинамичСскиС псСвдонимы вновь сСбя проявили. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ коррСктности класса А ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΈ СдинствСнная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° этого класса attach спроСктирована Π² ΠΏΠΎΠ»Π½ΠΎΠΌ соотвСтствии с замыслом. Но этого нСдостаточно для сохранСния согласованности ОА, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ свойства ОА ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ экзСмпляры Π΄Ρ€ΡƒΠ³ΠΈΡ… классов, Π° Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± эффСктС, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΠΌ свойствами Π΄Ρ€ΡƒΠ³ΠΈΡ… классов Π½Π° ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ· А.

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° достаточно Π²Π°ΠΆΠ½Π°, ΠΈ заслуТиваСт собствСнного ΠΈΠΌΠ΅Π½ΠΈ: НСпрямой Π­Ρ„Ρ„Π΅ΠΊΡ‚ Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° (Indirect Invariant Effect). Он ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ сразу ΠΆΠ΅ ΠΏΡ€ΠΈ Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠΈ динамичСских псСвдонимов, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π°ΠΆΠ΅ Π±Π΅Π· Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ любой связанной сущности. Но ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·Ρ‹ приносят динамичСскиС псСвдонимы; ΠΈ схСма forward - backward Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ акадСмичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€, это, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† для практичСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ соглашСния для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния. Π’Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠ΄ΠΈΠ²Π»ΡΠ»ΠΈΡΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эффСкт Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ assertion (invariant) Π±Ρ‹Π» описан Ρ‚Π°ΠΊ:

"ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполнимости ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² класса Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²".

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅? Π‘Π΅Π· НСпрямого Π­Ρ„Ρ„Π΅ΠΊΡ‚Π° Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° достаточно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅, ΠΏΡ€ΠΈ условии ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ создания. Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π·Π°Π΄Π΅Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π΄Π°ΠΆΠ΅ Ссли Π² Ρ€ΠΎΠ»ΠΈ Ρ†Π΅Π»ΠΈ выступал совсСм Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π‘ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ статистичСского ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ силу, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса А Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ссылки Π½Π° экзСмпляры класса Π’, ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² классС Π’ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈΠ· А. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ всСх трудностСй, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π² класс Π’ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:


trip_round: (backward /= Void) implies (backward.forward = Current)



Π‘Ρ‹Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ отобраТСния. Π’Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сущСствуСт Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ НСпрямого Π­Ρ„Ρ„Π΅ΠΊΡ‚Π° Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈ ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΠ΅ нСобходимости Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… исслСдований.

Π§Ρ‚ΠΎ дальшС

Π•Ρ‰Π΅ Π½Π΅ всС сдСлано с ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ. ΠŸΡ€Π΅Π΄ΡΡ‚ΠΎΠΈΡ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… слСдствия рассмотрСнных ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ²:

[x]. Как ΠΎΠ½ΠΈ приводят ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ дисциплинированной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ; это Ρ‚Π΅ΠΌΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ.

[x]. Как ΠΎΠ½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с наслСдованиСм, позволяя Π½Π°ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±Ρ‹Π΅ сСмантичСскиС ограничСния, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ ΠΊ классу, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ ΠΊ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ; ΠΈ Ρ‡Ρ‚ΠΎ сСмантичСскиС ограничСния, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΈ ΠΏΡ€ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π΅Π³ΠΎ пСрСопрСдСлСниях. Π­Ρ‚Π° Ρ‚Π΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ рассмотрСнии наслСдования.

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

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

[x]. УтвСрТдСния - это Π±ΡƒΠ»Π΅Π²Ρ‹ выраТСния, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ сСмантичСскиС свойства класса ΠΈ вводящиС аксиомы ΠΈ прСдусловия ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ абстрактного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ….

[x]. УтвСрТдСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² прСдусловиях (трСбования, ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹), постусловиях (свойства, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ), ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… класса (свойства, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ экзСмпляры класса Π²ΠΎ врСмя ΠΈΡ… ΠΆΠΈΠ·Π½ΠΈ). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ конструкциями, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ утвСрТдСния, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π° ΠΈ инструкции check.

[x]. ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΈ постусловиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ Π΅Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ связываСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ условии Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π°, Π² состоянии, Π³Π΄Π΅ прСдусловиС выполняСтся; Π² этом случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΡΡ‚ΡŒ постусловия Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ обСспСчиваСт ΠΌΠΎΡ‰Π½ΡƒΡŽ ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Ρƒ ΠΏΡ€ΠΈ построСнии Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ПО.

[x]. Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ сСмантичСскиС ограничСния экзСмпляров класса. Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ нСявно добавляСтся ΠΊ прСдусловиям ΠΈ постусловиям ΠΊΠ°ΠΆΠ΄ΠΎΠΉ экспортируСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ класса.

[x]. Класс описываСт ΠΎΠ΄Π½Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ АВД; ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ класса Π² АВД выраТаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ абстракции, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ частичной. ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π½Π΅ задаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

[x]. Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, - Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса - Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ прСдставлСния классом ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ АВД.

[x]. Π¦ΠΈΠΊΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ†ΠΈΠΊΠ»Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ вывСсти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ†ΠΈΠΊΠ»Π°, ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌΠΎΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π°.

[x]. Если класс поставляСтся с утвСрТдСниями, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ класса.

[x]. УтвСрТдСния слуТат Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ цСлям: ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² конструировании ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ; ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² создании Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅, ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

[x]. Π―Π·Ρ‹ΠΊ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² нашСй Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ порядка, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ свойства высокого уровня благодаря Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π² утвСрТдСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ простыми ΠΈ Π±Π΅Π·ΡƒΠΏΡ€Π΅Ρ‡Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ.

[x]. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ динамичСских псСвдонимов ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ НСпрямому Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρƒ Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΏΡ€ΠΈ коррСктности самого класса.