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

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

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

end

remove is

-- Π£Π΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка

require

not_empty: not empty -- i.e. count > 0

ensure

not_full: not full

one_fewer: count = old count - 1

end

invariant

count_non_negative: 0 <= count

count_bounded: count <= capacity

empty_if_no_elements: empty = (count = 0)

end



Π­Ρ‚Π° краткая Ρ„ΠΎΡ€ΠΌΠ° Π½Π΅ являСтся синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ тСкстом класса, посСму здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ class interface вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° class. Π₯отя достаточно просто ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ эту Ρ„ΠΎΡ€ΠΌΡƒ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс, извСстноС понятиС, рассматриваСмоС Π² дСталях ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ наслСдования.

Π’ срСдС ISE ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² Class Tool; ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ плоский тСкст, Π»ΠΈΠ±ΠΎ тСкст Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… HTML, RTF, MML (FrameMaker), TEX ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…. МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ свой собствСнный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ с ΠΈΡ… ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°ΠΌΠΈ Π² классС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ исчСзли всС прСдлоТСния, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ representation, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π΅ экспортируСтся.

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ особСнно интСрСсна ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

[x]. ДокумСнтация являСтся Π±ΠΎΠ»Π΅Π΅ высокой Ρ„ΠΎΡ€ΠΌΠΎΠΉ абстракции, Ρ‡Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° описываСт. Π­Ρ‚ΠΎ основноС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΊ качСствСнной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ЀактичСская рСализация, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ "ΠΊΠ°ΠΊ", удаляСтся. УтвСрТдСния, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰ΠΈΠ΅ "Ρ‡Ρ‚ΠΎ", Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΈ "ΠΏΠΎΡ‡Π΅ΠΌΡƒ", ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ. Π‘ΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΈ описания, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ indexing, Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ Π² ΠΌΠ΅Π½Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ утвСрТдСния, поясняя Ρ†Π΅Π»ΡŒ ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

[x]. Являясь прямым слСдствиСм ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° БамодокумСнтирования, ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ Π² нашСм ΠΎΠ±Π·ΠΎΡ€Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, краткая Ρ„ΠΎΡ€ΠΌΠ° рассматриваСт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽΡΡ Π² самом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ сопровоТдаСмый ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, - Π²Π°ΠΆΠ½ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, проходящСС Ρ‡Π΅Ρ€Π΅Π· всю ΠΊΠ½ΠΈΠ³Ρƒ. Как Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, появляСтся большС шансов коррСктности Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Бохраняя всС Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Π²Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚Π΅ риск нСсоотвСтствия Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ.

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

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с понятиСм интСрфСйса ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² языкС Ada, Π³Π΄Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ (ΠΏΠ°ΠΊΠ΅Ρ‚) состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй - интСрфСйса ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сходство с ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈ сущСствСнныС различия:

[x]. Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ вся спСцификация сводится ΠΊ объявлСнию Ρ‚ΠΈΠΏΠΎΠ² ΠΈ коммСнтариям.

[x]. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π΅ создаСтся автоматичСски, Π° ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ нСзависимо ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡ… сигнатуры, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ, объявлСния ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π­Ρ‚Π° навязанная ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Π° (Π²Π΄Π²ΠΎΠΉΠ½Π΅ ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ) ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ риск нСсоотвСтствия; всСгда Π΅ΡΡ‚ΡŒ шанс, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Ρ‡Π°ΡΡ‚ΡŒ ΠΈ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ.

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ°, дополнСнная Π΅Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ - плоско-ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ (flat-short form), ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ рассмотрСнии наслСдования, являСтся ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΊΠ»Π°Π΄ΠΎΠΌ Π² ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ повсСднСвной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ½Π° появляСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ срСдство докумСнтирования, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ стандартный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ прСдлоТСния ΠΏΠΎ измСнСнию ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° удовлСтворяСт Ρ†Π΅Π»ΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС. Π‘ΡƒΡ‚ΡŒ трСбования: основой ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΡΠ²Π»ΡΡŽΡ‚ΡΡ абстрактныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Класс Π² Π΅Π³ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΠΈΠ»ΠΈ плоско-ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ являСтся Ρ‚Π΅ΠΌ самым разыскиваСмым абстрактным ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния

ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя, Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос: "ΠΊΠ°ΠΊΠΎΠΉ эффСкт производят утвСрТдСния Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния?". Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΎΡ‚Π²Π΅Ρ‚ опрСдСляСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ компиляции. Π’Ρ‹Π±ΠΎΡ€ Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ измСнСния тСкста класса, вмСсто этого мСняСтся содСрТимоС Ace Ρ„Π°ΠΉΠ»Π°. Напомню, Ace Ρ„Π°ΠΉΠ» написан Π½Π° языкС Lace, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈ сборку систСмы.

