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. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ: