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

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

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

-- Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ массив с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ 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) - Π²ΠΈΠ·Π°Π²ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ АВД.