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

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

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

Для проТивания спортсмСнов Π·Π°Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ ряд Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ²: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΌΡƒΠΆΡ‡ΠΈΠ½, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄Π΅Π²ΡƒΡˆΠ΅ΠΊ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄Π΅Π²ΡƒΡˆΠ΅ΠΊ-ΠΏΡ€ΠΈΠ·Π΅Ρ€ΠΎΠ². Для отобраТСния этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ классов: ROOM, GIRL_ROOM ΠΈ RANKED_GIRL_ROOM.

Π’ΠΎΡ‚ набросок класса SKIER:


class SKIER feature

roommate: SKIER

-- БосСд ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ.

share (other: SKIER) is

-- Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π² качСствС сосСда other.

require

other /= Void

do

roommate := other

end

... Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π² этом ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… классах ...

end



Нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ roommate ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° share, "Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π°Ρ" Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π»Ρ‹ΠΆΠ½ΠΈΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€Π΅ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π»Ρ‹ΠΆΠ½ΠΈΠΊΠΎΠΌ:


s1, s2: SKIER

...

s1.share (s2)



ΠŸΡ€ΠΈ объявлСнии сущности other ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° SKIER Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° like roommate (ΠΈΠ»ΠΈ like Current для roommate ΠΈ other ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ). Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Π±ΡƒΠ΄Π΅ΠΌ Π½Π° врСмя ΠΎ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² (ΠΌΡ‹ ΠΊ Π½ΠΈΠΌ Π΅Ρ‰Π΅ вСрнСмся) ΠΈ посмотрим Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ковариантности Π² Π΅Π΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

Как ввСсти ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²? ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ проТивания юношСй ΠΈ Π΄Π΅Π²ΡƒΡˆΠ΅ΠΊ, ΠΏΡ€ΠΈΠ·Π΅Ρ€ΠΎΠ² ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… участников. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ‚ΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° roommate, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅ (здСсь ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ элСмСнты ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Ρ‹).


class GIRL inherit

SKIER

redefine roommate end

feature

roommate: GIRL

-- БосСд ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ.

end



ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, соотвСтствСнно, ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ share. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выглядит Ρ‚Π°ΠΊ:


class GIRL inherit

SKIER

redefine roommate, share end

feature

roommate: GIRL

-- БосСд ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ.

share (other: GIRL) is

-- Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π² качСствС сосСда other.

require

other /= Void

do

roommate := other

end

end



Аналогично слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ SKIER классы (Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΌΡ‹ сСйчас Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ). Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΠΌΠ΅Π΅ΠΌ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ:

Рис. 17.5.  Π˜Π΅Ρ€Π°Ρ€Ρ…ия участников ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ опрСдСлСния

Π’Π°ΠΊ ΠΊΠ°ΠΊ наслСдованиС являСтся спСциализациСй, Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ‚ΠΈΠΏΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС roommate, Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π±Ρ‹Π» ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ исходного. Π’ΠΎ ΠΆΠ΅ касаСтся ΠΈ пСрСопрСдСлСния Ρ‚ΠΈΠΏΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° other ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ share. Π­Ρ‚Π° стратСгия, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, имСнуСтся ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ, Π³Π΄Π΅ приставка "ΠΊΠΎ" ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° совмСстноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Π°Ρ стратСгия называСтся ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ.

ВсС наши ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎ практичСской нСобходимости ковариантности.

[x]. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ односвязного списка LINKABLE Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ связан с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ сСбС элСмСнтом, Π° экзСмпляр BI_LINKABLE - с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ сСбС. ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎ потрСбуСтся пСрСопрСдСляСтся ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² put_right.

[x]. Всякая ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² составС LINKED_LIST с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° LINKABLE ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΊ TWO_WAY_LIST ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° BI_LINKABLE.

[x]. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° set_alternate ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ DEVICE-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² классС DEVICE ΠΈ PRINTER-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - Π² классС PRINTER.

ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎ особоС распространСниС ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ скрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Π΅Π΄Π΅Ρ‚ ΠΊ созданию ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Π²ΠΈΠ΄Π°


set_attrib (v: SOME_TYPE) is

-- Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ attrib Π² v.

...



для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с attrib Ρ‚ΠΈΠΏΠ° SOME_TYPE. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, СстСствСнно, ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ любой класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ мСняСт Ρ‚ΠΈΠΏ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Π΄ΠΎΠ»ΠΆΠ΅Π½ соотвСтствСнно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ set_attrib. Π₯отя прСдставлСнныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΡƒΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½Ρƒ схСму, Π½ΠΎ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ распространСна Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡˆΠΈΡ€Π΅. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ односвязных списков (LINKED_LIST). Π•Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ двусвязный список (TWO_ WAY_LIST). Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ опСрация слоТСния infix "+" ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ NUMERIC-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² классС NUMERIC, REAL - Π² классС REAL ΠΈ INTEGER - Π² классС INTEGER. Π’ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… иСрархиях Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ слуТбы ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ start Π² классС PHONE_SERVICE ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ADDRESS, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ адрСс Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°, (для выписки счСта), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ этой ΠΆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Π² классС CORPORATE_SERVICE потрСбуСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° CORPORATE_ADDRESS.

Рис. 17.6.  Π‘Π»ΡƒΠΆΠ±Ρ‹ связи

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ? Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с Π»Ρ‹ΠΆΠ½ΠΈΠΊΠ°ΠΌΠΈ ΠΎΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ссли, пСрСходя ΠΊ классу RANKED_GIRL, Ρ‚ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° roommate ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ RANKED_GIRL, Ρ‚ΠΎ Π² силу контравариантности Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° share ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚ΠΈΠΏ GIRL ΠΈΠ»ΠΈ SKIER. ЕдинствСнный Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ допустим ΠΏΡ€ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ, - это RANKED_GIRL! Достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΡ‚ΡŒ Π½Π°ΠΈΡ…ΡƒΠ΄ΡˆΠΈΠ΅ подозрСния Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π΄Π΅Π²ΡƒΡˆΠ΅ΠΊ.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ камня Π½Π° ΠΊΠ°ΠΌΠ½Π΅, рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° SKIER с двумя ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ иСрархиями. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΡƒΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π²ΡˆΡƒΡŽΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅: TWO_ WAY_LIST > LINKED_LIST ΠΈ BI_LINKABLE > LINKABLE; ΠΈΠ»ΠΈ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ с Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ слуТбой PHONE_SERVICE.

ΠŸΡƒΡΡ‚ΡŒ Π΅ΡΡ‚ΡŒ иСрархия с классом ROOM, ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся GIRL_ROOM (класс BOY ΠΎΠΏΡƒΡ‰Π΅Π½):

Рис. 17.7.  Π›Ρ‹ΠΆΠ½ΠΈΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹

Наши классы Π»Ρ‹ΠΆΠ½ΠΈΠΊΠΎΠ² Π² этой ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ вмСсто roommate ΠΈ share Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ accommodation (Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅) ΠΈ accommodate (Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ):


indexing

description: "Новый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ иСрархиями"

class SKIER1 feature

accommodation: ROOM

accommodate (r: ROOM) is ... require ... do

accommodation:= r

end

end



Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹Π΅ пСрСопрСдСлСния: Π² классС GIRL1 ΠΊΠ°ΠΊ accommodation, Ρ‚Π°ΠΊ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ accommodate Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΠΎΠΌ GIRL_ROOM, Π² классС BOY1 - Ρ‚ΠΈΠΏΠΎΠΌ BOY_ROOM ΠΈ Ρ‚.Π΄. (НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅: ΠΌΡ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π±Π΅Π· закрСплСния Ρ‚ΠΈΠΏΠΎΠ².) Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ здСсь бСсполСзна.

Π‘Π²ΠΎΠ΅Π½Ρ€Π°Π²ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°

НС довольно Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ? ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ рассматриваСт ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ, которая вступаСт Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ΅ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ (Ссли Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ повСдСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ»ΠΎΠ΄Ρ‹Ρ… людСй)? Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ это, рассмотрим ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ сочСтании ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ стратСгии ковариантности. ΠŸΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π²Ρ€Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ схСму нСслоТно, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΡƒΠΆΠ΅ создали Π΅Π΅ сами:


s: SKIER; b: BOY; g: GIRL

...

create b; create g;-- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² BOY ΠΈ GIRL.

s := b; -- ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ присваиваниС.

s.share (g)



Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ послСднСго Π²Ρ‹Π·ΠΎΠ²Π°, Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ приятный для юношСй, - это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ Π½Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСрСопрСдСлСния Ρ‚ΠΈΠΏΠΎΠ². Π’Ρ‹Π·ΠΎΠ² share Π²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ BOY, извСстный ΠΊΠ°ΠΊ b ΠΈ благодаря ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ псСвдоним s Ρ‚ΠΈΠΏΠ° SKIER, становится сосСдом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° GIRL, извСстного ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ g. Однако Π²Ρ‹Π·ΠΎΠ², хотя ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ общСТития, являСтся Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ тСкстС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ share -экспортируСмый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² составС SKIER, Π° GIRL, Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° g, совмСстим со SKIER, Ρ‚ΠΈΠΏΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° share.

Π‘Ρ…Π΅ΠΌΠ° с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠ΅ΠΉ ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ проста: Π·Π°ΠΌΠ΅Π½ΠΈΠΌ SKIER Π½Π° SKIER1, Π²Ρ‹Π·ΠΎΠ² share - Π½Π° Π²Ρ‹Π·ΠΎΠ² s.accommodate (gr), Π³Π΄Π΅ gr - ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° GIRL_ROOM. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ - Ρ‚ΠΎΡ‚ ΠΆΠ΅.

ΠŸΡ€ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ Π±Ρ‹: спСциализация Ρ†Π΅Π»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° (Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ s) Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° Π±Ρ‹ обобщСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠšΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Π΅Π΄Π΅Ρ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ простой матСматичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°: наслСдованиС - ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ - ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Π”Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ описан Π² рядС тСорСтичСских статСй, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΡ… эту ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ. АргумСнтация Π½Π΅ слишком ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ наши ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ практичСского использования.