-- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ minindex ΠΈ maxindex
-- (ΠΏΡΡΡΠΎΠΉ Π΅ΡΠ»ΠΈ minindex > maxindex).
require
meaningful_bounds: maxindex >= minindex - 1
do
...
ensure
exact_bounds_if_non_empty: (maxindex >= minindex) implies
((lower = minindex) and (upper = maxindex))
conventions_if_empty: (maxindex < minindex) implies
((lower = 1) and (upper = 0))
end
feature -- Access (ΠΠΎΡΡΡΠΏ)
lower, upper, count: INTEGER
-- ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°; ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°.
infix "@", item (i: INTEGER): G is
-- ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ i
require
index_not_too_small: lower <= i
index_not_too_large: i <= upper
do ... end
feature -- Element change (ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²)
put (v: G; i: INTEGER) is
-- ΠΡΠΈΡΠ²ΠΎΠΈΡΡ v ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ i
require
index_not_too_small: lower <= i
index_not_too_large: i <= upper
do
...
ensure
element_replaced: item (i) = v
end
invariant
consistent_count: count = upper - lower + 1
non_negative_count: count >= 0
end
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ Π½Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ item ΠΈ put. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠΎ ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ΄ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π»Π΅ΠΊΡΠΈΡΡ .
Π‘Π²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ Ρ ΠΠ’Π
ΠΠ»Π°ΡΡ, ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΠ’Π, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΠΌΠΎΠ³ΠΎ. Π Π½Π°ΡΠ°Π»Π΅ Π»Π΅ΠΊΡΠΈΠΈ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ, ΡΡΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠΏΠΎΡΠΎΠ± Π²Π²Π΅Π΄Π΅Π½ΠΈΡ Π² ΠΊΠ»Π°ΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ², Π»Π΅ΠΆΠ°ΡΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΠΠ’Π. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΡΠΎΡΠ½ΠΈΠΌ Π½Π°ΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΏΡΠΎΡΡΠ½ΠΈΠ² ΠΈΡ ΡΠ²ΡΠ·Ρ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΠ’Π.
ΠΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ Π² Π»Π΅ΠΊΡΠΈΠΈ ΠΏΡΠΎ ΠΠ’Π, ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°:
[x]. ΠΈΠΌΡ ΡΠΈΠΏΠ°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠΎΠ΄ΠΎΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ (ΡΠ°Π·Π΄Π΅Π» TYPES);
[x]. ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΈΡ ΡΠΈΠ³Π½Π°ΡΡΡΠ°ΠΌΠΈ (ΡΠ°Π·Π΄Π΅Π» FUNCTIONS);
[x]. Π°ΠΊΡΠΈΠΎΠΌΡ, Π²ΡΡΠ°ΠΆΠ°ΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΠ°Π·Π΄Π΅Π» AXIOMS);
[x]. ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΠ°Π·Π΄Π΅Π» PRECONDITIONS).
ΠΡΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΠ’Π ΡΠ°ΡΡΠΎ ΠΎΠΏΡΡΠΊΠ°ΡΡ Π΄Π²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈ. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ, ΡΡΠΎ Π»ΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ Π°ΠΊΡΠΈΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ°ΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠ»ΠΈ ΠΈΡ ΠΎΠΏΡΡΡΠΈΡΡ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΡΠ΅ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ put, remove ΠΈ Π΄ΡΡΠ³ΠΈΡ , ΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΎΡ ΡΠΊΡΡΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡΡΠ°Π½ΡΡΡΡ, Π½ΠΎ ΡΡΠΎ Π²ΡΠ΅. ΠΠΎΠ½ΡΡΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΡΡΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ Π±Π΅Π· ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠΉ, ΡΡΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΉ. (Π ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½Ρ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, - ΠΌΡ ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°Π»ΠΈ ΠΎΠ±ΡΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° - put, remove, item, Π° Π½Π΅ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠ΅ΠΊΠΎΠ² - push, pop, top).
ΠΡΠΎΡ ΡΠΈΡΠΊ ΠΏΠΎΡΠ΅ΡΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΠ’Π, Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΎΡ Π·Π°Π΄ΡΠΌΠ°Π½Π½ΠΎΠ³ΠΎ. Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°ΡΡ ΡΡΠΎΡ ΡΠΈΡΠΊ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ ΠΊΠ»Π°ΡΡΡ.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΠ’Π ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠ»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΠ’Π Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΈΡ Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠ°ΠΌΠΈ - ΠΠ’Π ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. Π ΡΠ²Π΅ΡΠ΅ ΠΏΡΠ΅ΠΆΠ½ΠΈΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ Π½Π° ΡΡΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ: ΡΠΎΠ·Π΄Π°ΡΠ΅Π»ΠΈ, Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ Π½Π°Π·Π°Π΄, Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ f
f : A Γ B Γ ... X
Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΈΠΌΡ ΠΠ’Π, ΡΠΊΠ°ΠΆΠ΅ΠΌ T, Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΡΠ΅Π΄ΠΈ ΡΠΈΠΏΠΎΠ² A, B, ... X, Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΡΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ:
[x]. ΠΡΠ»ΠΈ Π’ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΠ°Π²Π° ΠΎΡ ΡΡΡΠ΅Π»ΠΊΠΈ, f ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Π΅ΠΌ; Π² ΠΊΠ»Π°ΡΡΠ΅ ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ.
[x]. ΠΡΠ»ΠΈ Π’ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅Π²Π° ΠΎΡ ΡΡΡΠ΅Π»ΠΊΠΈ, f ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠΌ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°. ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠ° Π·Π°ΠΏΡΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ; ΡΠ΅ΡΠΌΠΈΠ½ Π·Π°ΠΏΡΠΎΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½.
[x]. ΠΡΠ»ΠΈ Π’ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ»Π΅Π²Π°, ΡΠ°ΠΊ ΠΈ ΡΠΏΡΠ°Π²Π° ΠΎΡ ΡΡΡΠ΅Π»ΠΊΠΈ, f ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π²ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠ΅ΠΉ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ . ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ f ΡΠ°ΡΡΠΎ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ (ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π½ΠΎΠ²ΡΠΉ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π°ΠΊΡΠΈΠΎΠΌ
ΠΠ· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΠ’Π ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΠ’Π.
[x]. ΠΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΠ’Π ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
[x]. ΠΠΊΡΠΈΠΎΠΌΠ°, Π²ΠΊΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ.
[x]. ΠΠΊΡΠΈΠΎΠΌΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡΡ, ΠΏΠΎΡΠ²ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ. ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² Π°ΠΊΡΠΈΠΎΠΌΡ, ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Π²ΠΈΠ΄Π΅ Π°ΡΡΠΈΠ±ΡΡΠ°.
[x]. ΠΠΊΡΠΈΠΎΠΌΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ, ΠΏΠΎΡΠ²ΡΡΡΡ Π² ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ.
Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ Π½Π°Π·Π°Π΄ ΠΈ ΡΡΠ°Π²Π½ΠΈΡΡ Π°ΠΊΡΠΈΠΎΠΌΡ ΠΠ’Π STACK Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° STACK4 (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Ρ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° STACK2).
Π€ΡΠ½ΠΊΡΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ
ΠΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ.
ΠΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΡΡΠ½ΠΊΠ°, Π½Π°Π²Π΅ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠΎΠΉ [Hoare 1972a], Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ "Π‘ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π".
Π ΠΈΡ. 11.5. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌΠΈ ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ
ΠΠ΄Π΅ΡΡ Π - ΠΠ’Π, Π‘ - ΠΊΠ»Π°ΡΡ, Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ. ΠΠ±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ af ΠΈΠ· ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΠ’Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ cf. ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΡΡ, ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ af ΠΈΠ· A Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ° Π.
Π‘ΡΡΠ΅Π»ΠΊΠ°, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½Π°Ρ Π°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ (abstraction function), ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° - ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° - Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΠ’Π). ΠΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π±ΡΠ²Π°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠΉ, Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°, Π΅ΡΠ»ΠΈ (Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΉ af ΠΈΠ· ΠΠ’Π ΠΈ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ cf) Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠΌΠΌΡΡΠ°ΡΠΈΠ²Π½Π°, ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΡΡ, ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ:
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ ΠΠ»Π°ΡΡ-ΠΠ’Π
(cf;a) = (a;af)
Π³Π΄Π΅ ΡΠΈΠΌΠ²ΠΎΠ» ";" ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΄Π»Ρ Π»ΡΠ±ΡΡ Π΄Π²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ f ΠΈ g, ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ: f;g Π·Π°Π΄Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ h, ΡΠ°ΠΊΡΡ ΡΡΠΎ h(x) = g(f(x)) Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠ³ΠΎ x.
(ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ f;g ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅: g Β° f, Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ².)
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° CONC_1 Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ (ΡΡΠ½ΠΊΡΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ af ΠΈΠ»ΠΈ Π²Π½Π°ΡΠ°Π»Π΅ cf, Π° ΠΏΠΎΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ); ΠΎΠ±Π° ΠΏΡΡΠΈ, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ ΡΡΡΠΈΡ ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π»ΠΈΠ½ΠΈΡΠΌΠΈ, Π²Π΅Π΄ΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ - Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ABST_2. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅, Π΅ΡΠ»ΠΈ:
[x]. ΠΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° cf, Π° ΠΏΠΎΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π°, ΠΏΠΎΠ»ΡΡΠΈΠ² a(cf(CONC_1)).
[x]. ΠΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π°, Π° ΠΏΠΎΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΠ’Π - af, ΠΏΠΎΠ»ΡΡΠΈΠ² af(a(CONC_1)).
ΠΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Ρ ΠΎΡΡ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΡΡΠΌΡΡ Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ² Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΠ’Π. ΠΡΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΊΡΡΡΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ»Π° Π² ΠΠ’Π. ΠΡΠΎΡΡΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΏΠΎΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ Π² ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ΅ STACK4:
count_non_negative: 0 <= count
count_bounded: count <= capacity
Π’Π°ΠΊΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ°ΡΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΊΠ»Π°ΡΡΠ°, ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΊΠ°ΠΊ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (implementation invariant). ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°Π΄Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅, (Π·Π΄Π΅ΡΡ ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡΡ count, capacity, representation) - Π²ΠΈΠ·Π°Π²ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΠ’Π.