ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ» ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, Π΄Π°ΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠ°Π½Ρ Π·Π°Π±ΡΡΡ ΠΎΠ± ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΌ ΡΡΠΈΠ»Π΅ ΡΠ°Π·Π±ΠΎΡΠ° Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² (case-by-case). ΠΡΠ»ΠΈ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΈΡΡΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠΈΠΏΠ°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Ρ ΠΎΡΡ Π²Π°ΠΌ ΠΈ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΠΎΡΡΡΠ΄ΠΈΡΡΡΡ. Π’Π°ΠΊ, Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ f.display, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΠΠ-ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ, - Π½ΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, - ΠΏΠΈΡΠ°ΡΡ:
display (f: FIGURE) is
-- ΠΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ f, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ,
-- Π°Π΄Π°ΠΏΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊ ΠΈΡΡΠΈΠ½Π½ΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
local
r: RECTANGLE; t: TRIANGLE; p: POLYGON; s: SQUARE
sg: SEGMENT; e: ELLIPSE; c: CIRCLE;?
do
r ?= f; if r /= Void then "ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°" end
t ?= f; if t /= Void then "ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°" end
c ?= f; if c /= Void then "ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠ²ΠΎΠ΄Π° ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ" end
... ΠΈ Ρ.Π΄. ...
end
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ°ΠΊΠ°Ρ ΡΡ Π΅ΠΌΠ° Π΄Π°ΠΆΠ΅ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΡΡΠΊΡΡΡΠ° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ, Π° Π·Π½Π°ΡΠΈΡ, ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π½Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ.
ΠΠ·-Π·Π° ΡΡΡΠ΄Π½ΠΎΡΡΠ΅ΠΉ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ Π·Π°ΠΊΡΡΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΈΡΠΊΠ°ΠΌ Π²ΡΡΠ΄ Π»ΠΈ ΠΏΡΠΈΠ΄Π΅Ρ Π² Π³ΠΎΠ»ΠΎΠ²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠΉ ΠΠ-ΡΡ Π΅ΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈ ΠΎΠΏΡΡΠ½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° ΠΏΠΎΠΏΡΡΠΊΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ "ΡΡΠΆΠ΅Π½ΠΈΡ" (narrowing) Π΅ΡΡΡ Π² ΡΠ·ΡΠΊΠ΅ Java. Π ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΎΠ½ Π²ΡΠ΄Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΠ°ΠΌΠΎΡΠ±ΠΈΠΉΡΡΠ²ΠΎ, Π½Π΅ΡΡΠΏΠ΅Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π²ΠΎΠ²ΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ Π½Π΅Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌ, ΡΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ instanceof Π² ΡΠ·ΡΠΊΠ΅ Java Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠΏΠΎΠ² Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ.
ΠΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π² ΡΠ·ΡΠΊΠ΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ Java Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠ±Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°. ΠΡΡΠ°ΡΡΠΈ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π² ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Java Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ»Π°ΡΡΠ° NONE, Π° ΠΏΠΎΡΠΎΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΡ Void Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΈΠΏΠΎΠ².
Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ. ΠΠΎΠΊΠ° ΠΎΠ½ΠΎ Π²ΠΈΠ΄Π΅Π»ΠΎΡΡ Π½Π°ΠΌ ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π΄ΡΡΠ³ΠΈΠΌ ΠΈΠ»ΠΈ - Π΄Π»Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° - Π·Π°ΠΏΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠΎ, Π²ΠΎΠΏΠ»ΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΊΠΎΠΌ, ΠΌΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π΄Π²Π° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
Π£ΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ ΠΏΡΠΈΠ½ΡΠ΅ΡΡ
ΠΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π²ΠΊΠ»ΡΡΠΈΠ² ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π΅ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎ:
class DEVICE feature
alternate: DEVICE
set_alternate (a: DEVICE) is
-- ΠΡΡΡΡ a - Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
do
alternate := a
end
... ΠΡΠΎΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ...
end
ΠΡΠΈΠ½ΡΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΡΠ°Π²Π΄Π°Π½ΠΎ. ΠΠΎ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΠΏΡΠΈΠ½ΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ½ΡΠ΅Ρ, Π½ΠΎ Π½Π΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΄ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠΎΠ² ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π²Π°Ρ ΠΊΠ°ΡΡΠ°, - ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΈΠΏ:
Π ΠΈΡ. 16.6. Π£ΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ ΠΏΡΠΈΠ½ΡΠ΅ΡΡ
class PRINTER inherit
DEVICE
redefine alternate, set_alternate
feature
alternate: PRINTER
set_alternate (a: PRINTER) is
-- ΠΡΡΡΡ a - Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
... Π’Π΅Π»ΠΎ ΠΊΠ°ΠΊ Ρ ΠΊΠ»Π°ΡΡΠ° DEVICE ...
... ΠΡΠΎΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ...
end
Π ΡΡΠΎΠΌ ΠΈ ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠ°Ρ ΠΏΡΠΈΡΠΎΠ΄Π° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ΄Π½ΠΎ- ΠΈ Π΄Π²ΡΡΠ²ΡΠ·Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ Π±Π°Π·ΠΎΠ²ΡΠΌ ΡΡΡΡΠΊΡΡΡΠ°ΠΌ Π΄Π°Π½Π½ΡΡ . Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ LINKABLE, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² LINKED_LIST - ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΡΠΏΠΈΡΠΊΠΎΠ². ΠΠΎΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°:
indexing
description: "ΠΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ°"
class LINKABLE [G] feature
item: G
right: LINKABLE [G]
put_right (other: LINKABLE [G]) is
-- ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ other ΡΠΏΡΠ°Π²Π° ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
do right := other end
... ΠΡΠΎΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ...
end
Π ΠΈΡ. 16.7. ΠΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°
Π ΡΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΡΠ΅Π±ΡΡΡ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ². ΠΠ»Π°ΡΡ TWO_WAY_LIST - Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ LINKED_LIST Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° BI_LINKABLE, ΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° LINKABLE.
Π ΠΈΡ. 16.8. ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ
ΠΠ²ΡΡΠ²ΡΠ·Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅:
Π ΠΈΡ. 16.9. ΠΠ²ΡΡΠ²ΡΠ·Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°
Π ΡΠΎΡΡΠ°Π² Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Ρ ΠΎΠ΄ΠΈΡΡ Π»ΠΈΡΡ Π΄Π²ΡΡΠ²ΡΠ·Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ (Ρ ΠΎΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅, Π² ΡΠΈΠ»Ρ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°, Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΡΡ ΠΈ Π² ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ). ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² right ΠΈ put_right, ΠΌΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΠΎΡΡΡ Π΄Π²ΡΡΠ²ΡΠ·Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ².
indexing
description: "ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π²ΡΡΠ²ΡΠ·Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°"
class BI_LINKABLE [G] inherit
LINKABLE [G]
redefine right, put_right end
feature
left, right: BI_LINKABLE [G]
put_right (other: BI_LINKABLE [G]) is
-- ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ other ΡΠΏΡΠ°Π²Π° ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
do
right := other
if other /= Void then other.put_left (Current) end
end
put_left (other: BI_LINKABLE [G]) is
-- ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ other ΡΠ»Π΅Π²Π° ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
... Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ...
... ΠΡΠΎΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ...
invariant
right = Void or else right.left = Current
left = Void or else left.right = Current
end
(ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ put_left. ΠΠ΄Π΅ΡΡ ΡΠΊΡΡΡΠ° Π»ΠΎΠ²ΡΡΠΊΠ°! Π‘ΠΌ. ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ A.)
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²
ΠΡΠΈΠΌΠ΅ΡΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π²ΡΠ΅ ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ². Π‘ΠΏΡΡΠΊ ΠΏΠΎ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, a Π² set_alternate ΠΈ other Π² put_right; ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΈΠΏΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² - alternate ΠΈ right.
ΠΡΠΎΡ Π°ΡΠΏΠ΅ΠΊΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ:
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²
ΠΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° (Π΄Π»Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ) ΠΈΠ»ΠΈ ΡΠΈΠΏ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° (Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ) Π»ΡΠ±ΡΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ ΡΠΈΠΏΠΎΠΌ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ². Π‘Π²ΡΠ·ΠΊΠ° "ΠΈΠ»ΠΈ", ΡΡΠΎΡΡΠ°Ρ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ°ΠΊ ΡΠΈΠΏ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊ ΠΈ ΡΠΈΠΏ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΡΠ±ΠΎΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Π΄Π΅Ρ ΠΊ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π°, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ². Π’Π°ΠΊ, Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠΌ ΠΊ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ ΡΠΏΠΈΡΠΊΠ°ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ ΡΠΈΠΏ Π½Π° BI_LINKABLE. ΠΡΡΡΠ΄Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΠΎΠ½ΡΡΠ΅Π½ ΡΠΎΡ ΡΠ΅ΡΠΌΠΈΠ½, ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°ΡΡΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΡΠ΅Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ², - ΠΊΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ (covariant typing), Π³Π΄Π΅ ΠΏΡΠΈΡΡΠ°Π²ΠΊΠ° "ΠΊΠΎ" ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΈ ΡΠΏΡΡΠΊΠ΅ ΠΏΠΎ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΈΡ Π² ΡΠ΅Π±Π΅ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Ρ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², Π½Π΅ΡΠ΅Π΄ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΠΈΡ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π΅ΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ°ΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² ΡΠΏΠΎΡΠΎΠ±Π½ΠΎ ΡΠ²Π΅ΡΡΠΈ Π½Π° Π½Π΅Ρ ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈ ΠΊΠ°ΠΊΠΎΠ²ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
ΠΠ΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΡΠΈΠΏΠΎΠ²
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΡΡΠ°ΡΡΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ° LINKED_LIST. ΠΡΡΡΡ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΡΠΏΠΈΡΠΎΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΏΡΠ°Π²Π° ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. Π Π΄Π΅ΡΠ°Π»ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Π²ΡΠ΅ ΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ new ΡΠΈΠΏΠ° LINKABLE, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ Π² ΡΠΏΠΈΡΠΎΠΊ.
Π ΠΈΡ. 16.10. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
put_right (v: G) is
-- ΠΡΡΠ°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ v ΡΠΏΡΠ°Π²Π° ΠΎΡ ΠΊΡΡΡΠΎΡΠ°.
-- ΠΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°ΡΡ ΠΊΡΡΡΠΎΡ.