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

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

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

perimeter: REAL is

-- Π‘ΡƒΠΌΠΌΠ° Π΄Π»ΠΈΠ½ Ρ€Π΅Π±Π΅Ρ€

local

this, previous: POINT

do

from

vertices.start; this := vertices.item

check not vertices.after end -- БлСдствиС условия at_least_three

until

vertices.is_last

loop

previous := this

vertices.forth

this := vertices.item

Result := Result + this.distance (previous)

end

Result := Result + this.distance (vertices.first)

end



Π’ этом Ρ†ΠΈΠΊΠ»Π΅ просто ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ сосСдними Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ. Ѐункция distance Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² классС POINT. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Result, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. Из класса LINKED_LIST ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: first Π΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка, start сдвигаСт курсор, Π½Π° этот ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, forth ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ, item Π²Ρ‹Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠΎΠ΄ курсором, is_last опрСдСляСт, являСтся Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт послСдним, after ΡƒΠ·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ курсор оказался Π·Π° послСдним элСмСнтом. Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ check ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ at_least_three обСспСчиваСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°. Он стартуСт Π² состоянии not after, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ элСмСнт vertices.item ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Допустимо ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ forth ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Π² состояниС, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° is_last.

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ трСбуСтся Π½ΠΎΠ²Ρ‹ΠΉ класс, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ. Но ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΈ Ρƒ Π½ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚: ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ, ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° экран. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ряд спСцифичСских ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ), ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ свойства (число Π²Π΅Ρ€ΡˆΠΈΠ½ Ρ€Π°Π²Π½ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ, Π° ΡƒΠ³Π»Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ прямыми) ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (вычислСниС ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅).

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Ρ‚Π°ΠΊΠΎΠΉ смСси ΠΎΠ±Ρ‰ΠΈΡ… ΠΈ спСцифичСских ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² класс RECTANGLE ΠΊΠ°ΠΊ наслСдника (heir) класса POLYGON. ΠŸΡ€ΠΈ этом всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ класса POLYGON, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ (parent) класса RECTANGLE, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΈ ΠΊ классу-наслСднику. Для этого достаточно Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² RECTANGLE ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ наслСдования (inheritance clause):


class RECTANGLE inherit

POLYGON

feature

... ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, спСцифичныС для ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ...

end



Π’ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ feature класса-наслСдника ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ родитСля Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ: ΠΎΠ½ΠΈ автоматичСски доступны благодаря ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎ наслСдовании. Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ лишь ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, спСцифичныС для наслСдника. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ diagonal, Π° Ρ‚Π°ΠΊΠΆΠ΅ пСрСопрСдСляСмыС наслСдуСмыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

Вторая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° для Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ имСлся Ρƒ родитСля, Π½ΠΎ Ρƒ наслСдника Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ описан Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²ΠΈΠ΄Π΅. Рассмотрим ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ perimeter. Для ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивно: Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π΄Π»ΠΈΠ½Ρ‹ сторон, достаточно ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ сумму Π΄Π»ΠΈΠ½ Π΄Π²ΡƒΡ… сторон. НаслСдник, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ родитСля, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ± этом Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ наслСдования, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ redefine:


class RECTANGLE inherit

POLYGON

redefine perimeter end

feature

...

end



Π­Ρ‚ΠΎ позволяСт Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ feature класса RECTANGLE Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° perimeter, которая Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Π΅Π³ΠΎ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΠ· класса POLYGON. Если Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ объявлСниС redefine, Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ объявлСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° perimeter срСди Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² класса RECTANGLE ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ RECTANGLE ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ perimeter, унаслСдованный ΠΎΡ‚ POLYGON, Ρ‚.Π΅. Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° окаТСтся Π΄Π²Π° опрСдСлСния.

Класс RECTANGLE выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


indexing

description: "ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, - ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ случай ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²"

class RECTANGLE inherit

POLYGON

redefine perimeter end

creation

make

feature -- Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

make (center: POINT; s1, s2, angle: REAL) is

-- Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π² center, Π΄Π»ΠΈΠ½Ρ‹ сторон

-- s1 ΠΈ s2 ΠΈ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ angle.

do ... end

feature -- Access

