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

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

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

Π”Π΅Ρ€Π΅Π²ΡŒΡ - это списки ΠΈ ΠΈΡ… элСмСнты

Класс Π΄Π΅Ρ€Π΅Π²Π° TREE - Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ яркий ΠΏΡ€ΠΈΠΌΠ΅Ρ€ мноТСствСнного наслСдования.

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

ΠœΡ‹ ΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ понятиями Π΄Π΅Ρ€Π΅Π²Π° ΠΈ ΡƒΠ·Π»Π° Π½Π΅Ρ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ. Π£Π·Π΅Π» ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ€Π½Π΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ являСтся. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠΌ ΠΊ классу TREE [G], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΊΠ°ΠΊ ΡƒΠ·Π»Ρ‹, Ρ‚Π°ΠΊ ΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡ. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ G ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, являСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, экзСмпляром TREE [INTEGER]:

Рис. 15.6.  Π”Π΅Ρ€Π΅Π²ΠΎ Ρ†Π΅Π»Ρ‹Ρ… чисСл

Вспомним Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ понятии списка, Ρ‡Π΅ΠΉ класс LIST рассмотрСн Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… лСкциях. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π΅Π³ΠΎ рСализация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ввСдСния класса CELL для прСдставлСния Π΅Π³ΠΎ элСмСнтов структуры.

Рис. 15.7.  ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ списка

Π­Ρ‚ΠΈ понятия ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΊ простому ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π΄Π΅Ρ€Π΅Π²Π°: Π΄Π΅Ρ€Π΅Π²ΠΎ (ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡƒΠ·Π΅Π») Π΅ΡΡ‚ΡŒ список, - список Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ², Π½ΠΎ являСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом списка, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: Π΄Π΅Ρ€Π΅Π²ΠΎ

Π”Π΅Ρ€Π΅Π²ΠΎ - это список ΠΈ элСмСнт списка ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΅Ρ‰Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡƒΠΆΠ΅ сСйчас позволяСт ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ класс:


deferred class TREE [G] inherit

LIST [G]

CELL [G]

feature

...

end



ΠžΡ‚ класса LIST Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΊΠ°ΠΊ количСство ΡƒΠ·Π»ΠΎΠ² (count), Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»ΠΎΠ² ΠΈ Ρ‚. Π΄.

ΠžΡ‚ класса CELL Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡƒΠ·Π»Π°ΠΌΠΈ, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ родитСля ΠΈΠ»ΠΈ Π±Ρ€Π°Ρ‚ΡŒΠ΅Π²: ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Ρ€Π°Ρ‚, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π±Ρ€Π°Ρ‚Π°, ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π΅Π½ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ прСимущСства ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΈ мноТСствСнном наслСдовании. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² вставки ΠΈΠ»ΠΈ удалСния ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ сдСлано для списка элСмСнтов. Нам ΠΆΠ΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ лишь космСтичСскиС Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, слСдуСт ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ feature спСцифичСских ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², присущих Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌ, ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… компромиссов, Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΈ любой свадьбС, ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π²Π·Π°ΠΈΠΌΠ½ΡƒΡŽ Π³Π°Ρ€ΠΌΠΎΠ½ΠΈΡŽ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов. Π˜Ρ… тСкст Π½Π΅Π²Π΅Π»ΠΈΠΊ ΠΈ Π·Π°ΠΉΠΌΠ΅Ρ‚ Π² классС TREE Ρ‡ΡƒΡ‚ΡŒ большС страницы, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наш класс Π²ΠΏΠΎΠ»Π½Π΅ Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠ»ΠΎΠ΄ союза списков ΠΈ элСмСнтов списка.

Π­Ρ‚ΠΎΡ‚ процСсс ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ процСссу, примСняСмому ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π΅ΠΎΡ€ΠΈΠΉ: топологичСскоС Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ пространство являСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ топологичСским пространством ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΌ пространством. Π—Π΄Π΅ΡΡŒ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²ΡΠ·ΡƒΡŽΡ‰ΠΈΠ΅ аксиомы.

БоставныС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ большС Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, - ΠΎΠ½ послуТит Π½Π°ΠΌ ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ проСктирования классов Π² самых Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ситуациях.

Рассмотрим структуру, Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ для изучСния наслСдования ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ классы графичСских Ρ„ΠΈΠ³ΡƒΡ€: FIGURE, OPEN_FIGURE, POLYGON, RECTANGLE, ELLIPSE ΠΈ Ρ‚.Π΄. Π”ΠΎ сих ΠΏΠΎΡ€ Π² этой структурС использовалось лишь Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ наслСдованиС.

Рис. 15.8.  Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹

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

Рис. 15.9.  Π‘оставная Ρ„ΠΈΠ³ΡƒΡ€Π°

КолСсо, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ рисовании вСлосипСда, ΠΈ Ρ‚. Π΄.

Π˜Ρ‚Π°ΠΊ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ создания Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€, построСнных Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…, Π½ΠΎ, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ построСнными, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π½Π°Ρ€Π°Π²Π½Π΅ с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ.

НазовСм Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ составными (COMPOSITE_FIGURE). ΠšΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ, бСзусловно, Π½Π°Π΄ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚ FIGURE, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΅ΠΉ Π±Ρ‹Ρ‚ΡŒ "Π½Π° Ρ€Π°Π²Π½Ρ‹Ρ…" с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ. Боставная Ρ„ΠΈΠ³ΡƒΡ€Π° - это Π΅Ρ‰Π΅ ΠΈ список Ρ„ΠΈΠ³ΡƒΡ€, Π΅Π΅ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΡ…, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ»ΠΈ составной. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ мноТСствСнным наслСдованиСм (рис. 15.10).

Для получСния эффСктивного класса COMPOSITE_FIGURE Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ списка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ связный список - LINKED_LIST. ОбъявлСниС класса Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:


class COMPOSITE_FIGURE inherit

FIGURE

LINKED_LIST [FIGURE]

feature

...

end



Рис. 15.10.  Π‘оставная Ρ„ΠΈΠ³ΡƒΡ€Π° - это Ρ„ΠΈΠ³ΡƒΡ€Π° ΠΈ список Ρ„ΠΈΠ³ΡƒΡ€ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ feature Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ приятно Π²Π΄Π²ΠΎΠΉΠ½Π΅. Π Π°Π±ΠΎΡ‚Π° с составными Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ сводится ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ со всСми ΠΈΡ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ. НапримСр, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° display ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‚Π°ΠΊ:


display is

-- ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ отобраТая всС Π΅Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

do

from

start

until

after

loop

item.display

forth

end

end



Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… рассмотрСниях, ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ класс список ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π° элСмСнтов, основанный Π½Π° понятии курсора. Команда start устанавливаСт курсор Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ (ΠΈΠ½Π°Ρ‡Π΅ after сразу ΠΆΠ΅ Ρ€Π°Π²Π½ΠΎ True), after ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, обошСл Π»ΠΈ курсор всС элСмСнты, item Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ курсор, forth ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ курсор ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту.

Π― Π½Π°Ρ…ΠΎΠΆΡƒ эту схСму прСкрасной ΠΈ, надСюсь, Π²Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΏΠ»Π΅Π½ΠΈΡ‚Π΅ΡΡŒ Π΅Π΅ красотой. Π’ Π½Π΅ΠΉ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ вСсь арсСнал срСдств: классы, мноТСствСнноС наслСдованиС, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… (LINKED_LIST [FIGURE]), динамичСскоС связываниС (Π²Ρ‹Π·ΠΎΠ² item.display примСняСт ΠΌΠ΅Ρ‚ΠΎΠ΄ display Ρ‚ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт списка), Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт item сам ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ составной Ρ„ΠΈΠ³ΡƒΡ€ΠΎΠΉ Π±Π΅Π· ограничСния Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ влоТСнности). ΠŸΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ: Π΅ΡΡ‚ΡŒ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΆΠΈΡ‚ΡŒ всю Тизнь ΠΈ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ этого вСликолСпия!

Но ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π΅Ρ‰Π΅ дальшС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ COMPOSITE_FIGURE - ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ вращСния (rotate) ΠΈ пСрСноса (translate). Они Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ элСмСнтом Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ display. Для ОО-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ: Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ повторСния; ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ - ΠΎΡ‚ инкапсуляции ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ использованию. (Π­Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΡΡ‚Π°Ρ‚ΡŒ Π΄Π΅Π²ΠΈΠ·ΠΎΠΌ.) Π’Π΅Ρ…Π½ΠΈΠΊΠ°, рассматриваСмая здСсь, состоит Π² использовании ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса "ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€", Ρ‡ΡŒΠΈ экзСмпляры способны Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΏΠΎ COMPOSITE_FIGURE. Π•Π³ΠΎ эффСктивным ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ DISPLAY_ ITERATOR, Π° Ρ‚Π°ΠΊΠΆΠ΅ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этой схСмы ΠΌΡ‹ оставляСм Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ (см. ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 15.4).

ОписаниС составных структур с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ мноТСствСнного наслСдования ΠΈ списка ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ³ΠΎ класса, ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, - это ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† проСктирования. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π΅Π³ΠΎ воплощСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ подмСню (см. ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 15.8), Π° Ρ‚Π°ΠΊΠΆΠ΅ составныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² рядС ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… систСм.

Π‘Ρ€Π°ΠΊ ΠΏΠΎ расчСту

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΎΠ±Π° родитСля ΠΈΠ³Ρ€Π°Π»ΠΈ симмСтричныС Ρ€ΠΎΠ»ΠΈ, Π½ΠΎ это Π½Π΅ всСгда Ρ‚Π°ΠΊ. Иногда Π²ΠΊΠ»Π°Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅.

Π’Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ мноТСствСнного наслСдования являСтся обСспСчСниС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ абстракции, описанной ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ классом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свойства, обСспСчиваСмыС эффСктивным классом. Один класс абстрактСн, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - эффСктивСн.

Рис. 15.11.  Π‘Ρ€Π°ΠΊ ΠΏΠΎ расчСту

Рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стСка, Π·Π°Π΄Π°Π½Π½ΡƒΡŽ массивом. Π£ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ классы для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ стСков ΠΈ массивов Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (абстрактный STACK ΠΈ эффСктивный ARRAY, см. ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ Π»Π΅ΠΊΡ†ΠΈΠΈ). Π›ΡƒΡ‡ΡˆΠΈΠΉ способ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса ARRAYED_STACK (стСк, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ массивом) - ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ наслСдника классов STACK ΠΈ ARRAY. Π­Ρ‚ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Π²Π΅Ρ€Π½ΠΎ: стСк-массив ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ являСтся стСком (с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°) ΠΈ массивом (с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ поставщика). Π’ΠΎΡ‚ описаниС класса: