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

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

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

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, наслСдованиС являСтся спСциализациСй с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ парадокс Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ-спСциализации: Ρ‡Π΅ΠΌ большС примСняСмых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‚Π΅ΠΌ мСньшС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

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

Роль ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов

ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… связанных с наслСдованиСм ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ описанных Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ конструирования ПО.

Назад ΠΊ абстрактным Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…

НасыщСнныС утвСрТдСниями ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для прСдставлСния АВД. ΠŸΡ€Π΅ΠΊΡ€Π°ΡΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс для стСков. ΠœΡ‹ ΡƒΠΆΠ΅ описывали ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ put, сСйчас ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ описания этого класса.


indexing

description:

"Π‘Ρ‚Π΅ΠΊΠΈ (Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ структуры с дисциплиной Last-in, First-Out), %

%Π½Π΅ зависящиС ΠΎΡ‚ Π²Ρ‹Π±ΠΎΡ€Π° прСдставлСния"

deferred class

STACK [G]

feature -- Доступ

count: INTEGER is

-- Число элСмСнтов.

deferred

end

item: G is

-- ПослСдний вставлСнный элСмСнт.

require

not_empty: not empty

deferred

end

feature - ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΎ статусС

empty: BOOLEAN is

-- Π‘Ρ‚Π΅ΠΊ пустой?

do

Result := (count = 0)

end

full: BOOLEAN is

-- Π‘Ρ‚Π΅ΠΊ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½?

deferred

end

feature - ИзмСнСниС элСмСнта

put (x: G) is

-- Π’Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ x Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ.

require

not full

deferred

ensure

not_empty: not empty

pushed_is_top: item = x

one_more: count = old count + 1

end

remove is

-- Π’Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ элСмСнт.

require

not empty

deferred

ensure

not_full: not full

one_less: count = old count - 1

end

change_top (x: T) is

-- Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ элСмСнт Π½Π° x

require

not_empty: not empty

do

remove; put (x)

ensure

not_empty: not empty

new_top: item = x

same_number_of_items: count = old count

end

wipe_out is

-- Π£Π΄Π°Π»ΠΈΡ‚ΡŒ всС элСмСнты.

deferred

ensure

no_more_elements: empty

end

invariant

non_negative_count: count >= 0

empty_count: empty = (count = 0)

end



Π­Ρ‚ΠΎΡ‚ класс ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° change_top Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ remove ΠΈ put. (Вакая рСализация для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставлСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для массивов, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ самой Π»ΡƒΡ‡ΡˆΠ΅ΠΉ, Π½ΠΎ эффСктивныС ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ класса STACK ΠΌΠΎΠ³ΡƒΡ‚ Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ.)

Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ класс STACK со спСцификациСй ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ АВД, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 6, Ρ‚ΠΎ обнаруТится ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сходство. ΠŸΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½Π΅ΠΌ, Π² частности, соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ функциями АВД ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ класса, ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ PRECONDITIONS ΠΈ прСдусловиями ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Аксиомы прСдставлСны Π² постусловиях ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Π² ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ класса.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ change_top, count ΠΈ wipe_out Π² Π΄Π°Π½Π½ΠΎΠΌ случаС нСсущСствСнно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ АВД (см. ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π£6.8). ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ явного эквивалСнта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ new ΠΈΠ· АВД Ρ‚Π°ΠΊΠΆΠ΅ нСсущСствСнно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ созданиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹-конструкторы Π² эффСктивных ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ… этого класса. ΠžΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ сущСствСнных отличия.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… - это Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ full, рассчитанной Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ числом элСмСнтов стСка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ массивами. Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ограничСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ нСсущСствСнно Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ спСцификации, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ практичСских систСм. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‡Ρ‚ΠΎ это ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ АВД ΠΈ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ классом ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ АВД срСдства для ΠΎΡ…Π²Π°Ρ‚Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… стСков. ΠŸΡ€ΠΈ этом ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ потСряна, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ списков) ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ full Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ, всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌΠΈ лоТь.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈ обсуТдСнии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ спСцификация АВД ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Π° (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°), ΠΎΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов. А ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс, нСсмотря Π½Π° Π΅Π³ΠΎ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ, являСтся ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌ), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ put ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ стСк, Π° Π½Π΅ ΠΊΠ°ΠΊ функция, которая Π±Π΅Ρ€Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠ΄ΠΈΠ½ стСк ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

НаконСц, ΠΊΠ°ΠΊ Ρ‚ΠΎΠΆΠ΅ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ нСдостаточно Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»Π΅Π½ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… аксиом АВД. Из Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… аксиом стСков

Для всСх x: G, s: STACK [G],

1


item (put (s, x)) = x




2


remove (put (s, x)) = s




3


empty (new)




4


not empty (put (s, x))




всС, ΠΊΡ€ΠΎΠΌΠ΅ (2), ΠΈΠΌΠ΅ΡŽΡ‚ прямыС эквивалСнты срСди ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ. (ΠœΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ для (3) ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹-конструкторы Ρƒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² обСспСчат Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ условия empty). ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Ρ‹ ΠΈ Π±Ρ‹Π»ΠΈ Π½Π°ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΈΡ… прСодолСния - языки Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… спСцификаций IFL.

ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы ΠΊΠ°ΠΊ частичныС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ: классы повСдСния

НС всС ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы Ρ‚Π°ΠΊ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ АВД ΠΊΠ°ΠΊ STACK. Π’ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ абстрактным классом, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ STACK, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС сущСствСнныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Ρ‹, ΠΈ эффСктивным классом, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ FIXED_STACK, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ АВД, имССтся мСсто для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ АВД с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΡΡ‚ΠΈ.

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

Рис. 14.13.  Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ понятия "Ρ‚Π°Π±Π»ΠΈΡ†Π°"

НаиболСС ΠΎΠ±Ρ‰ΠΈΠΉ класс TABLE являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ сущСствСнной ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘Ρ€Π΅Π΄ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² имССтся класс SEQUENTIAL_TABLE, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивы, связанныС списки ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ классы Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части рисунка ΡΠ²Π»ΡΡŽΡ‚ΡΡ эффСктивными.

ΠžΡΠΎΠ±Ρ‹ΠΉ интСрСс ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ классы ΠΊΠ°ΠΊ SEQUENTIAL_TABLE. Π­Ρ‚ΠΎΡ‚ класс всС Π΅Ρ‰Π΅ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ, Π½ΠΎ Π΅Π³ΠΎ статус находится посрСдинС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ статусом ΠΊΠ°ΠΊ Ρƒ класса TABLE ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ эффСктивным ΠΊΠ°ΠΊ Ρƒ ARRAY_TABLE. Π£ Π½Π΅Π³ΠΎ достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… спСцифичСских Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск:


has (x: G): BOOLEAN is

-- x имССтся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅?

do

from start until after or else equal (item, x) loop

forth

end

Result := not after

end



Π­Ρ‚Π° функция эффСктивна, хотя Π΅Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ start (ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ курсор Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ), forth (ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ курсор Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ), item (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ курсора), after (находится Π»ΠΈ курсор Π·Π° послСдним элСмСнтом?) ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² классС SEQUENTIAL_TABLE ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½Π° рисункС ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² этого класса ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ.

Π­Ρ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈ обсуТдСнии ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования. НапримСр класс ARRAY_TABLE ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ курсор числом i, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° start рСализуСтся ΠΊΠ°ΠΊ i := 1, Π° item ΠΊΠ°ΠΊ t @ i ΠΈ Ρ‚.Π΄.