side1, side2: REAL

-- Π”Π»ΠΈΠ½Ρ‹ Π΄Π²ΡƒΡ… сторон

diagonal: REAL

-- Π”Π»ΠΈΠ½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ

perimeter: REAL is

-- Π‘ΡƒΠΌΠΌΠ° Π΄Π»ΠΈΠ½ сторон

-- (ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ вСрсии ΠΈΠ· POLYGON)

do

Result := 2 S (side1 + side2)

end

invariant

four_sides: count = 4


first_side: (vertices.i_th (1)).distance (vertices.i_th (2)) = side1

second_side: (vertices.i_th (2)).distance (vertices.i_th (3)) = side2

third_side: (vertices.i_th (3)).distance (vertices.i_th (4)) = side1

fourth_side: (vertices.i_th (4)).distance (vertices.i_th (1)) = side2

end



Для списка i_th(i) Π΄Π°Π΅Ρ‚ элСмСнт Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ i ( i-ΠΉ элСмСнт, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ это имя запроса).

Π’Π°ΠΊ ΠΊΠ°ΠΊ RECTANGLE являСтся наслСдником класса POLYGON, Ρ‚ΠΎ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΈ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ классу: vertices, rotate, translate, perimeter (Π² ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅) ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅. Π˜Ρ… Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ класса.

Π­Ρ‚ΠΎΡ‚ процСсс Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π΅Π½: всякий класс, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ наслСдником RECTANGLE, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SQUARE, Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ всСми ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ класса POLYGON.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ соглашСния ΠΈ тСрминология

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² "наслСдник" ΠΈ "Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ" Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹:

ВСрминология наслСдования

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ класса C - это любой класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт C явно ΠΈΠ»ΠΈ нСявно, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈ сам класс C. (Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, это Π»ΠΈΠ±ΠΎ C, Π»ΠΈΠ±ΠΎ, ΠΏΠΎ рСкурсии, ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ наслСдника C).

БобствСнный ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ класса C - это ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ самого C.

ΠŸΡ€Π΅Π΄ΠΎΠΊ C - это Ρ‚Π°ΠΊΠΎΠΉ класс A, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ C являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ. БобствСнный ΠΏΡ€Π΅Π΄ΠΎΠΊ C - это Ρ‚Π°ΠΊΠΎΠΉ класс A, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ C являСтся собствСнным ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ.

Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ "подкласс" ΠΈ "супСркласс", Π½ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·-Π·Π° нСоднозначности.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ тСрминология для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² класса: ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π»ΠΈΠ±ΠΎ являСтся наслСдуСмым (ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π΄ΡˆΠΈΠΌ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ собствСнного ΠΏΡ€Π΅Π΄ΠΊΠ°), Π»ΠΈΠ±ΠΎ нСпосрСдствСнным (Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ классС).

ΠŸΡ€ΠΈ графичСском прСдставлСнии структур ОО-ПО, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ классы ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ эллипсами, связи ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ наслСдования ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… стрСлок. Π’Π΅ΠΌ самым ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ связСй ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ "Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ стрСлками.

Рис. 14.1.  Π‘вязь ΠΏΠΎ наслСдованию

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ отмСчаСтся ++ (это соглашСниС принято Π² Business Object Notation (B.O.N.)).

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

[x]. Всякий экзСмпляр наслСдника ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ экзСмпляр родитСля, Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ Π½Π΅Π²Π΅Ρ€Π½ΠΎ.

[x]. Π’ тСкстС наслСдника всСгда упоминаСтся Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π­Ρ‚ΠΎ, Π½Π° самом Π΄Π΅Π»Π΅, являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ свойством ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π²Ρ‹Ρ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ класс Π½Π΅ "Π·Π½Π°Π΅Ρ‚" списка своих наслСдников ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… собствСнных ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ².

Π₯отя Ρƒ нас Π½Π΅Ρ‚ ТСсткого ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ для достаточно слоТных систСм Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ классов Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ… наслСдования, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ, ΠΏΠΎ возмоТности, ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ класс Π²Ρ‹ΡˆΠ΅ Π΅Π³ΠΎ наслСдника.

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

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