Π Π°Π·Π½ΠΎΠ΅

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΎΠΏ: ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Π£Ρ€ΠΎΠΊ 5 курса «ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python»

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

НапримСр, Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… класса содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄ total, ΠΎΠ΄Π½Π°ΠΊΠΎ инструкции ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊ Π² классС T1 – это ΠΏΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ 10 ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ, Π² T2 – подсчСт Π΄Π»ΠΈΠ½Ρ‹ строки символов. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса примСняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ total, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ инструкции.

class T1:
    def __init__(self):
        self.n = 10
Β 
    def total(self, a):
        return self.n + int(a)
Β 
Β 
class T2:
    def __init__(self):
        self.string = 'Hi'
Β 
    def total(self, a):
        return len(self.string + str(a))
Β 
Β 
t1 = T1()
t2 = T2()
Β 
print(t1.total(35))  # Π’Ρ‹Π²ΠΎΠ΄: 45
print(t2.total(35))  # Π’Ρ‹Π²ΠΎΠ΄: 4

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ ΡƒΠΆΠ΅ наблюдали ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ классами, связанными наслСдованиСм. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ свой ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__() ΠΈΠ»ΠΈ square() ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Какой ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² square() вызываСтся, ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚, зависит ΠΎΡ‚ принадлСТности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡƒ классу.

Однако классы Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ связанны наслСдованиСм. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… элСмСнтов ООП сущСствуСт нСзависимо ΠΎΡ‚ наслСдования. ΠšΠ»Π°ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ родствСнными, Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π΅Π΄ΠΈΠ½Ρ‹Π΅ интСрфСйсы для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов. НапримСр, Ρ€Π°Π·Π½Ρ‹Π΅ классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ способ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Однако ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π΅ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ясным.

Π’ Python срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π”Π²Π° ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ ΡƒΠΆΠ΅ рассмотрСли. Π­Ρ‚ΠΎ __init__() ΠΈ __del__(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π΅Π³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² проявляСтся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ нСзависимо ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π΅Π³ΠΎ участиС Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’ случаС __init()__ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ являСтся созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π½Π° Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ str(), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ функция print().

Если Π²Ρ‹ создадитС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ собствСнного класса, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚Π΅ вывСсти Π΅Π³ΠΎ Π½Π° экран, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ классС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π΅Π³ΠΎ адрСс Π² памяти. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ str() ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ классам Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π° самом Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, Π³Π΄Π΅-Ρ‚ΠΎ Π² супСрклассС, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ нСявно Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.

class A:
    def __init__(self, v1, v2):
        self.field1 = v1
        self.field2 = v2
Β 
Β 
a = A(3, 4)
b = str(a)
print(a)
print(b)

Π’Ρ‹Π²ΠΎΠ΄:

<__main__.A object at 0x7f251ac2f8d0>
<__main__.A object at 0x7f251ac2f8d0>

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ b, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция print() Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ str() нСявным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±ΠΎΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ².

Если ΠΆΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print(), Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ какая-Π½ΠΈΠ±ΡƒΠ΄ΡŒ другая Π±ΠΎΠ»Π΅Π΅ полСзная информация, Ρ‚ΠΎ Π² класс Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ __str__(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ строку, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ функция str(), вызываСмая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ print():

<a name="__DdeLink__7352_2806398899"></a>class A:
    def __init__(self, v1, v2):
        self.field1 = v1
        self.field2 = v2
Β 
    def __str__(self):
        return str(self.field1) + " " + str(self.field2)
Β 
Β 
a = A(3, 4)
b = str(a)
print(a)
print(b)

Π’Ρ‹Π²ΠΎΠ΄:

ΠšΠ°ΠΊΡƒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ строку Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ __str__(), Π΄Π΅Π»ΠΎ дСсятоС. Он Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊ ΠΈΠ· символов:

class Rectangle:
    def __init__(self, width, height, sign):
        self.w = int(width)
        self.h = int(height)
        self.s = str(sign)
    def __str__(self):
        rect = []
        for i in range(self.h): # количСство строк
            rect.append(self.s * self.w) # Π·Π½Π°ΠΊ повторяСтся w Ρ€Π°Π·
        rect = '\n'.join(rect) # ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ список Π² строку
        return rect
Β 
b = Rectangle(10, 3, '*')
print(b)

Π’Ρ‹Π²ΠΎΠ΄:

**********
**********
**********

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° слоТСния

Π’ качСствС практичСской Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слоТСния. Для Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ __add__(). Он вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слоТСния, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ с Π»Π΅Π²ΠΎΠΉ стороны. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ a + b Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° a Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __add__(). ΠžΠ±ΡŠΠ΅ΠΊΡ‚ b ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Ρ‡Π°Ρ‰Π΅ всСго ΠΎΠ½ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ b Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ __add__() Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ – self).

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Π² Python Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ правосторонний ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ слоТСния — __radd__().

Богласно ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ ООП, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __add__() ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. ΠœΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ, Π° «ΠΌΠΎΠ»Ρ‡Π°» Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Допустим, Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ слоТСния Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса.

ΠšΡƒΡ€Ρ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ практичСских Ρ€Π°Π±ΠΎΡ‚ ΠΈ всСми ΡƒΡ€ΠΎΠΊΠ°ΠΌΠΈ: android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, pdf-вСрсия.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Java β€’ Vertex Academy

Данная ΡΡ‚Π°Ρ‚ΡŒΡ:


ΠŸΡ€ΠΈΠ²Π΅Ρ‚! Π­Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП — ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π·Π²ΡƒΡ‡ΠΈΡ‚ ΡƒΡΡ‚Ρ€Π°ΡˆΠ°ΡŽΡ‰Π΅ πŸ™‚

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ — это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ классС ΠΈΠ»ΠΈ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ классов, связанных ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ наслСдования.

Π‘Π»ΠΎΠ²ΠΎ «ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТным — Π½ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ. НуТно просто Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° части ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, Ρ‡Ρ‚ΠΎ имССтся Π² Π²ΠΈΠ΄Ρƒ. ΠŸΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, ΡƒΠΆΠ΅ Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° покаТСтся Π’Π°ΠΌ понятным πŸ™‚

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, Ссли пСрСвСсти, — это Π·Π½Π°Ρ‡ΠΈΡ‚ «ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌ». НапримСр, Π°ΠΊΡ‚Π΅Ρ€ Π² Ρ‚Π΅Π°Ρ‚Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΡΡ‚ΡŒ Π½Π° сСбя ΠΌΠ½ΠΎΠ³ΠΎ Ρ€ΠΎΠ»Π΅ΠΉ — ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ «ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌ».

Π’Π°ΠΊ ΠΆΠ΅Β ΠΈ наш ΠΊΠΎΠ΄ — благодаря ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ ΠΎΠ½ становится Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ, Ρ‡Π΅ΠΌ Π² языках программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ООП.

Π’Π°ΠΊ ΠΎ ΠΊΠ°ΠΊΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ? Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ проявляСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, Π° ΠΏΠΎΡ‚ΠΎΠΌ снова вСрнСмся ΠΊ Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ.

Как проявляСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ Π² Java Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, компилятор Π±Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» это ΠΊΠ°ΠΊ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ значСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚:

  • ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ int
  • Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Β String

Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Β  Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, компилятор Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ это ΠΊΠ°ΠΊ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ:

ΠΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ — это ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. НапримСр, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡ‰Π΅Ρ‚ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΈΠ· числа, Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, sqrt()), Ρ‡Π΅ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ названию Π½Π° этот ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, написанный для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° — Π° Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΈΡ… Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ! ΠžΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ часто этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ„Ρ€Π°Π·ΠΎΠΉ:

Один интСрфСйс — ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ (ΠΎΠ΄ΠΈΠ½ интСрфСйс), ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ смоТСм ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ нСскольким ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Π²Ρ‹ΡˆΠ΅ — нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄Π½ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ — называСтся ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Но это Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΎΠ΄Π½ΠΎΠΌ классС. Но Π±Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ случай — ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² родитСля

Когда ΠΌΡ‹ наслСдуСм ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ класс, ΠΌΡ‹ наслСдуСм ΠΈ всС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Но Ссли Π½Π°ΠΌ хочСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ наслСдуСм, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ всСго-навсСго ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. ΠœΡ‹ Π½Π΅ обязаны, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ для Π½Π°ΡˆΠΈΡ… Π½ΡƒΠΆΠ΄, Π° унаслСдованный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ «ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΌ Π³Ρ€ΡƒΠ·ΠΎΠΌ» Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² нашСм классС.

ИмСнно Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² классС-наслСдникС класс с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ унаслСдовали ΠΎΡ‚ родитСля, ΠΈ называСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ такая структура:

Π’Π²Π΅Ρ€Ρ…Ρƒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов стоит класс Animal. Π•Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ класса — Cat, Dog ΠΈ Cow.

Π£ класса «Animal» Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ «Π³ΠΎΠ»ΠΎΡ» (voice). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран сообщСниС «Π“олос». ЕстСствСнно, Π½ΠΈ собака, Π½ΠΈ кошка Π½Π΅ говорят «Π“олос» πŸ™‚ Они Π³Π°Π²ΠΊΠ°ΡŽΡ‚ ΠΈ ΠΌΡΡƒΠΊΠ°ΡŽΡ‚. БоотвСтствСнно, Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для классов Cat, Dog ΠΈ CowΒ — Ρ‡Ρ‚ΠΎΠ±Ρ‹ кошка мяукала, собака Π³Π°Π²ΠΊΠ°Π»Π°, Π° ΠΊΠΎΡ€ΠΎΠ²Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»Π° «ΠœΡƒΡƒ».

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π² классах-наслСдниках ΠΌΡ‹ пСрСопрСдСляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ voice(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ Π² консоли ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ «ΠœΡΡƒ», «Π“Π°Π²» ΠΈ «ΠœΡƒΡƒ».

  • ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пСрСопрСдСляСм, пишСм «@Override«. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ компилятору, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ — это ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ. ВсС Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄ΠΎΠ΄ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ — это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ способы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ снова посмотрим Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π΄Π°Π²Π°Π»ΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ классС ΠΈΠ»ΠΈ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ классов, связанных ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ наслСдования.

Выглядит понятнСС, ΠΏΡ€Π°Π²Π΄Π°? ΠœΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ:

  • ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ «ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹» Π² ΠΎΠ΄Π½ΠΎΠΌ классС («ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²»)
  • ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса («ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²»).

ВсС это — проявлСния «ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ гибкости» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков благодаря ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ.


НадССмся, наша ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° Π’Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Π°. Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° наши курсы ΠΏΠΎ Java ΠΌΠΎΠΆΠ½ΠΎΒ Ρƒ нас Π½Π° сайтС.

ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² ООП Π½Π° Python

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ всСх
Π½Π° Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΌ Π²Π½Π΅ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ занятии ΠΏΠΎ ООП. И здСсь я Ρ…ΠΎΡ‡Ρƒ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½
вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚ ΠΌΠΎΠΈΡ… подписчиков: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² ООП Π½Π° Python? Если
ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π² Π΄Π²ΡƒΡ… словах Π½Π° этот вопрос, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ языка Python Π΅Π΄ΠΈΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Π½Π΅
особо стало понятнСС? ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π²Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ всСгда, постигнСм ΡΡƒΡ‚ΡŒ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°
Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π’Π½Π°Ρ‡Π°Π»Π΅ я
ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΎΠ΄ΠΈΠ½ нСдостаток, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊ Ρ€Π°Π·
исправляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° класса Rectangle ΠΈ Square:

class Rectangle:
Β Β Β  def __init__(self, w, h):
Β Β Β Β Β Β Β  self.w = w
Β Β Β Β Β Β Β  self.h = h
Β 
Β Β Β  def getPerRect(self):
Β Β Β Β Β Β Β  return 2*(self.w+self.h)
Β 
Β 
class Square:
Β Β Β  def __init__(self, a):
Β Β Β Β Β Β Β  self.a = a
Β 
Β Β Β  def getPerSq(self):
Β Β Β Β Β Β Β  return 4*self.a

И Π² Π½ΠΈΡ…
ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ getPerRect ΠΈ getPerSq для получСния
ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΈΠ³ΡƒΡ€: ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°. Π”Π°Π»Π΅Π΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ
ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляры этих классов ΠΈ вывСсти Π² консоль значСния ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

r1 = Rectangle(1, 2)
r2 = Rectangle(3, 4)
Β 
print(r1.getPerRect(), r2.getPerRect())
Β 
s1 = Square(10)
s2 = Square(20)
Β 
print(s1.getPerSq(), s2.getPerSq())

ВсС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, всС
Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Но, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ:

ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ
Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for ΠΈ Π³Π΄Π΅ Π±Ρ‹ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹:

for g in geom:
Β Β Β  print( g.getPerRect() )

Как Π²Ρ‹
ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠΎΠ³Π΄Π° Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° s1, Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚
ошибка, Ρ‚.ΠΊ. Π² классС Square отсутствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ getPerRect. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, зная,
Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ находятся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Rectangle ΠΈ Square, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹
Π² Ρ†ΠΈΠΊΠ»Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ:

for g in geom:
Β Β Β  if isinstance(g, Rectangle):
Β Β Β Β Β Β Β  print( g.getPerRect() )
Β Β Β  else:
Β Β Β Β Β Β Β  print(g.getPerSq())

и всС
Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Но Ρƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠ°Π»ΠΎ гибкости ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π΅Ρ‰Π΅
одного класса:

class Triangle:
Β Β Β  def __init__(self, a, b, c):
Β Β Β Β Β Β Β  self.a = a
Β Β Β Β Β Β Β  self.b = b
Β Β Β Β Β Β Β  self.c = c
Β 
Β Β Β  def getPerTr(self):
Β Β Β Β Β Β Β  return self.a + self.b + self.c

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ снова
ΠΎΡˆΠΈΠ±ΠΊΡƒ:

t1 = Triangle(1,2,3)
t2 = Triangle(4,5,6)
geom = [r1, r2, s1, s2, t1, t2]

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² Ρ†ΠΈΠΊΠ»Π΅
for ΠΌΠΎΠΆΠ½ΠΎ
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° соотвСтствиС классам Square ΠΈ Triangle, Π½ΠΎ красоты ΠΈ
гибкости нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ это Π½Π΅ придаст. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π· здСсь ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ
ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ называСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ. ΠœΡ‹ договоримся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ
классС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

getPerimetr

Π’ΠΎΠ³Π΄Π° Π² Ρ†ΠΈΠΊΠ»Π΅
Π±ΡƒΠ΄Π΅ΠΌ просто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…
Ρ„ΠΈΠ³ΡƒΡ€:

for g in geom:
Β Β Β  print( g.getPerimetr() )

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Python Β«ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Β»
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса хранится Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ соотвСтствСнно ΠΈΠ· этого класса
Π±Π΅Ρ€Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getPerimetr. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² дСйствии, ΠΊΠΎΠ³Π΄Π° ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ происходит ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅
ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π°Π·Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² языках программирования — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² языках программирования?

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΜΠ·ΠΌ (Π² языках программирования) β€” Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ интСрфСйсом.

Π―Π·Ρ‹ΠΊ программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, Ссли классы с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ спСцификациСй ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽΒ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, рСализация класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π² процСссС наслСдования [1].

ΠšΡ€Π°Ρ‚ΠΊΠΎ смысл ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π·ΠΎΠΉ: «Один интСрфСйс, мноТСство Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉΒ».

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (наряду с абстракциСй, инкапсуляциСй ΠΈ наслСдованиСм).

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ абстрактныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ коэффициСнт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°. ΠžΠ±Ρ‰ΠΈΠ΅ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² систСму, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ β€” интСрфСйс, класс. ΠžΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ внСшнСС ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’Π½Π΅ΡˆΠ½Π΅ ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ проявляСтся ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ сигнатурами (Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²). ВнутрСнняя ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ Π΅ΡΡ‚ΡŒ одинаковая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π•Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ строгих Π·Π°ΠΊΠΎΠ½ΠΎΠ², ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ) называСтся ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Класс гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€ (эллипс, ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для гСомСтричСских трансформаций (смСщСниС, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅).

Класс ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ информация, вводимая ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ сСти, Ρ„Π°ΠΉΠ» (Ссли трСбуСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ исходных тСкстов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ).

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках класс являСтся Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ наслСдования классов. Класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ наслСдуСт сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса-родитСля, Π½ΠΎ рСализация этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ спСцификС класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Π­Ρ‚ΠΎ называСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса-родитСля, ΠΏΡ€ΠΈ этом вмСсто Π½Π΅Π³ΠΎ Π²ΠΎ врСмя исполнСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· классов-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ². Π­Ρ‚ΠΎ называСтся ΠΏΠΎΠ·Π΄Π½ΠΈΠΌ связываниСм.

Класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ сам ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ. Π­Ρ‚ΠΎ позволяСт ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ слоТныС схСмы наслСдования β€” Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½Ρ‹Π΅ ΠΈΠ»ΠΈ сСтСвидныС.

АбстрактныС(ΠΈΠ»ΠΈ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅) ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅(На самом Π΄Π΅Π»Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ языки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ C++, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ абстрактных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС — см. абстрактный дСструктор). Они ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для наслСдования. Π˜Ρ… рСализация Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² классах-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ….

Класс ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов. Π­Ρ‚ΠΎ называСтся мноТСствСнным наслСдованиСм. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС создаёт ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ (Π² C++), ΠΊΠΎΠ³Π΄Π° класс наслСдуСтся ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов-посрСдников, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса (Ρ‚Π°ΠΊ называСмая Β«diamond problemΒ»). Если ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Π² посрСдниках, нСизвСстно, ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ. Π Π΅ΡˆΠ°Π΅Ρ‚ΡΡ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ мноТСствСнного наслСдования для классов ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ мноТСствСнного наслСдования для ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ абстрактных классов (Ρ‚. Π΅. интСрфСйсов) (C#, Delphi, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС (C++).

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ языка ad hoc (Π½Π° основС классов). Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

Π’ случаС парамСтричСского ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° функция Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° для всСх классов ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, функция сортировки ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π° для Π΄Π°Π½Π½Ρ‹Ρ… любого Ρ‚ΠΈΠΏΠ°, Ссли функция сравнСния Π΄Π°Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΠœΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ, ad hoc ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ допускаСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ сортировки функция сравнСния Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ для чисСл, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, списков, Ρ‚.Β Π΅. ΠΎΠ½Π° являСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠΉ.

Π’ Haskell Π΅ΡΡ‚ΡŒ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° классы ΠΈ экзСмпляры (instance), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² ООП. Класс Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опрСдСляСт Π½Π°Π±ΠΎΡ€ ΠΈ сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², экзСмпляр Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΈΡ…. Π’. ΠΎ. автоматичСски ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° мноТСствСнного наслСдования. ΠšΠ»Π°ΡΡΡ‹ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ классу. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ слоТная схСма Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ классов Π² ООП. НСкоторый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ нСскольким классам; класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π» ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ классу, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ нСскольким; Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ экзСмпляр. Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈ мноТСствСнного наслСдования. Π•ΡΡ‚ΡŒ ΠΈ свойства, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² Π² ООП. НапримСр, рСализация списков ΠΊΠ°ΠΊ экзСмпляра класса сравнимых Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ элСмСнты списка Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π»ΠΈ ΠΊ классу сравнимых Π²Π΅Π»ΠΈΡ‡ΠΈΠ½.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Π°ΠΌ, пСрСходящим ΠΎΡ‚ ООП ΠΊ ЀП, слСдуСт Π·Π½Π°Ρ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΡ… систСмы классов. Если Π² ООП класс «привязан» ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Ρ‚.Β Π΅. ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎ Π² ЀП β€” ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ЀП свСдСния ΠΎ принадлСТности ΠΊ классу ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ хранятся Π² полях ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π² частности, позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π² ООП ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΌΠ΅Ρ‚ΠΎΠ΄ слоТСния (чисСл, строк) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π²ΡƒΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

НСявная типизация

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках программирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ruby) примСняСтся Ρ‚Π°ΠΊ называСмая утиная типизация (Π΄Ρ€ΡƒΠ³ΠΈΠ΅ названия: латСнтная, нСявная), которая прСдставляСт собой Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ сигнатурного ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² языкС Python ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ связан с наслСдованиСм.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

БистСма классов Π² ЀП ΠΈ Π² ООП устроСны ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, поэтому ΠΊ ΠΈΡ… ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ слСдуСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ остороТно.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ являСтся довольно обособлСнным свойством языка программирования. НапримСр, классы Π² C++ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ прСпроцСссор для C. Для Haskell ΠΆΠ΅ сущСствуСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ классов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ парамСтричСским ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ.

НСмного ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. НСсмотря Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ различия систСм классов Π² ЀП ΠΈ ООП, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°Π±Π»ΠΈΡ† Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Wikimedia Foundation.
2010.

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

Π² ООП Java с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ

  • Home
  • Testing

      • Back
      • Agile Testing
      • BugZilla
      • Cucumber
      • Database Testing
      • JUnit
      • LoadRunner
      • Π ΡƒΡ‡Π½ΠΎΠ΅ тСстированиС
      • МобильноС тСстированиС
      • Mantis
      • ΠŸΠΎΡ‡Ρ‚Π°Π»ΡŒΠΎΠ½
      • QTP
      • Назад
      • Π¦Π΅Π½Ρ‚Ρ€ качСства (ALM)
      • 000
      • Π¦Π΅Π½Ρ‚Ρ€ качСства (ALM)
      • 000 Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ тСстированиСм

      • TestLink
  • SAP

      • Назад
      • ABAP 90 004
      • APO
      • ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • QM4
      • 9000 HRM
      • Заработная ΠΏΠ»Π°Ρ‚Π°
      • Назад
      • PI / PO
      • PP
      • SD
      • SAPUI5
      • Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ
      • ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ
      • Successfactors
      • Π£Ρ‡Π΅Π±Π½ΠΈΠΊΠΈ SAP

        • Apache
        • AngularJS
        • ASP.Net
        • C
        • C #
        • C ++
        • CodeIgniter
        • Π‘Π£Π‘Π”
        • JavaScript
        • Назад
        • Java
        • JSP
        • Kotlin
        • Linux
        • Linux
        • Kotlin
        • Linux
        • js

        • Perl
        • Назад
        • PHP
        • PL / SQL
        • PostgreSQL
        • Python
        • ReactJS
        • Ruby & Rails
        • Scala
        • SQL
        • 000

        • SQL
        • 000

        • SQL
        • 000

          0003 SQL

          000

        • UML
        • VB.Net
        • VBScript
        • Π’Π΅Π±-слуТбы
        • WPF
    • ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Π΅!

        • Назад
        • БухгалтСрский ΡƒΡ‡Π΅Ρ‚
        • Алгоритмы
        • Android
        • Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½
        • Business Analyst
        • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-сайта
        • CCNA
        • ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ вычислСния
        • 0003 COBOL
        • 000 Compiler
            9000 ВстроСнный

          • 000 9000 Compiler
          • Ethical Hacking
          • Π£Ρ‡Π΅Π±Π½ΠΈΠΊΠΈ ΠΏΠΎ Excel
          • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Go
          • IoT
          • ITIL
          • Jenkins
          • MIS
          • Π‘Π΅Ρ‚ΠΈ
          • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма
          • Назад
          • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠžΠ±Π·ΠΎΡ€Ρ‹
          • Salesforce
          • SEO
          • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния
          • VB A
      • Big Data

          • Назад
          • AWS
          • BigData
          • Cassandra
          • Cognos
          • Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
          • 0003

          • HBOps
          • 0003

          • HBOps
          • MicroStrategy

      .

      oop — ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π² java

      ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

      1. Около
      2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

      3. Для ΠΊΠΎΠΌΠ°Π½Π΄
      1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
        ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

      2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
        Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

      3. Вакансии
        ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

      4. Π’Π°Π»Π°Π½Ρ‚
        НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

      5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
        ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

      6. О компании

      .

      ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Golang — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Go

      Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ β„–. 28 Π² сСрии ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… пособий ΠΏΠΎ Π“ΠΎΠ»Π°Π½Π³Ρƒ.

      ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Go достигаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов. Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, интСрфСйсы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСявно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Go. Π’ΠΈΠΏ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс, Ссли ΠΎΠ½ прСдоставляСт опрСдСлСния для всСх ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π² интСрфСйсС. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ Π² Go достигаСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов.

      ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ с использованиСм интСрфСйса

      БчитаСтся, Ρ‡Ρ‚ΠΎ любой Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса, нСявно Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот интСрфСйс.

      ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° interface ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ интСрфСйс. Π­Ρ‚ΠΎ свойство интСрфСйсов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для достиТСния ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π² Go.

      Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ Π² Go с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая рассчитываСт чистый Π΄ΠΎΡ…ΠΎΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. Для простоты ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ эта вообраТаСмая организация ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π° ΠΈΠΌΠ΅Π½Π½ΠΎ. фиксированный счСт ΠΈ врСмя ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» . Чистая ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ рассчитываСтся ΠΏΠΎ суммС Π΄ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΎΡ‚ этих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ этот ΡƒΡ€ΠΎΠΊ, ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°Π»ΡŽΡ‚Π° — Π΄ΠΎΠ»Π»Π°Ρ€Ρ‹, ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с Ρ†Π΅Π½Ρ‚Π°ΠΌΠΈ. Он Π±ΡƒΠ΄Π΅Ρ‚ прСдставлСн с использованиСм int . (Π― Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ https://forum.golangbridge.org/t/what-is-the-proper-golang-equivalent-to-decimal-when-dealing-with-money/413, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ‹. Благодаря АндрСас ΠœΠ°Ρ‚ΡƒΡˆΠ΅ΠΊ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° это.)

      Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ интСрфСйс Π”ΠΎΡ…ΠΎΠ΄ .

        type Income interface {
          Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ () int
          source () строка
      }
        

      Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Income , ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅, содСрТит Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: calculate (), , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄ΠΎΡ…ΠΎΠ΄ ΠΈΠ· источника, ΠΈ source () , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя источника.

      Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ структуру для Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° FixedBilling .

        type FixedBilling struct {
          projectName строка
          biddedAmount int
      }
        

      Π£ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° FixedBilling Π΅ΡΡ‚ΡŒ Π΄Π²Π° поля: projectName , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСт имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈ biddedAmount , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСт собой сумму, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ организация ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»Π° для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

      Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° TimeAndMaterial Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Time ΠΈ Material.

        type TimeAndMaterial struct {
          projectName строка
          noOfHours int
          hourlyRate int
      }
        

      Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° TimeAndMaterial ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»Π΅ΠΉ: projectName , noOfHours ΠΈ hourlyRate .

      Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для этих Ρ‚ΠΈΠΏΠΎΠ² структур, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ фактичСский Π΄ΠΎΡ…ΠΎΠ΄ ΠΈ источник Π΄ΠΎΡ…ΠΎΠ΄Π°.

        func (fb FixedBilling) calculate () int {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ fb.biddedAmount
      }
      
      func (fb FixedBilling) source () string {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ fb.projectName
      }
      
      func (tm TimeAndMaterial) calculate () int {
          return tm.noOfHours * tm.hourlyRate
      }
      
      func (tm TimeAndMaterial) source () string {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ tm.projectName
      }
        

      Π’ случаС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² FixedBilling Π΄ΠΎΡ…ΠΎΠ΄ — это ΠΊΠ°ΠΊ Ρ€Π°Π· сумма, прСдлоТСнная для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ это ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° calculate () Ρ‚ΠΈΠΏΠ° FixedBilling .

      Π’ случаС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² TimeAndMaterial , Π΄ΠΎΡ…ΠΎΠ΄ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ noOfHours ΠΈ hourlyRate .Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ возвращаСтся ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° calculate () с Ρ‚ΠΈΠΏΠΎΠΌ получатСля TimeAndMaterial .

      Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² качСствС источника Π΄ΠΎΡ…ΠΎΠ΄Π° ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° source () .

      ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π΅ структуры FixedBilling ΠΈ TimeAndMaterial ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ опрСдСлСния для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² calculate (), ΠΈ source () интСрфСйса Income , ΠΎΠ±Π΅ структуры Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Income .

      Объявим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ calculateNetIncome , которая рассчитаСт ΠΈ распСчатаСт ΠΎΠ±Ρ‰ΠΈΠΉ Π΄ΠΎΡ…ΠΎΠ΄.

        func calculateNetIncome (ic [] Income) {
          var netincome int = 0
          для _, Π΄ΠΎΡ…ΠΎΠ΄: = Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ic {
              fmt.Printf ("Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚% s = $% d \ n", Π΄ΠΎΡ…ΠΎΠ΄.source (), Π΄ΠΎΡ…ΠΎΠ΄.calculate ())
              чистый Π΄ΠΎΡ…ΠΎΠ΄ + = Π΄ΠΎΡ…ΠΎΠ΄. Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ()
          }
          fmt.Printf ("Чистая ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ = $% d", чистый Π΄ΠΎΡ…ΠΎΠ΄)
      }
        

      ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²Ρ‹ΡˆΠ΅ функция calculateNetIncome ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ интСрфСйсов Income .Он вычисляСт ΠΎΠ±Ρ‰ΠΈΠΉ Π΄ΠΎΡ…ΠΎΠ΄, пСрСбирая срСз ΠΈ вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ calculate () для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π΅Π³ΠΎ элСмСнтов. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ источник Π΄ΠΎΡ…ΠΎΠ΄Π°, вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ source () . Π’ зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° интСрфСйса Income Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ calculate () ΠΈ source () . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ достигли ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ calculateNetIncome .

      Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Ссли организация Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄ источника Π΄ΠΎΡ…ΠΎΠ΄Π°, эта функция ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Π΄ΠΎΡ…ΠΎΠ΄ Π±Π΅Π· измСнСния Π΅Π΄ΠΈΠ½ΠΎΠΉ строчки ΠΊΠΎΠ΄Π° :).

      ЕдинствСнная ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — это основная функция.

        func main () {
          project1: = FixedBilling {projectName: "Project 1", biddedAmount: 5000}
          project2: = FixedBilling {projectName: "Project 2", biddedAmount: 10000}
          project3: = TimeAndMaterial {projectName: "Project 3", noOfHours: 160, hourlyRate: 25}
          yieldStreams: = [] Π”ΠΎΡ…ΠΎΠ΄ {ΠΏΡ€ΠΎΠ΅ΠΊΡ‚1, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚2, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚3}
          CalculateNetIncome (Π΄ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ)
      }
        

      Π’ основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ создали Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: Π΄Π²Π° Ρ‚ΠΈΠΏΠ° FixedBilling ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏΠ° TimeAndMaterial .Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм срСз Ρ‚ΠΈΠΏΠ° Income с этими трСмя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· этих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ интСрфСйс Income , ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ всС Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² срСз Ρ‚ΠΈΠΏΠ° Income . НаконСц, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ calculateNetIncome с этим срСзом, ΠΈ ΠΎΠ½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ источники Π΄ΠΎΡ…ΠΎΠ΄Π° ΠΈ Π΄ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ Π½ΠΈΡ….

      Π’ΠΎΡ‚ полная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для справки.

        ΠΏΠ°ΠΊΠ΅Ρ‚ основной
      
      ΠΈΠΌΠΏΠΎΡ€Ρ‚ (
          "fmt"
      )
      
      type Income interface {
          Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ () int
          source () строка
      }
      
      type FixedBilling struct {
          projectName строка
          biddedAmount int
      }
      
      type TimeAndMaterial struct {
          projectName строка
          noOfHours int
          hourlyRate int
      }
      
      func (fb FixedBilling) calculate () int {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ fb.biddedAmount
      }
      
      func (fb FixedBilling) source () string {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ fb.projectName
      }
      
      func (tm TimeAndMaterial) calculate () int {
          return tm.noOfHours * tm.hourlyRate
      }
      
      func (tm TimeAndMaterial) source () string {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ tm.projectName
      }
      
      func calculateNetIncome (ic [] Income) {
          var netincome int = 0
          для _, Π΄ΠΎΡ…ΠΎΠ΄: = Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ic {
              fmt.Printf ("Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚% s = $% d \ n", Π΄ΠΎΡ…ΠΎΠ΄.source (), Π΄ΠΎΡ…ΠΎΠ΄.calculate ())
              чистый Π΄ΠΎΡ…ΠΎΠ΄ + = Π΄ΠΎΡ…ΠΎΠ΄. Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ()
          }
          fmt.Printf ("Чистая ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ = $% d", чистый Π΄ΠΎΡ…ΠΎΠ΄)
      }
      
      func main () {
          project1: = FixedBilling {projectName: "Project 1", biddedAmount: 5000}
          project2: = FixedBilling {projectName: "Project 2", biddedAmount: 10000}
          project3: = TimeAndMaterial {projectName: "Project 3", noOfHours: 160, hourlyRate: 25}
          yieldStreams: = [] Π”ΠΎΡ…ΠΎΠ΄ {ΠΏΡ€ΠΎΠ΅ΠΊΡ‚1, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚2, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚3}
          CalculateNetIncome (Π΄ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ)
      }
        

      Π‘Π΅Π³ Π½Π° дСтской ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ΅

      Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚

        Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 1 = 5000 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША
      Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 2 = 10000 $
      Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 3 = 4000 $
      Чистая ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ = 19000 $
        

      Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ источника Π΄ΠΎΡ…ΠΎΠ΄Π° ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

      Допустим, организация нашла Π½ΠΎΠ²Ρ‹ΠΉ источник Π΄ΠΎΡ…ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ.Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, насколько просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ этот Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΈ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Π΄ΠΎΡ…ΠΎΠ΄, Π½Π΅ внося Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ calculateNetIncome . Π­Ρ‚ΠΎ становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ благодаря ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ.

      Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏ Advertising ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ calculate (), ΠΈ source () для Ρ‚ΠΈΠΏΠ° Advertising .

        Ρ‚ΠΈΠΏ РСкламная структура {
          adName строка
          CPC int
          noOfClicks int
      }
      
      func (a Advertising) calculate () int {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ.Π¦Π΅Π½Π° Π·Π° ΠΊΠ»ΠΈΠΊ * a.noOfClicks
      }
      
      func (a Advertising) source () string {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ a.adName
      }
        

      Π’ΠΈΠΏ Advertising ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ поля: adName , CPC (Ρ†Π΅Π½Π° Π·Π° ΠΊΠ»ΠΈΠΊ) ΠΈ noOfClicks (количСство ΠΊΠ»ΠΈΠΊΠΎΠ²). ΠžΠ±Ρ‰ΠΈΠΉ Π΄ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ — это ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ CPC ΠΈ noOfClicks .

      Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ main , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ этот Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΡ…ΠΎΠ΄ΠΎΠ².

        func main () {
          project1: = FixedBilling {projectName: "Project 1", biddedAmount: 5000}
          project2: = FixedBilling {projectName: "Project 2", biddedAmount: 10000}
          project3: = TimeAndMaterial {projectName: "Project 3", noOfHours: 160, hourlyRate: 25}
          bannerAd: = Π Π΅ΠΊΠ»Π°ΠΌΠ° {adName: "Banner Ad", CPC: 2, noOfClicks: 500}
          popupAd: = Π Π΅ΠΊΠ»Π°ΠΌΠ° {adName: "Popup Ad", CPC: 5, noOfClicks: 750}
          yieldStreams: = [] Π”ΠΎΡ…ΠΎΠ΄ {project1, project2, project3, bannerAd, popupAd}
          CalculateNetIncome (Π΄ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ)
      }
        

      ΠœΡ‹ создали Π΄Π²Π° объявлСния, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: bannerAd ΠΈ popupAd .Π‘Ρ€Π΅Π· yieldStreams Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданных объявлСния.

      Π’ΠΎΡ‚ полная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° послС добавлСния Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹.

        ΠΏΠ°ΠΊΠ΅Ρ‚ основной
      
      ΠΈΠΌΠΏΠΎΡ€Ρ‚ (
          "fmt"
      )
      
      type Income interface {
          Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ () int
          source () строка
      }
      
      type FixedBilling struct {
          projectName строка
          biddedAmount int
      }
      
      type TimeAndMaterial struct {
          projectName строка
          noOfHours int
          hourlyRate int
      }
      
      type Advertising struct {
          adName строка
          CPC int
          noOfClicks int
      }
      
      func (fb FixedBilling) calculate () int {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ fb.biddedAmount
      }
      
      func (fb FixedBilling) source () string {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ fb.projectName
      }
      
      func (tm TimeAndMaterial) calculate () int {
          return tm.noOfHours * tm.hourlyRate
      }
      
      func (tm TimeAndMaterial) source () string {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ tm.projectName
      }
      
      func (a Advertising) calculate () int {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ a.CPC * a.noOfClicks
      }
      
      func (a Advertising) source () string {
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ a.adName
      }
      func calculateNetIncome (ic [] Income) {
          var netincome int = 0
          для _, Π΄ΠΎΡ…ΠΎΠ΄: = Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ic {
              fmt.Printf ("Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚% s = $% d \ n", Π΄ΠΎΡ…ΠΎΠ΄.source (), Π΄ΠΎΡ…ΠΎΠ΄.calculate ())
              чистый Π΄ΠΎΡ…ΠΎΠ΄ + = Π΄ΠΎΡ…ΠΎΠ΄. Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ()
          }
          fmt.Printf ("Чистая ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ = $% d", чистый Π΄ΠΎΡ…ΠΎΠ΄)
      }
      
      func main () {
          project1: = FixedBilling {projectName: "Project 1", biddedAmount: 5000}
          project2: = FixedBilling {projectName: "Project 2", biddedAmount: 10000}
          project3: = TimeAndMaterial {projectName: "Project 3", noOfHours: 160, hourlyRate: 25}
          bannerAd: = Π Π΅ΠΊΠ»Π°ΠΌΠ° {adName: "Banner Ad", CPC: 2, noOfClicks: 500}
          popupAd: = Π Π΅ΠΊΠ»Π°ΠΌΠ° {adName: "Popup Ad", CPC: 5, noOfClicks: 750}
          yieldStreams: = [] Π”ΠΎΡ…ΠΎΠ΄ {project1, project2, project3, bannerAd, popupAd}
          CalculateNetIncome (Π΄ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ)
      }
        

      Π‘Π΅Π³ Π½Π° дСтской ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ΅

      Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚

        Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 1 = 5000 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША
      Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 2 = 10000 $
      Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 3 = 4000 $
      Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ Π±Π°Π½Π½Π΅Ρ€Π½ΠΎΠΉ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ = 1000 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША.
      Π”ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ = 3750 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША.
      Чистая ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ = 23750 $
        

      Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ внСсли Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ calculateNetIncome , хотя Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΡ…ΠΎΠ΄ΠΎΠ².ΠŸΡ€ΠΎΡΡ‚ΠΎ это сработало ΠΈΠ·-Π·Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Advertising Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» интСрфСйс Income , ΠΌΡ‹ смогли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² срСз yieldStreams . Ѐункция calculateNetIncome Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ calculate () ΠΈ source () Ρ‚ΠΈΠΏΠ° Advertising .

      На этом ΠΌΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ этого ΡƒΡ€ΠΎΠΊΠ°. Π₯ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ дня.

      Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ руководство — Defer

      .

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *