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

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

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

end

ensure

error_code_if_impossible: (old empty) = (error = Underflow)

no_error_if_possible: (not (old empty)) = (error = 0)

end

feature -- Status report (ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΎ статусС)

empty: BOOLEAN is

-- ΠŸΡƒΡΡ‚ Π»ΠΈ стСк?

do

Result := (capacity = 0) or else representation.empty

end

error: INTEGER

-- Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ошибки, устанавливаСмый Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ

-- Π² Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ

full: BOOLEAN is

-- Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ Π»ΠΈ стСк?

do

Result := (capacity = 0) or else representation.full

end

Overflow, Underflow, Negative_size: INTEGER is unique

-- Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ошибок

feature -- Element change (ИзмСнСниС элСмСнтов)

put (x: G) is

-- Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ x Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ; ΠΈΠ½Π°Ρ‡Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ошибки.

-- Π‘Π΅Π· всяких прСдусловий!

do

if full then

error := Overflow

else

check representation /= Void end

representation.put (x); error := 0

end

ensure

error_code_if_impossible: (old full) = (error = Overflow)

no_error_if_possible: (not old full) = (error = 0)

not_empty_if_no_error: (error = 0) implies not empty

added_to_top_if_no_error: (error = 0) implies item = x

one_more_item_if_no_error: (error = 0) implies count = old count + 1

end

remove is

-- Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ; ΠΈΠ½Π°Ρ‡Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ошибки.

-- Π‘Π΅Π· всяких прСдусловий!

do

if empty then

error := Underflow

else

check representation /= Void end

representation.remove

error := 0

end

ensure

error_code_if_impossible: (old empty) = (error = Underflow)

no_error_if_possible: (not old empty) = (error = 0)

not_full_if_no_error: (error = 0) implies not full

one_fewer_item_if_no_error: (error = 0) implies count = old count - 1

end

feature {NONE} - Implementation (РСализация)

representation: STACK2 [G]

-- НСзащищСнный стСк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

capacity: INTEGER

-- МаксимальноС число элСмСнтов стСка

end - class STACK3



ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ этого класса Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ прСдусловий (Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ True Π² качСствС прСдусловия). Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, постусловиС ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. НапримСр, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ s.remove, Π³Π΄Π΅ s это экзСмпляр класса STACK3, Π² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ситуации Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ s.error Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ 0; Π² ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ - Underflow. Π’ послСднСм случаС никакая другая Ρ€Π°Π±ΠΎΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. ΠšΠ»ΠΈΠ΅Π½Ρ‚ нСсСт ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ s.error послС Π²Ρ‹Π·ΠΎΠ²Π°. Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, Ρƒ ΠΎΠ±Ρ‰Π΅Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ модуля, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ STACK3 Π½Π΅Ρ‚ способа Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ ситуации: Π²Ρ‹Π΄Π°Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС, произвСсти ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΡƒ ситуации...

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

НСсколько тСхничСских Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ класса.

[x]. ЭкзСмпляр STACK3 - содСрТит Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ representation, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ссылку Π½Π° экзСмпляр STACK2, содСрТащий, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ссылку Π½Π° массив. Π­Ρ‚ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΏΠ°Π³ΡƒΠ±Π½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° эффСктивности, ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого ΠΌΠΎΠΆΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ наслСдования, ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… лСкциях.

[x]. Π‘ΡƒΠ»Π΅Π²Π° опСрация or else ΠΏΠΎΠ΄ΠΎΠ±Π½Π° or, Π½ΠΎ Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Ρ€Π°Π²Π΅Π½ True, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации.

[x]. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ check, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² put ΠΈ remove, слуТит для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. Она Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: Π²Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Ρ‚ΡΠΆΠ΅Π»ΠΎΠ²Π΅ΡΠ½ΠΎΡΡ‚ΡŒ STACK3 Π² сравнСнии с простотой STACK2, достигнутой благодаря прСдусловиям. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ бСсполСзно услоТнСнному ПО. Π’Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ, ΠΏΠΎ контрасту, Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π΄ΡƒΡ…Π° ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ всСм, - ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ случаями - совсСм Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠΎΠΌΠΎΡ‡ΡŒ вашим ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. Если вмСсто этого Π²Ρ‹ построитС классы, Π²Π»Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ строгиС условия Π½Π° ΠΈΡ… использованиС, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅ эти условия, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΈΡ… Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ класса, Π²Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚Π΅ Тизнь вашим ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. Π’Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ любовь (tough love) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΡΠ΅ΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰Π΅ΠΉ; Π»ΡƒΡ‡ΡˆΠ΅ эффСктивная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с провСряСмыми ограничСниями, Ρ‡Π΅ΠΌ страстная ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€Π΅Π΄ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ ТСлания ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², принятиС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠΉ Ρ‡Π΅Π³ΠΎ становятся простота ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

Для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ‡ΡŒΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ становятся ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Ρ‡ΡŒΠΈ Π°Π²Ρ‚ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π΅ ОО-языки ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ основных ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ.

Π’ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ остаСтся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ внСшнСго ΠΌΠΈΡ€Π°. Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, Π² этом случаС строятся Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ внСшний ΠΌΠΈΡ€ ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Класс STACK3 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ΄Π΅ΠΈ построСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ².

Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ класса

ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈΡ ΠΈ постусловия ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ свойства ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Но экзСмпляры класса ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами. Π˜Ρ… принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ класса (class invariants), ΠΈ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅ сСмантичСскиС свойства ΠΈ ограничСния цСлостности, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ класс.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Рассмотрим снова Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стСка классом STACK2:


class STACK2 [G] creation

make

feature

? make, empty, full, item, put, remove?

capacity: INTEGER

count: INTEGER

feature {NONE} -- Implementation

representation: ARRAY [G]

end



Атрибуты класса - массив representation ΠΈ Ρ†Π΅Π»Ρ‹Π΅ capacity, count - Π·Π°Π΄Π°ΡŽΡ‚ прСдставлСниС стСка. Π₯отя прСдусловия ΠΈ постусловия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ сСмантику стСка, ΠΈΡ… нСдостаточно для выраТСния Π²Π°ΠΆΠ½Ρ‹Ρ… свойств, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. НапримСр, count всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ:


0 <= count; count <= capacity



ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт, Ρ‡Ρ‚ΠΎ capacity >=0 ΠΈ Ρ‡Ρ‚ΠΎ capacity Π·Π°Π΄Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива:


capacity = representation.capacity



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

Π’Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π²ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ функциями ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ функциями ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ. НапримСр, ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ STACK2 ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ свойство, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π΅ связь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ empty ΠΈ count:


empty = (count = 0)



Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅Π½, ΠΎΠ½ повторяСт ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ постусловиСм empty. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ утвСрТдСния Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с банковскими счСтами, ΠΈ Π΅ΡΡ‚ΡŒ класс Bank_Account с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ: deposits_list, withdrawals_list ΠΈ balance. Π’ΠΎΠ³Π΄Π° ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ΅:


consistent_balance: deposits_list.total - withdrawals_list.total = balance



Π³Π΄Π΅ функция total Π΄Π°Π΅Ρ‚ суммарноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ списка всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈΠ»ΠΈ расходных). Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ опрСдСляСт основноС условиС согласования всСх банковских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ счСтом, связывая баланс, ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ расходныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π€ΠΎΡ€ΠΌΠ° ΠΈ свойства ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² класса

БинтаксичСски ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса являСтся ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ invariant, стоящим послС всСх ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ feature, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ end. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: