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

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

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

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, ΠΊΠ°ΠΊ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» спроСктирован ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ шанс Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎΠ± ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΌ стилС Ρ€Π°Π·Π±ΠΎΡ€Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² (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 справа ΠΎΡ‚ курсора.

-- НС ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ курсор.