Напомню Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Lace ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… языков, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сборкой систСмы; ΠΎΠ½ Π½Π΅ являСтся нСизмСняСмым ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Но всСгда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ срСдство для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ систСмС.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния Ace Ρ„Π°ΠΉΠ»Π°, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ:


system painting root

GRAPHICS

default

assertion (require)

cluster

base_library: "\library\base"

graphical_library: "\library\graphics"

option

assertion (all): BUTTON, color_BITMAP

end

painting_application: "\user\application"

option

assertion (no)

end

end -- system painting



ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ default ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° классов систСмы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСдусловия (require). Π”Π²Π° кластСра ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ установки умолчания. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ graphical_library Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° всСми (all) утвСрТдСниями Π² классах BUTTON ΠΈ color_BITMAP. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ painting_application Π²ΠΎΠΎΠ±Ρ‰Π΅ отмСняСт наблюдСниС Π·Π° утвСрТдСниями Π²ΠΎ всСх Π΅Π³ΠΎ классах. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ возмоТности ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях - всСй систСмы, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… кластСров, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… классов.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках assertion(...):

[x]. no - Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ· ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ больший эффСкт, Ρ‡Π΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ;

[x]. require - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполнимости прСдусловий Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ;

[x]. ensure - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполнимости постусловий Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

[x]. invariant - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполнимости ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² класса Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (obj.f);

[x]. loop - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполнимости ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ; ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ с сохранСниСм ΠΈΡ… Π½Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ;

[x]. check - Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ check, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово all являСтся синонимом check.

Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ "no" ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ автоматичСски Π²Π»Π΅Ρ‡Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. Π’ частности, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ постусловиями, Ссли Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΡΡ‚ΡŒ прСдусловий. Π­Ρ‚ΠΈΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ check ΠΈ all.

ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΠΏΠΎΠΊΠ° утвСрТдСния Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ эффСкта Π½Π° процСсс вычислСний ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ссли Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Но Ссли ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false, Ρ‚ΠΎ это довольно ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ событиС, приводящСС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ЀактичСски, возбуТдаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ, Ссли Π½Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ€ ΠΏΠΎ Π·Π°Ρ…Π²Π°Ρ‚Ρƒ этого ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ остановится. ΠŸΡ€ΠΈ этом, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ создана Ρ‚Π°Π±Π»ΠΈΡ†Π° истории ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (exception history table) Π² Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅:


Failure: object: O2 class: YOUR_CLASS routine: your_routine

Cause: precondition violation, clause: not_too_small

Called by: object: O2 class: YOUR_CLASS routine: his_routine

Called by: object: O1 class: HER_CLASS routine: her_routine

...



Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΡ… классов - ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΡ… эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Показанная здСсь Ρ„ΠΎΡ€ΠΌΠ° являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наброском; обсуТдСниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ даст Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ истории ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ, допускаСмыС Π² утвСрТдСниях, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ not_too_small Π²


your_routine (x: INTEGER) is

require

not_too_small: x >= Minimum_value

...



ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ трассировкС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ.

Каков ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°?

Какой ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ трассировки слСдуСт Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ? ΠžΡ‚Π²Π΅Ρ‚ вырабатываСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компромисса, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²: уровня довСрия ΠΊ коррСктности ПО, насколько ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ эффСктивности, насколько ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ послСдствия Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ошибок Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния.