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

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

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

НаслСдованиС ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°

Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса RECTANGLE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Π±Ρ‹, Ρ‡Ρ‚ΠΎ число сторон ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Ρ€Π°Π²Π½ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ ΠΈ Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΠ½Ρ‹ сторон ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π²Π½Ρ‹ side1, side2, side1 ΠΈ side2.

Π£ класса POLYGON Ρ‚Π°ΠΊΠΆΠ΅ имССтся ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈ ΠΊ Π΅Π³ΠΎ наслСднику:

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ наслСдования ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°

Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса являСтся ΠΊΠΎΠ½ΡŠΡŽΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ· Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° invariant ΠΈ свойств ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ (Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ).

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ свои Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ, Ρ‚ΠΎ это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ рСкурсивно: Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса получаСтся ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡŠΡŽΠ½ΠΊΡ†ΠΈΡ собствСнного ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² классов всСх Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠΎΠ².

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… характСристик наслСдования: ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ B наслСдуСт A - это ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр B являСтся Ρ‚Π°ΠΊΠΆΠ΅ экзСмпляром A. ВслСдствиС этого всякоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ цСлостности, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠ΅ ΠΊ экзСмплярам A, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΈ ΠΊ экзСмплярам B.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (at_least_three) ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° POLYGON ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ число сторон Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‚Ρ€Π΅Ρ…, ΠΎΠ½ΠΎ являСтся слСдствиСм прСдлоТСния four_sides ΠΈΠ· ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса RECTANGLE, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сторон Π±Ρ‹Π»ΠΎ Ρ€ΠΎΠ²Π½ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅.

НаслСдованиС ΠΈ конструкторы

Π Π°Π½Π΅Π΅ Π½Π΅ показанная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания (конструктор) для класса POLYGON ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄


make_polygon (vl: LINKED_LIST [POINT]) is

-- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌ ΠΈΠ· vl.

require

vl.count >= 3

do

...Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ прСдставлСния ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ элСмСнтам ΠΈΠ· vl ...

ensure

-- vertices ΠΈ vl состоят ΠΈΠ· ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… элСмСнтов (это ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ

Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ)

end



Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π±Π΅Ρ€Π΅Ρ‚ список Ρ‚ΠΎΡ‡Π΅ΠΊ, содСрТащий ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Ρ‚Ρ€ΠΈ элСмСнта, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ для создания ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

Π•ΠΉ Π΄Π°Π½ΠΎ собствСнноС имя make_polygon, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½ ΠΏΡ€ΠΈ Π΅Π΅ наслСдовании классом RECTANGLE, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ имССтся собствСнная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания make. ΠœΡ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ создания класса POLYGON стандартноС имя make, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎ наслСдовании класса RECTANGLE, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ коллизию ΠΈΠΌΠ΅Π½.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания класса RECTANGLE ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: Ρ‚ΠΎΡ‡ΠΊΡƒ, ΡΠ»ΡƒΠΆΠ°Ρ‰ΡƒΡŽ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ, Π΄Π»ΠΈΠ½Ρ‹ Π΄Π²ΡƒΡ… сторон ΠΈ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ vertices ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌ, поэтому ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания для RECTANGLE создаСт список Π²Π΅Ρ€ΡˆΠΈΠ½ vertices (Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΡƒΠ³Π»Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ, Π΄Π»ΠΈΠ½Π°ΠΌ сторон ΠΈ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ).

ΠžΠ±Ρ‰Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания для ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½Π° ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ списки ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… элСмСнтов, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΡ… ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ класса RECTANGLE. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания для ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π΅ годится для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π΄Π΅Π»ΠΎ: ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания родитСля Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для наслСдника. НСльзя Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ.

НапримСр, Ссли Ρƒ наслСдника ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ создания Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, для Ρ‡Π΅Π³ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. ΠžΡ‚ΡΡŽΠ΄Π° ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ наслСдования конструктора

ΠŸΡ€ΠΈ наслСдовании свойство ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π±Ρ‹Ρ‚ΡŒ конструктором Π½Π΅ сохраняСтся.

НаслСдуСмая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания всС Π΅Ρ‰Π΅ доступна Π² наслСдникС, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ родитСля, Π½ΠΎ ΠΎΠ½Π° Π½Π΅ сохраняСт статус конструктора. Π­Ρ‚ΠΈΠΌ статусом ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, пСрСчислСнныС Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ creation наслСдника.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ конструктор ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ для наслСдника. Π’ΠΎΠ³Π΄Π° Π΅Π³ΠΎ просто Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ creation:


class B inherit

A

creation

make

feature

...



Π³Π΄Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° make наслСдуСтся Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΡ‚ класса A, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π° Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ creation.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ

Π’ ΠΊΠΎΠ½Ρ†Π΅ обсуТдСния ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ POLYGON-RECTANGLE Π² контСкстС Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€.

Рис. 14.2.  Π˜Π΅Ρ€Π°Ρ€Ρ…ия Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΈΠ³ΡƒΡ€

Π€ΠΈΠ³ΡƒΡ€Ρ‹ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹Π΅ ΠΈ Π½Π΅Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΊΡ€ΠΎΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° являСтся Ρ‚Π°ΠΊΠΆΠ΅ эллипс, Π° частным случаСм эллипса являСтся ΠΊΡ€ΡƒΠ³.

Рядом с классами ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΈΡ… Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π‘ΠΈΠΌΠ²ΠΎΠ» "++" ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ", Π° символы "+" ΠΈ "*" Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Ρ‹ Π΄Π°Π»Π΅Π΅.

Π Π°Π½Π΅Π΅ для простоты RECTANGLE Π±Ρ‹Π» наслСдником класса POLYGON. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ указанная классификация основана Π½Π° числС Π²Π΅Ρ€ΡˆΠΈΠ½, Ρ‚ΠΎ прСдставляСтся Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ ввСсти ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ класс QUADRANGLE для Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‡Ρ‚ΠΎ ΠΈ классы TRIANGLE, PENTAGON ΠΈ Ρ‚. ΠΏ. Π’ΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ diagonal (диагональ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ класса QUADRANGLE.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ класс SQUARE, наслСдник класса RECTANGLE, характСризуСтся ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ side1 = side2. Аналогично, Ρƒ эллипса ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π° фокуса, Π° Ρƒ ΠΊΡ€ΡƒΠ³Π° ΠΎΠ½ΠΈ ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½, Ρ‡Ρ‚ΠΎ опрСдСляСт ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса CIRCLE: equal (focus1 = focus2).

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

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

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ присоСдинСниС

"ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ" ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ нСсколькими Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ. Π’ ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ нСсколькими Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ сущности (элСмСнты структур Π΄Π°Π½Π½Ρ‹Ρ…), способныС Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Ρ‚ΠΎ контролируСтся статичСскими объявлСниями.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ для структуры наслСдования Π½Π° рисункС Π²Π²Π΅Ρ€Ρ…Ρƒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сущности:


p: POLYGON; r: RECTANGLE; t: TRIANGLE



Π’ΠΎΠ³Π΄Π° допустимы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ присваивания:


p := r

p := t



Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ Π² качСствС значСния сущности, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС, ΠΈ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΡƒΡŽ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ - Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ.

Π’Π°ΠΊΠΈΠ΅ присваивания, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΈΠΏ источника (ΠΏΡ€Π°Π²ΠΎΠΉ части) ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Ρ†Π΅Π»ΠΈ (Π»Π΅Π²ΠΎΠΉ части), Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ присваиваниями. Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, входящая Π² ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ присваиваниС слСва (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это p), являСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ.

Π”ΠΎ ввСдСния наслСдования всС присваивания Π±Ρ‹Π»ΠΈ ΠΌΠΎΠ½ΠΎΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ (Π½Π΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ): ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ Ρ‚ΠΎΡ‡ΠΊΠ΅, ΠΊΠ½ΠΈΠ³Ρƒ ΠΊΠ½ΠΈΠ³Π΅, счСт счСту. Π‘ появлСниСм ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… дСйствий становится большС.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ присваивания Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ структура наслСдования позволяСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ экзСмпляр класса RECTANGLE ΠΈΠ»ΠΈ TRIANGLE ΠΊΠ°ΠΊ экзСмпляр класса POLYGON. ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Ρ‚ΠΈΠΏ источника согласован с Ρ‚ΠΈΠΏΠΎΠΌ Ρ†Π΅Π»ΠΈ. Π’ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ присваиваниС нСдопустимо, Ρ‚.Π΅. Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ r := p. ВскорС это Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

ΠšΡ€ΠΎΠΌΠ΅ присваивания, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π²Ρ‹Π·ΠΎΠ²Π°Ρ… Π²ΠΈΠ΄Π° f (r) ΠΈΠ»ΠΈ f (t) ΠΏΡ€ΠΈ условии объявлСнии ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° f Π² Π²ΠΈΠ΄Π΅:


f (p: POLYGON) is do ... end



Напомним, Ρ‡Ρ‚ΠΎ присваиваниС ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ сСмантику, ΠΈ ΠΎΠ±Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ присоСдинСниСм (attachment). Когда источник ΠΈ Ρ†Π΅Π»ΡŒ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΌΠΎΠΆΠ½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΌ (polymorphic) присоСдинСнии.

Π§Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ происходит ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΌ присоСдинСнии?

ВсС сущности, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… присваиваний, ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ ссылок: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ значСниями p, r ΠΈ t ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ присваивания p := r являСтся просто Π½ΠΎΠ²ΠΎΠ΅ присоСдинСниС ссылки.