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

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

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

БиблиографичСскиС замСчания

Из Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€Π° [Hoare 1981]:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΠΎΠΌ использования ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π±Ρ‹Π» Π½ΠΈΠΊΡ‚ΠΎ ΠΈΠ½ΠΎΠΉ, ΠΊΠ°ΠΊ сам Алан Π’ΡŒΡŽΡ€ΠΈΠ½Π³. На ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π² ΠšΠ΅ΠΌΠ±Ρ€ΠΈΠ΄ΠΆΠ΅ 24 июня 1950 Π³. ΠΎΠ½ прСдставил нСбольшой Π΄ΠΎΠΊΠ»Π°Π΄ "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ", Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ объяснял эту идСю с большой ΡΡΠ½ΠΎΡΡ‚ΡŒΡŽ. "Как ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, утвСрТдая, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°? Π§Ρ‚ΠΎΠ±Ρ‹ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ Π±Ρ‹Π»Π° слишком Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ, программист обязан Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ утвСрТдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ, ΠΈ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слСдуСт достаточно просто."

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ утвСрТдСния, прСдставлСнноС Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ, восходит ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΠΌ ΠΏΠΎ коррСктности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΠΈΠΎΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»ΠΈ Π‘ΠΎΠ± Π€Π»ΠΎΠΉΠ΄ [Floyd 1967], Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€ [Hoare 1969], Эдсгар ДСйкстра [Dijkstra 1976], Π² дальнСйшСм описанныС Π² [Gries 1981]. Книга "Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Ρ‚Π΅ΠΎΡ€ΠΈΡŽ языков программирования" (Introduction to the Theory of Programming Languages) [M 1990] прСдставляСт ΠΎΠ±Π·ΠΎΡ€ этого направлСния.

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса ΠΏΡ€ΠΈΡˆΠ»ΠΎ ΠΈΠ· Π₯оаровской Ρ€Π°Π±ΠΎΡ‚Ρ‹ [Hoare 1972a] ΠΏΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ прилоТСния ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² [Jones 1980], [Jones 1986]. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ тСория ΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ АВД Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π° Ρƒ [Goguen 1978].

БиблиографичСскиС ссылки ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ языкам спСцификаций, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Z, VDM, OBJ-2, Larch, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 6. Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ [Lano 1994] , содСрТащСй большоС число ссылок, описаны ОО-Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ языки спСцификаций, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Object Z, Z++, MooZ, OOZE, SmallVDM, VDM++.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ ΠΏΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ошибок, Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ², нСисправностСй ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ IEEE Computer Society [IEEE 1990], [IEEE1993]. Π˜Ρ… Web-страница - http://www.computer.org

Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π Π°Π½Π½ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стал ΠΌΠ½Π΅ извСстСн) Π±Ρ‹Π» язык AlgolW, созданный Π₯ΠΎΠ°Ρ€ΠΎΠΌ ΠΈ Π’ΠΈΡ€Ρ‚ΠΎΠΌ [Hoare 1966], нСпосрСдствСнный ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊ языка Pascal. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Alphard [Shaw 1981] ΠΈ Euclid [Lampson 1977], спроСктированныС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Бвязь с ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈ нотация, ввСдСнная Π² этой ΠΊΠ½ΠΈΠ³Π΅, навСяна утвСрТдСниями языка CLU [Liskov 1981], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½. Другая, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰Π°ΡΡΡ Π½Π° CLU ΠΊΠ½ΠΈΠ³Π° Лискова ΠΈ Π“ΡƒΡ‚Ρ‚Π°Π³Π° [Liskov 1986] являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΠ½ΠΈΠ³ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ вопросы Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ПО, прСдлагая ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π° Π±Π°Π·Π΅ "Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠ³ΠΎ программирования", ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚Ρ‹ΠΉ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ, прСдставлСнноС Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π² ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части ΠΊΠ½ΠΈΠ³ΠΈ, ΠΏΡ€ΠΈΡˆΠ»ΠΎ ΠΈΠ· [M 1987a], ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½Π½ΠΎΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ… [M 1988], [M1989c], [M 1992a]. Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ [M 1994a] ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π½Ρ‹ΠΉ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ прСдусловий, обращая особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этих ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ "Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ любви". Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠΉ Π²ΠΊΠ»Π°Π΄ Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ этих ΠΈΠ΄Π΅ΠΉ Π±Ρ‹Π» сдСлан ДТСймсом Мак-Кимом [McKim 1995], [McKim 1996], [McKim 1996a], Π° Ρ‚Π°ΠΊΠΆΠ΅ [Henderson-Sellers], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ занимался исслСдованиСм ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ поставщика ПО.

УпраТнСния

Π£11.1 ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹Π΅ числа

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ АВД для класса COMPLEX, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ понятиС комплСксных чисСл с арифмСтичСскими опСрациями. Π˜ΡΡ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈΠ· Ρ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ.

Π£11.2 Класс ΠΈ Π΅Π³ΠΎ АВД

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ всС прСдусловия ΠΈ аксиомы АВД STACK, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… лСкциях, ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ Π² классС STACK4, Π° Ссли Π΄Π°, Ρ‚ΠΎ ΠΊΠ°ΠΊ.

Π£11.3 ΠŸΠΎΠ»Π½Ρ‹Π΅ утвСрТдСния для стСков

ΠŸΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ body, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ Ρ‚Π΅Π»ΠΎ стСка, сдСлаСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ утвСрТдСниям класса STACK ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ АВД. ΠžΠ±ΡΡƒΠ΄ΠΈΡ‚Π΅ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

Π£11.4 ЭкспортированиС Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

ΠŸΠΎΡ‡Π΅ΠΌΡƒ capacity экспортируСтся для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стСков ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², класс STACK2?

Π£11.5 Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для класса STACK3.

Π£11.6 УтвСрТдСния ΠΈ экспорт

ΠžΠ±ΡΡƒΠ΄ΠΈΡ‚Π΅ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² утвСрТдСниях, Π² частности, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ correct_index Π² прСдусловия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ put ΠΈ item. Если Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² класс ARRAY, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ статус экспорта слСдуСт Π΅ΠΉ Π΄Π°Ρ‚ΡŒ?

Π£11.7 Поиск ΠΆΡƒΡ‡ΠΊΠΎΠ² (bugs)

ΠŸΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ каТдая ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска, объявлСнная ΠΊΠ°ΠΊ "ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Π°Ρ", Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°. (Подсказка: Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° коррСктности, для Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° нСкоррСктности достаточно ΠΏΡ€Π΅Π΄ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ: Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, выполняСт Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Ρ‚Π°ΠΊΡƒΡŽ, ΠΊΠ°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄ индСкса Π·Π° допустимыС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ прСдусловия).

Π£11.8 ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ прСдусловия ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π° Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ постусловия ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ поставщика. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ поставщика.

Π£11.9 ГСнСрация случайных чисСл

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ получСния псСвдослучайных чисСл, основанный Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: ni = f(ni - 1), Π³Π΄Π΅ функция f Π·Π°Π΄Π°Π½Π°, Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n0 опрСдСляСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ класса. Ѐункция Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ [Knuth 1981] ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΏΠΎ числСнным ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

Π£11.10 ΠœΠΎΠ΄ΡƒΠ»ΡŒ "ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ"

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ доступа "ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΡˆΠ΅Π» - ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡˆΠ΅Π»", FIFO - "first in - first out"). Π—Π°Π΄Π°ΠΉΡ‚Π΅ подходящиС утвСрТдСния Π² стилС класса STACK этой Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π£11.11 ΠœΠΎΠ΄ΡƒΠ»ΡŒ "мноТСство"

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ мноТСство элСмСнтов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° со стандартными опСрациями: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° принадлСТности, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта, объСдинСниС, пСрСсСчСниС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ подходящиС утвСрТдСния. ΠŸΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠ° любая коррСктная рСализация, основанная Π½Π° массивах ΠΈΠ»ΠΈ связных списках.

ΠŸΠΎΡΡ‚ΡΠΊΡ€ΠΈΠΏΡ‚ΡƒΠΌ: ΠšΠ°Ρ‚Π°ΡΡ‚Ρ€ΠΎΡ„Π° Ариан 5

Когда ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ этой ΠΊΠ½ΠΈΠ³ΠΈ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ, ЕвропСйскоС ΠšΠΎΡΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ АгСнтство ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠ³ΠΎ исслСдования тСстирования ΠΏΠΎΠ»Π΅Ρ‚Π° космичСской Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ Ариан 5, ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Π²ΡˆΠ΅ΠΉ катастрофу 4 июня 1996 Π³ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· 40 сСкунд послС старта, ΠΏΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρƒ ΡΡ‚ΠΎΠΈΠ²ΡˆΠ΅Π³ΠΎ 500 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² (нСзастрахованного запуска).

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° катастрофы: ошибки Π² Π±ΠΎΡ€Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ систСмС. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этой ошибки: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, прСдставлСнного 64 Π±ΠΈΡ‚Π°ΠΌΠΈ, Π² 16-ΠΈ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Π½ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Число Π·Π°Π΄Π°Π²Π°Π»ΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°ΠΊΠ»ΠΎΠ½ (horizontal bias) Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹. НСкоторыС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² систСмС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ языка ADA, описанныС Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ. Но это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ, поэтому Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π΅ Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

РСальная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°: нСдостаточная спСцификация. ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· Π±Ρ‹Π» Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½, - Π½ΠΎ для Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ Ариан 4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±Ρ‹Π» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ использован ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ Ариан 5, ΠΈ прСдполоТСния, хотя ΠΈ оставлСнныС Π² ΠΌΠ°Π»ΠΎΠ²Ρ€Π°Π·ΡƒΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π±Ρ‹Π»ΠΈ просто Π·Π°Π±Ρ‹Ρ‚Ρ‹. Π˜Ρ… просто Π½Π΅ примСняли ΠΊ Ариан 5. ΠŸΡ€ΠΈ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°Π΄Π°Π½ΠΎ прСдусловиС:


require

horizontal_bias <= Maximum_horizontal_bias



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

Π£Ρ€ΠΎΠΊ ясСн: ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Π±Π΅Π· ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² бСзрассудно. АбстрактныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ, ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ с ясными спСцификациями условий ΠΈΡ… примСнСния - прСдусловиями, постусловиями, ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ. Π­Ρ‚ΠΈ спСцификации Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π΅ Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…, Π° Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ самих ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π­Ρ‚ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ, особСнно ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ ΠΈ Π‘Π°ΠΌΠΎΠ΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ условиСм любой ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования. Π”Π°ΠΆΠ΅ Ссли ошибки Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‚ΠΎΠΈΡ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ»ΡƒΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ², всСгда ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠ± этих ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ…: