Π Π°Π·Π½ΠΎΠ΅

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ c: C# ΠΈ .NET | ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

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

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π£Ρ€ΠΎΠΊ 2 курса «ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python»

Π’ языкС программирования Python классы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции class, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ имя класса, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ставится Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅, Π΄Π°Π»Π΅Π΅ с Π½ΠΎΠ²ΠΎΠΉ строки ΠΈ с отступом рСализуСтся Ρ‚Π΅Π»ΠΎ класса:

class ИмяКласса:
    ΠΊΠΎΠ΄_Ρ‚Π΅Π»Π°_класса

Если класс являСтся Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ, Ρ‚ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках послС ΠΈΠΌΠ΅Π½ΠΈ класса.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° класса ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΈ этом послС ΠΈΠΌΠ΅Π½ΠΈ класса ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ставятся скобки:

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

имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ = ИмяКласса()

Π’ послСдствии ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π½ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ «ΠΏΡƒΡΡ‚ΠΎΠ³ΠΎ» класса ΠΈ Π΄Π²ΡƒΡ… созданных Π½Π° Π΅Π³ΠΎ основС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

>>> class A:
...     pass
... 
>>> a = A()
>>> b = A()

Класс ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

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

>>> class B:
...     n = 5
...     def adder(v):
...             return v + B.n
... 
>>> B.n
5
>>> B.adder(4)
9

Однако Π² случаС классов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ иная тСрминология. ΠŸΡƒΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ этого класса. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠΌΠ΅Π½Π° n ΠΈ adder – это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ класса B. Атрибуты-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ полями ΠΈΠ»ΠΈ свойствами. Бвойством являСтся n. Атрибуты-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π² классС B являСтся adder. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² классС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ.

Класс ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ класс позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ adder():

>>> l = B()
>>> l.n
5
>>> l.adder(100)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: adder() takes 1 positional 
argument but 2 were given

Π’ сообщСнии ΠΎΠ± ошибкС говорится, Ρ‡Ρ‚ΠΎ adder() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π° Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π΄Π²Π°. ΠžΡ‚ΠΊΡƒΠ΄Π° ΠΌΠΎΠ³ Π²Π·ΡΡ‚ΡŒΡΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ссли Π² скобках Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ число 100?

На самом Π΄Π΅Π»Π΅ классы – это Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Они ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ своими особСнностями. Класс создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Π³ΠΎ наслСдниками. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅Ρ‚ собствСнного поля n, Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡ‰Π΅Ρ‚ Π΅Π³ΠΎ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² классС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΌΡ‹ добавляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΠΎΠ»Π΅ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ°ΠΊ Π² классС, Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ пСрСопрСдСляСт, ΠΏΠΎΠ»Π΅ класса:

>>> l. n = 10
>>> l.n
10
>>> B.n
5

Π—Π΄Π΅ΡΡŒ l.n ΠΈ B.n – это Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ΠŸΠ΅Ρ€Π²Π°Ρ находится Π² пространствС ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° l. Вторая – Π² пространствС класса B. Если Π±Ρ‹ ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ n ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ l, Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Ρ‹ поднялся Π²Ρ‹ΡˆΠ΅ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ наслСдования ΠΈ ΠΏΡ€ΠΈΡˆΠ΅Π» Π±Ρ‹ Π² класс, Π³Π΄Π΅ Π±Ρ‹ ΠΈ нашСл это ΠΏΠΎΠ»Π΅.

Π§Ρ‚ΠΎ касаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° l Π½Π΅Ρ‚ своСго собствСнного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° adder, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ ищСтся Π² классС B.

Однако Π² случаС с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π½Π΅ Ρ‚Π°ΠΊ всС просто, ΠΊΠ°ΠΊ с полями. Π’ Python ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ класса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, B.meth()) ΠΈ ΠΎΡ‚ экзСмпляра этого класса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, l.meth()), вызываСтся ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π’ послСднСм случаС l.meth() Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎ для нас прСобразуСтся Π² B.meth(l).

Но Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ meth() ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π° ΠΎΠ½ΠΈ Π² Π½Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ, это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС:

>>> class A:
. ..     def meth():
...             print(1)
... 
>>> a = A()
>>> a.meth()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: meth() takes 0 positional arguments 
but 1 was given
>>> A.meth()
1

Π—Π°Ρ‡Π΅ΠΌ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ экзСмпляры? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для этого ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ – для измСнСния свойств ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². А всС экзСмпляры Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса – это Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, со своими свойствами, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ссылку Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ экзСмпляр, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΅ΠΌΡƒ придСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ экзСмпляр, это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ примСняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ l.adder(100) выполняСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. Π˜Ρ‰Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ adder() Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° l. НС Π½Π°Ρ…ΠΎΠΆΡƒ.

  2. Π’ΠΎΠ³Π΄Π° ΠΈΠ΄Ρƒ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² класс B, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ создал ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ l.

  3. Π—Π΄Π΅ΡΡŒ Π½Π°Ρ…ΠΎΠΆΡƒ искомый ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠŸΠ΅Ρ€Π΅Π΄Π°ΡŽ Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² скобках.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ l.adder(100) прСобразуСтся Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ B.adder(l, 100).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ попытался ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ adder() класса B Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ l ΠΈ число 100. Но ΠΌΡ‹ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ adder() Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π’ Python опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ принятиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠ°ΠΊ само собой ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌΠΎΠ΅. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ явно.

По соглашСнию Π² Python для ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ имя self. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ adder(), Ссли ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹:

>>> class B:
...     n = 5
...     def adder(self, v):
...             return v + self.n
... 

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ self связываСтся с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ Ρ‡Π΅Ρ€Π΅Π· эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Когда этот ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ примСняСтся ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Ρ‚ΠΎ self свяТСтся ΡƒΠΆΠ΅ с этим Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΈ Ρ‡Π΅Ρ€Π΅Π· эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ свойства.

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

>>> l = B()
>>> m = B()
>>> l.n = 10
>>> l.adder(3)
13
>>> m.adder(4)
9

Π—Π΄Π΅ΡΡŒ ΠΎΡ‚ класса B ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° – l ΠΈ m. Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° l заводится собствСнноС ΠΏΠΎΠ»Π΅ n. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ m, Π·Π° Π½Π΅ΠΈΠΌΠ΅Π½ΠΈΠ΅ΠΌ собствСнного, наслСдуСт n ΠΎΡ‚ класса B. МоТно Π² этом ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ² соотвСтствиС:

>>> m.n is B.n
True
>>> l.n is B.n
False

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ adder() Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ self.n – это ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ свойству n, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ наслСдования ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ.

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

ИзмСнСниС ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π’ Python ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, унаслСдованныС ΠΎΡ‚ класса, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² классС:

>>> l.test = "hi"
>>> B.test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'B' has no 
attribute 'test'
>>> l.test
'hi'

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

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ принято ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ полям, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡ… значСния, ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

>>> class User:
...     def setName(self, n):
...             self.name = n
...     def getName(self):
. ..             try:
...                     return self.name
...             except:
...                     print("No name")
... 
>>> first = User()
>>> second = User()
>>> first.setName("Bob")
>>> first.getName()
'Bob'
>>> second.getName()
No name

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ сСттСрами (set – ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ) ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Π°ΠΌΠΈ (get – ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ).

Атрибут __dict__

Π’ Python Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ встроСнныС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. ΠœΡ‹ ΠΈΡ… Π½Π΅ опрСдСляСм, Π½ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ. Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° являСтся свойство __dict__. Π•Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΡŽΡ‡ΠΈ – это ΠΈΠΌΠ΅Π½Π° свойств экзСмпляра, Π° значСния – Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ значСния свойств.

>>> class B:
...     n = 5
...     def adder(self, v):
...             return v + self.n
... 
>>> w = B()
>>> w.__dict__
{}
>>> w.n = 8
>>> w.__dict__
{'n': 8}

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ экзСмпляра класса B сначала Π½Π΅Ρ‚ собствСнных Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Бвойство n ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ adder – это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-класса, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-экзСмпляра, созданного ΠΎΡ‚ этого класса. Π›ΠΈΡˆΡŒ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ выполняСм присваиваниС Π½ΠΎΠ²ΠΎΠΌΡƒ полю n экзСмпляра, Ρƒ Π½Π΅Π³ΠΎ появляСтся собствСнноС свойство, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ наблюдаСм Ρ‡Π΅Ρ€Π΅Π· ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ __dict__.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ свойства экзСмпляра ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ класса. Π­Ρ‚ΠΎ происходит Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… классах ΠΏΡƒΡ‚Π΅ΠΌ присваиваниС Ρ‡Π΅Ρ€Π΅Π· self. НапримСр, self.n = 10.

Атрибут __dict__ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для просмотра всСх Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ свойства, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… значСния.

>>> w.__dict__['m'] = 100
>>> w.__dict__
{'n': 8, 'm': 100}
>>> w.m
100

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ описанию. Π•ΡΡ‚ΡŒ класс «Π’ΠΎΠΈΠ½». ΠžΡ‚ Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° экзСмпляра-ΡŽΠ½ΠΈΡ‚Π°. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ устанавливаСтся Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ Π² 100 ΠΎΡ‡ΠΊΠΎΠ². Π’ случайном порядкС ΠΎΠ½ΠΈ Π±ΡŒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π’ΠΎΡ‚, ΠΊΡ‚ΠΎ Π±ΡŒΠ΅Ρ‚, Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π½Π΅ тСряСт. Π£ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³ΠΎ Π±ΡŒΡŽΡ‚, ΠΎΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 20 ΠΎΡ‡ΠΊΠΎΠ² ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ΄Π°Ρ€Π°. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ΄Π°Ρ€Π° Π½Π°Π΄ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСниС, ΠΊΠ°ΠΊΠΎΠΉ ΡŽΠ½ΠΈΡ‚ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Π», ΠΈ сколько Ρƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ° ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ заканчиваСтся рСсурс Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ сообщСниСм ΠΎ Ρ‚ΠΎΠΌ, ΠΊΡ‚ΠΎ ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π» ΠΏΠΎΠ±Π΅Π΄Ρƒ.

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

БСгодня ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² python.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) β€” ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ основными концСпциями ΡΠ²Π»ΡΡŽΡ‚ΡΡ понятия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ классов.

Класс β€” Ρ‚ΠΈΠΏ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ устройство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠ±ΡŠΠ΅ΠΊΡ‚ β€” это экзСмпляр класса. Класс ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠΎΠΌ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Python соотвСтствуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Π’ python всё являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ — ΠΈ строки, ΠΈ списки, ΠΈ словари, ΠΈ всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅.

Но возмоТности ООП Π² python этим Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… (класс), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² Π½Ρ‘ΠΌ свои ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π­Ρ‚ΠΎ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ — ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ встроСнными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Однако ООП ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ долгосрочной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСсколькими людьми, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ собствСнно ΠΊ написанию своих классов Π½Π° python. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнный класс:

>>> # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚
... class A:
...     pass

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько экзСмпляров этого класса:

>>> a = A()
>>> b = A()
>>> a.arg = 1  # Ρƒ экзСмпляра a появился Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ arg, Ρ€Π°Π²Π½Ρ‹ΠΉ 1
>>> b.arg = 2  # Π° Ρƒ экзСмпляра b - Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ arg, Ρ€Π°Π²Π½Ρ‹ΠΉ 2
>>> print(a.arg)
1
>>> print(b.arg)
2
>>> c = A()
>>> print(c.arg)  # Π° Ρƒ этого экзСмпляра Π½Π΅Ρ‚ arg
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'arg'

ΠšΠ»Π°ΡΡΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ собствСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

>>> class A:
. ..     def g(self): # self - ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, содСрТащий Π² сСбС экзСмпляр
...                  # класса, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°,
...                  # поэтому этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ
...                  # Π²ΠΎ всСх ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… класса.
...         return 'hello world'
...
>>> a = A()
>>> a.g()
'hello world'

И напослСдок Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> class B:
...     arg = 'Python' # ВсС экзСмпляры этого класса Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ arg,
...                    # Ρ€Π°Π²Π½Ρ‹ΠΉ "Python"
...                    # Но впослСдствии ΠΌΡ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
...     def g(self):
...         return self.arg
...
>>> b = B()
>>> b.g()
'Python'
>>> B.g(b)
'Python'
>>> b.arg = 'spam'
>>> b.g()
'spam'

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Rubyβ€” Ruby Rush

БСгодня ΠΌΡ‹ научимся ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Ρ‹, ΡƒΠ·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π² Ruby, напишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-Π΄Π½Π΅Π²Π½ΠΈΠΊ.

План ΡƒΡ€ΠΎΠΊΠ°

  1. Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π² Ruby
  2. Π—Π°ΠΏΠΈΡΡŒ Π² Ρ„Π°ΠΉΠ»Ρ‹, пишСм Π΄Π½Π΅Π²Π½ΠΈΠΊ

ΠšΠ»Π°ΡΡΡ‹! Π’Π΅Π»ΠΈΠΊΠΈΠ΅ ΠΈ ΠΌΠΎΠ³ΡƒΡ‡ΠΈΠ΅!

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΌΡ‹ постоянно ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠ± этом Π² 4-ΠΌ ΡƒΡ€ΠΎΠΊΠ΅: строки, числа, массивы.

Наши ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ хранятся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…: Π½Π΅ΠΊΠΈΡ… ярлыков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

Π’Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π² Ruby Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: строки (String), Ρ†Π΅Π»Ρ‹Π΅ числа (Fixnum), массивы (Array). ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΎΡΠΎΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этих Ρ‚ΠΈΠΏΠΎΠ² Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС: Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ Ρ„Π°ΠΉΠ»Ρ‹ (File), ассоциативныС массивы (Hash), ΠΌΠ΅Ρ‚ΠΊΠΈ (Symbol) Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Time) ΠΈ Π΄Π°Ρ‚Ρ‹ (Date), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ-ΠΌΠ½ΠΎΠ³ΠΎ всСго Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

Π‘ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΌΡ‹ познакомимся Π² этом Π±Π»ΠΎΠΊΠ΅ нашСго курса, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΆΠ΄Ρ‘Ρ‚ нас Π² дальнСйшСм, Π½ΠΎ сСйчас Π²Π°ΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ свой Ρ‚ΠΈΠΏ.

Π’ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ классами. Ruby Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Ruby Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‡Π΅Π½ΡŒ высокоразвитый язык, Ρ‚Π°ΠΌ любая Π·Π°ΠΊΠΎΡ€ΡŽΡ‡ΠΊΠ° β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ класса. Но это Ρ‚Π°ΠΊ, лиричСскоС отступлСниС.

Напомню, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ класс любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Π² Ρƒ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ .class ΠΈ .name.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π°ΠΌ станСт понятно ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ этого ΡƒΡ€ΠΎΠΊΠ°, Π° ΠΏΠΎΠΊΠ° просто Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ

puts "Π― строка".class.name

Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран String, Π°

puts ["А","я","массив","строк"].class.name

Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран Array.

Для Ρ‡Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ классы?

Класс β€” это Π½Π΅ΠΊΠΎΠ΅ описаниС Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ создал ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ²ΠΎΠ·, ΠΎΠ½ ΠΊΠ°ΠΊ-Ρ‚ΠΎ описал (Π½Π° Π±ΡƒΠΌΠ°Π³Π΅, Π² своСм Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π² Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ°Ρ…) Π½ΠΎΠ²ΠΎΠ΅ для Ρ‚ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ понятиС Β«ΠΏΠ°Ρ€ΠΎΠ²ΠΎΠ·Β». Он навСрняка ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» ΠΊΠ°ΠΊΠΈΠΌΠΈ свойствами Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ²ΠΎΠ·, ΠΊΠ°ΠΊ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами ΠΎΠ½ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» Π½ΠΎΠ²ΠΎΠ΅ понятиС, Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Β«ΠΏΠ°Ρ€ΠΎΠ²ΠΎΠ·Β». ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Π±Ρ‹ сказали β€” создал класс ΠŸΠ°Ρ€ΠΎΠ²ΠΎΠ·.

И ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ чСловСчСство Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΠ°Ρ€ΠΎΠ²ΠΎΠ·Ρ‹, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса.

Π’ΠΎ Π΅ΡΡ‚ΡŒ β€” ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ruby Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΈΡ… класс. А для этого Π½ΡƒΠΆΠ½ΠΎ спСрва ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ класс. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ класс это Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ класс Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈ Π³Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΊΠ°ΠΊΠΈΠΌΠΈ свойствами ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ.

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ использовали встроСнныС Π² Ruby классы (строки, числа, массивы) – ΠΌΡ‹ создавали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этих классов ΠΈ с Π½ΠΈΠΌΠΈ ΠΈΠ³Ρ€Π°Π»ΠΈΡΡŒ. Нам Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ эти классы, вСдь ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ описаны Π² самом языкС Ruby.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Π°ΠΌ понадобился Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚Ρƒ Π² языкС? А Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΎΡ‡Π΅Π½ΡŒ часто. Π’ΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой класс.

Π”Π°Π²Π°ΠΉΡ‚Π΅ опрСдСлимся с философским вопросом: «Когда Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ классы». Π‘Ρ€Π°Π·Ρƒ скаТСм, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ это ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ, поэтому Π½Π΅ Π±ΠΎΠΉΡ‚Π΅ΡΡŒ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ классы ΠΊΠΎΠ³Π΄Π° считаСтС это Π½ΡƒΠΆΠ½Ρ‹ΠΌ.

Π ΡƒΠ³Π°Ρ‚ΡŒ вас Π·Π° это Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π”Π°Π΄ΠΈΠΌ лишь нСсколько совСтов, ΠΊΠ°ΠΊ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ситуация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ класса, Π° Π½Π΅ просто ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

1. Если Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² нСзависимый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ со своим собствСнным ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈ свойствами.

Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ, Ρ‡Ρ‚ΠΎ это Π·Π° класс. Если Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° русском языкС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ класса Π² Π²ΠΈΠ΄Π΅ простого слова β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ заслуТиваСт сущСствования.

НапримСр, для нашСй висСлицы ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΡƒΡ€ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс: Β«ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π»ΡŒΡ‰ΠΈΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ занимался всСм, Ρ‡Ρ‚ΠΎ связано с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² консоль.

2. Если Π² языкС программирования Π½Π΅ прСдусмотрСн ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ класс для вашСй Ρ†Π΅Π»ΠΈ.

Π§Π°Ρ‰Π΅ всСго просто ΠΏΠΎΠ³ΡƒΠ³Π»ΠΈΠ², Π²Ρ‹ Π»ΠΈΠ±ΠΎ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΉ класс Π² Ruby, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΉΠΌΡ‘Ρ‚Π΅, ΠΊΠ°ΠΊ Π² этой ситуации ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ люди. Если ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ быстро Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, смСло Π΄Π΅Π»Π°ΠΉΡ‚Π΅ свой класс.

3. Если Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅ΡΡ‚ΡŒ абстрактная модСль Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ.

НапримСр, Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для управлСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, Ρ‚ΠΎ понятно, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ класс ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ класс стСллаТа, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, понадобится класс Π°Π²Ρ‚ΠΎΡ€Π° ΠΈ класс ΠΆΠ°Π½Ρ€Π°.

Π­Ρ‚ΠΎ всё опрСдСляСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ проСктирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом процСссС ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π² 10-ΠΌ ΡƒΡ€ΠΎΠΊΠ΅.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс Π² Ruby?

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, классы солидны. Π’ΠΎ Π΅ΡΡ‚ΡŒ, класс прСдставляСт собой Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΡ‘ΠΌΠ½Ρ‹ΠΉ кусок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Часто случаСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ программисты Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

Иногда классы Π΄Π°ΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² структуру языка, ΠΊΠ°ΠΊ это стало с классами строки String ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Time, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅.

ΠšΠ»Π°ΡΡΡ‹ принято ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ классу β€” свой Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎ сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, классы Π²Π°ΠΆΠ½Ρ‹. ΠœΡ‹ просто-Ρ‚Π°ΠΊΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡΠΌ нашСго курса ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ классы, называя ΠΈΡ… Π°Π±Ρ‹ ΠΊΠ°ΠΊ. ΠŸΡ€ΠΈΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ своСму классу осмыслСнноС Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ посрСди Π½ΠΎΡ‡ΠΈ ΠΏΡ€ΠΎΡΠ½ΡƒΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎ названию класса ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚, хотя Π±Ρ‹ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим класс ΠœΠΎΡΡ‚ (Bridge), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ опишСм Π² Ρ„Π°ΠΉΠ»Π΅ bridge.rb (ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΠΎΠ»ΠΎΠΆΠΈΠ² Π΅Π³ΠΎ Π² Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ c:\rubytut\lesson11):

class Bridge
  # ОписаниС класса
end

Π§Ρ‚ΠΎΠ±Ρ‹ Ruby понял, Ρ‡Ρ‚ΠΎ это Π½Π΅ просто ΠΊΠΎΠ΄, Π° описаниС класса, ΠΌΡ‹ ΠΎΠ±Π΅Ρ€Π½ΡƒΠ»ΠΈ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ class-end. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ всС ΠΈΠΌΠ΅Π½Π° классов Π² Ruby (Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Ρ‚ΠΎΠΆΠ΅) ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с большой Π±ΡƒΠΊΠ²Ρ‹.

Если Π±Ρ‹ класс состоял ΠΈΠ· Π΄Π²ΡƒΡ… слов, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ слово Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ с большой Π±ΡƒΠΊΠ²Ρ‹

class RoadBridge
  ...
end

Π’Π½ΡƒΡ‚Ρ€ΠΈ конструкции class-end ΠΌΡ‹ пишСм ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ нашСго класса. Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции def-end.

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ initialize β€” это Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ конструктор класса, Π½ΠΎ ΠΎΠ± этом Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра класса

Пока ΠΌΡ‹ просто описали класс, Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚. НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ этого класса. Для этого Π½Π°ΠΌ Π² нашСй основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ doroga.rb Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» bridge.rb с описаниСм класса Bridge.

ΠœΡ‹ ΡƒΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ require:

require "bridge.rb"

ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нашСго Π½ΠΎΠ²ΠΎΠ³ΠΎ класса Bridge. Для этого ΠΌΡ‹ пишСм

bridge = Bridge.new

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚! Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово Π² этой записи.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ bridge, ΠΎΠ½ΠΎ написано малСнькими Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, Π·Π½Π°Ρ‡ΠΈΡ‚ это Π½Π΅ класс, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²Π΅Ρ€Π½Π΅Π΅ пСрСмСнная.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°ΠΊ Ρ€Π°Π²Π½ΠΎ (=), ΠΎΠ½ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ bridge Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСмСнная bridge ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π» Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ справа ΠΎΡ‚ Π·Π½Π°ΠΊΠ° Ρ€Π°Π²Π½ΠΎ.

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ нашСго Π½ΠΎΠ²ΠΎΠ³ΠΎ класса Bridge. ΠœΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ описали этот класс Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ bridge.rb ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π΅Π³ΠΎ (Ρ„Π°ΠΉΠ») с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ require.

НаконСц, .new β€” ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Ρƒ нашСго класса ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊ Π±Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ классу: «О Π²Π΅Π»ΠΈΠΊΠΈΠΉ ΠΈ ΠΌΠΎΠ³ΡƒΡ‡ΠΈΠΉ! Π‘ΠΎΠ·Π΄Π°ΠΉ для нас своС Π·Π΅ΠΌΠ½ΠΎΠ΅ Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°!Β»

А класс ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚: Β«Π’Π°ΠΊ ΠΈ Π±Ρ‹Ρ‚ΡŒ, я сТалюсь Π½Π°Π΄ Ρ‚ΠΎΠ±ΠΎΠΉ, смСртный ΠΈ Π΄Π°ΠΌ Ρ‚Π΅Π±Π΅ свой экзСмпляр, Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠΌ условии β€” я сразу ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρƒ этой ΠΊΠΎΠΏΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ initializeΒ».

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ .new Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρƒ Π½Π΅Π³ΠΎ вызываСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΈΠΌΠ΅Π½Π΅ΠΌ initialize. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ называСтся конструктор.

class Bridge
  def initialize
    puts "ΠœΠΎΡΡ‚ создан"
  end
end

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π² классС Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» – Ρ‚ΠΎΠ³Π΄Π° этот Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ создании ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° этого класса. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‚ΠΎΠ³Π΄Π° конструктор Π±ΡƒΠ΄Π΅Ρ‚ пустой, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создастся Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий.

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ класса Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ называСтся экзСмпляр класса. По-английски instance. Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ эти слова, Π²ΠΎΡ‚ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΠ½ΠΈ нСсут свСт озарСния Π² чистом Π²ΠΈΠ΄Π΅! πŸ˜‰

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, всю эту Π΄Ρ€Π°ΠΌΡƒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ классы. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ initialize, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° создаётся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ класса, описываСтся, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ с экзСмпляром класса ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ создан. Если это класс ΠΊΠ½ΠΈΠ³ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ Π³ΠΎΠ΄ издания. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Ρ‘ имя ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ Π°Π²Ρ‚ΠΎΡ€Π° ΠΈ ΠΆΠ°Π½Ρ€. Всё Π½Π° усмотрСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° класса.

Π•Ρ‰Ρ‘ Ρ€Π°Π·, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (экзСмпляр класса) ΠΈ класс β€” это Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ Π²ΠΎΡ‚ ΠΌΡ‹, «Миша» ΠΈ Β«Π’Π°Π΄ΠΈΠΌΒ» β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° Π΅ΡΡ‚ΡŒ Β«Π§Π΅Π»ΠΎΠ²Π΅ΠΊΒ» β€” класс, Π½Π΅ΠΊΠΈΠΉ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·, абстракция для всСх людСй Π½Π° Π—Π΅ΠΌΠ»Π΅ (ΠΈ Π½Π° Π΅Ρ‘ ΠΎΡ€Π±ΠΈΡ‚Π΅, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π³Π°Π»Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ…).

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ создали Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса Bridge ΠΈ сдСлали Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ пСрСмСнная bridge ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Если ΠΌΡ‹ напишСм

puts bridge.class.name

Π’ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ нашСго класса Bridge.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠΌΠ΅Ρ€Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€. ΠŸΡ€ΠΎΡΡŒΠ±Π° всСх слабонСрвных ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒΡΡ. Если всё Π² Ruby это экзСмпляр ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ класса, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Ρ‚Π°ΠΊΠΎΠ΅ этот наш Bridge? Какого Π±ΡƒΠ΄Π΅Ρ‚ Π²Π°ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚! «Какой ΠΆΠ΅ Ρƒ Π½Π΅Π³ΠΎ класс?Β» β€” спроситС Π²Ρ‹. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ сами, Π²Ρ‹ ΡƒΠΆΠ΅ Π½Π΅ малСнькиС.

ИспользованиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса

def open
  puts "ΠœΠΎΡΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ…Π°Ρ‚ΡŒ"
end

Π’Π½ΡƒΡ‚Ρ€ΠΈ нашСго класса Bridge ΠΌΡ‹ написали ΠΌΠ΅Ρ‚ΠΎΠ΄ open. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρƒ самого класса, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ρƒ Π΅Π³ΠΎ экзСмпляра.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Β«ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒΒ» мост (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Bridge), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ пСрСмСнная bridge, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρƒ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ open. Π­Ρ‚ΠΎ дСлаСтся ΠΎΡ‡Π΅Π½ΡŒ просто ΠΈ изящно:

bridge.open

ΠΈ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² консоли наш тСкст открытия моста:

ΠœΠΎΡΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ…Π°Ρ‚ΡŒ!

ИмСнно Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° экзСмпляра класса ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ Ρƒ массива, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ‚ΠΎΠ΄ to_s:

array = [1,2,3]
puts array.to_s

Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² консоль "[1, 2, 3]" β€” ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° array (экзСмпляра класса Array) ΠΌΠ΅Ρ‚ΠΎΠ΄ to_s, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ этот массив Π½ΠΎ ΡƒΠΆΠ΅ ΠΊΠ°ΠΊ строку (экзСмпляр класса String).

Поля класса

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ (ΠΈΠ»ΠΈ Π½Π΅Ρ‚) ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ значСния.

ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ привязаны ΠΊ экзСмпляру класса ΠΈ Π² этих ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π² связи с этим доступны «поля класса» ΠΈΠ»ΠΈ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра класса» ΠΈΠ»ΠΈ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β». Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для хранСния состояния экзСмпляра класса, Π΅Π³ΠΎ свойств.

НапримСр, наш мост bridge (экзСмпляр класса Bridge) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ дСрСвянным, Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ, ΡƒΠ·ΠΊΠΈΠΌ ΠΈΠ»ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌ, ΠΏΠ΅ΡˆΠ΅Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠ΄ΠΎΡ€ΠΎΠΆΠ½Ρ‹ΠΌ) ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм наш мост ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΡΡ ΠΈ для этого создадим ΠΏΠΎΠ»Π΅ класса opened (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚). Π’ Ρ€ΡƒΠ±ΠΈ поля класса Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа «собаки» β€” @ (Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡƒΡ‚Π°Π»ΠΈΡΡŒ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ), поэтому Π² конструкторС ΠΌΡ‹ опишСм ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ моста ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅:

def initialize
  puts "ΠœΠΎΡΡ‚ создан"
  @opened = false
end

Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ open Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ поля Π½Π° true

def open
  @opened = true
  puts "ΠœΠΎΡΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ…Π°Ρ‚ΡŒ"
end

ВсС Π²Π°ΠΆΠ½Ρ‹Π΅ поля вашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² конструкторС! Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Ruby Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΊΠ°ΠΊΠΈΠΌΠΈ свойствами Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ вашСго класса.

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСх ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ЀактичСски ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса своим состояниСм (ΠΎΠ΄ΠΈΠ½ мост ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°ΠΊΡ€Ρ‹Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€).

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ напишСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ‘is_opened?’, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ true, Ссли мост ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ false, Ссли Π·Π°ΠΊΡ€Ρ‹Ρ‚:

def is_opened?
  return @opened
end

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Ruby Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈΡΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой, Ρ‡Ρ‚ΠΎ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ true ΠΈΠ»ΠΈ false, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π·Π½Π°ΠΊΠΎΠΌ вопроса. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π½Π°ΠΊ вопроса Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² названиях ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ поля класса ΠΈΠ· нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ обращСния ΠΊ Π½Π΅ΠΉ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (Ссли это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹).

Π’ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ doroga.rb ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ моста Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для случая, ΠΊΠΎΠ³Π΄Π° мост Π·Π°ΠΊΡ€Ρ‹Ρ‚:

if !bridge.is_open?
  bridge.open
end

ПослС этого наш мост откроСтся ΠΈ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΠœΠΎΡΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ…Π°Ρ‚ΡŒ!.

Π•Ρ‰Ρ‘ Ρ€Π°Π· ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ создадим Π½ΠΎΠ²Ρ‹ΠΉ мост

another_bridge = Bridge.new

Ρ‚ΠΎ этот Π½ΠΎΠ²Ρ‹ΠΉ мост Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚. another_bridge.is_open? Π²Π΅Ρ€Π½Ρ‘Ρ‚ false.

Надо просто Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊ этой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ класс-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
ПослС нСбольшой ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π² этом ΠΊΠ°ΠΊ Ρ€Ρ‹Π±Π° Π² Π²ΠΎΠ΄Π΅.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Ρ€Ρ‹Π±Π° ΠΈ сСлСдка β€” сСлСдка это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Ссли конкрСтная сСлСдка, Π²ΠΎΡ‚ эта).

А просто «Ρ€Ρ‹Π±Π°» это ΡƒΠΆΠ΅ класс πŸ˜‰

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ познакомились с ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΌ понятиСм классов. Π£Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ класс ΠΈ Ρ‡Π΅ΠΌ ΠΎΠ½ отличаСтся ΠΎΡ‚ своСго экзСмпляра. Поняли ΠΊΠ°ΠΊ, Π° Π³Π»Π°Π²Π½ΠΎΠ΅ Π·Π°Ρ‡Π΅ΠΌ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, ΠΊΠ°ΠΊ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π£Π·Π½Π°Π»ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ полях класса ΠΈ ΠΊΠ°ΠΊ Π² Π½ΠΈΡ… хранятся свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π΅Π³ΠΎ состояниС.

А Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ВисСлица β€” сдСлаСм Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ наглядной ΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ.

C ++ — ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Основной Ρ†Π΅Π»ΡŒΡŽ программирования Π½Π° C ++ являСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° язык программирования C, Π° классы — Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ функция C ++, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ часто называСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для управлСния этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΎΠ΄ΠΈΠ½ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚.Β Π”Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ классов C ++

Когда Π²Ρ‹ опрСдСляСтС класс, Π²Ρ‹ опрСдСляСтС схСму для Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ….Β Π­Ρ‚ΠΎ фактичСски Π½Π΅ опрСдСляСт ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ опрСдСляСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ класса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· класса класса ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Ρ‚Π°ΠΊΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса начинаСтся ΡΒ ΠΊΠ»Π°ΡΡΠ°Β ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова,Β Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя класса;Β ΠΈ Ρ‚Π΅Π»ΠΎ класса, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ Π² ΠΏΠ°Ρ€Ρƒ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок.Β ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой, Π»ΠΈΠ±ΠΎ списком Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ. НапримСр, ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Box с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌΒ ΠΊΠ»Π°ΡΡΠ°Β ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°Β ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


class Box {
   public:
      double length;   // Length of a box
      double breadth;  // Breadth of a box
      double height;   // Height of a box
};

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово public опрСдСляСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ доступа для Ρ‡Π»Π΅Π½ΠΎΠ² класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π° Π½ΠΈΠΌ. Доступ ΠΊ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·Π²Π½Π΅ класса Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… области ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса.Β Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠ² класса как частныС или защищСнныС,Β ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсудим Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² C ++

Класс прСдоставляСт Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠΈ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², поэтому Π² основном ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся ΠΈΠ· класса.Β ΠœΡ‹ объявляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса с Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ объявлСниСм, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ основных Ρ‚ΠΈΠΏΠΎΠ².Β Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ утвСрТдСния ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Box —


Box Box1;          // Declare Box1 of type Box
Box Box2;          // Declare Box2 of type Box

Оба ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Box1 ΠΈ Box2 Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию Π΄Π°Π½Π½Ρ‹Ρ….

Доступ ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…

Доступ ΠΊ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ элСмСнтам Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° прямого доступа (.).Β Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π±Ρ‹Π»ΠΎ ясно —


#include <iostream>

using namespace std;

class Box {
   public:
      double length;   // Length of a box
      double breadth;  // Breadth of a box
      double height;   // Height of a box
};

int main() {
   Box Box1;        // Declare Box1 of type Box
   Box Box2;        // Declare Box2 of type Box
   double volume = 0.0;     // Store the volume of a box here
 
   // box 1 specification
   Box1.height = 5.0; 
   Box1.length = 6.0; 
   Box1.breadth = 7.0;

   // box 2 specification
   Box2.height = 10.0;
   Box2.length = 12.0;
   Box2.breadth = 13.0;
   
   // volume of box 1
   volume = Box1.height * Box1.length * Box1.breadth;
   cout << "Volume of Box1 : " << volume <<endl;

   // volume of box 2
   volume = Box2.height * Box2.length * Box2.breadth;
   cout << "Volume of Box2 : " << volume <<endl;
   return 0;
}

Когда ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ компилируСтся ΠΈ выполняСтся, ΠΎΠ½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:


Volume of Box1 : 210
Volume of Box2 : 1560

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ элСмСнтам Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ прямого доступа ΠΊ Ρ‡Π»Π΅Π½Ρƒ (.).Β ΠœΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ.

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² дСталях

Π”ΠΎ сих ΠΏΠΎΡ€ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎ C ++ классах ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ….Β Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрСсныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, связанныС с классами ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ C ++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсудим Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, пСрСчислСнных Π½ΠΈΠΆΠ΅:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² класса

Ѐункция-Ρ‡Π»Π΅Π½ класса — это функция, которая ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΅Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса, ΠΊΠ°ΠΊ ΠΈ любая другая пСрСмСнная.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа ΠΊ классу

Π§Π»Π΅Π½ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ, Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΈΠ»ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‡Π»Π΅Π½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈ дСструктор

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса являСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² классС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса. ДСструктор Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, которая вызываСтся ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ созданного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ конструктор

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ копирования — это конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, инициализируя Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» создан Ρ€Π°Π½Π΅Π΅.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³Π°

Ѐункция Π΄Ρ€ΡƒΠ³Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ класса.

ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ компилятор пытаСтся Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠΎΠ΄ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вмСсто Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

this ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ , этот , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° классы C ++

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° класс выполняСтся Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру. На самом Π΄Π΅Π»Π΅ класс — это просто структура с функциями Π² Π½Π΅ΠΌ.

БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса

Оба элСмСнта Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‡Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ статичСскиС.

Β 

Β 

Π§Π΅ΠΌ отличаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚ класса? | pc

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ вопрос ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π’Π°ΡˆΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (object oriented programming, сокращСнно OOP). Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅ вопрос ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Π² контСкстС ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ программиста C++, ΠΈΠ»ΠΈ любой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ вакансии, которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ понимания ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.


Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ class ΠΈ object ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ связаны Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ свой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ смысл. НачнСм с объяснСния смысла Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «class» Π² контСкстС OOP. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ class относится ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ написанной части ΠΊΠΎΠ΄Π°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния повСдСния любого Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса. Π˜Ρ‚Π°ΠΊ, class это статичСская Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, состоящая ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ это экзСмпляр класса. Однако Ρ‚Π΅Ρ€ΠΌΠΈΠ½ object относится ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ экзСмпляру класса. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ классу. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, поэтому ΠΈΡ… врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ. Пока ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ «ΠΆΠΈΠ²Ρ‹Π΅», ΠΈΡ… свойства ΠΌΠΎΠ³ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, ΠΎ Ρ‡Π΅ΠΌ Ρ‚ΡƒΡ‚ ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ класс Animal (ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅). ВсС ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π΅Π»Π° ΠΈ ΠΌΠΎΠ·Π³ΠΈ — ΠΈ поэтому ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ нашСго Π²Ρ‹ΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ класса Animal. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ классу Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρƒ всСх ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… — Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ movement (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ. ИдСя, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π² своСм прСдставлСнии, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этот ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ шаблон Animal Π½Π΅ измСняСтся, ΠΎΠ½ просто Π΄Π°Π΅Ρ‚ нСсколько строк ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ класс Animal.

ЭкзСмпляр класса Animal Π±Ρ‹Π» Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹ΠΌ — львом, кошкой ΠΈΠ»ΠΈ Π·Π΅Π±Ρ€ΠΎΠΉ. Π­Ρ‚ΠΈ экзСмпляры класса Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ класс Animal — ΠΎΠ±Ρ‰Π΅Π΅ понятиС, экзСмпляры этого класса — Π»ΡŒΠ²Ρ‹, ΠΊΠΎΡ‚Ρ‹ ΠΈ Ρ‚. Π΄. — Π±Π΅Ρ€ΡƒΡ‚ Π·Π° основу ΠΎΠ±Ρ‰Π΅Π΅ понятиС класса ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ экзСмпляры.

ИмСнно ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ программисты ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ конструкторы Π² своих классах — Ρ‚Π°ΠΊ происходит всСгда, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ хотят ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ свойствами. НапримСр, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π·ΠΎΠ²ΡƒΡ‚, сколько ΠΎΠ½ΠΎ вСсит ΠΈ Ρ‚. Π΄. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ конструкторС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠ°ΠΊ ΠΎ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ класс Π² Тизнь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ пошло Π½Π°Π·Π²Π°Π½ΠΈΠ΅ constructor, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ функция конструктора создаСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ экзСмпляр класса.

Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ понятиС «Π²Ρ€Π΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ», Π° Ρƒ класса Π½Π΅Ρ‚. И ΠΊΠ°ΠΊ ясно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ класса Animal, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ связанный с Π½ΠΈΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ — ΠΊΠΎΡ‚ ΠΈΠ»ΠΈ Π·Π΅Π±Ρ€Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΆΠΈΡ‚ΡŒ Π²Π΅Ρ‡Π½ΠΎ. И свойства этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ ΠΈΡ… «ΠΆΠΈΠ·Π½ΠΈ»; Ссли ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ size Π² классС Animal, Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚Π° ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ расти).

ΠžΠ±Ρ‰Π΅Π΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ класса. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ класс являСтся ΠΎΠ±Ρ‰Π΅ΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠ³ΠΎ понятия (Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Animal), ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ это ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅ этого класса, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π”Ρ€ΡƒΠ³ΠΎΠΉ способ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ классом ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ — класс прСдоставляСт шаблон для Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ программист ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° этого класса.

[Бсылки]

1. In Java, what’s the difference between an object and a class? site:programmerinterview.com.

ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с классами Π² Pyton 3. Класс ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Pyton

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это способ ввСдСния ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для создания Π½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ случаС с ООП – это распрСдСлСниС Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ классы. Π§Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой классы, ΠΈΠ· Ρ‡Π΅Π³ΠΎ состоят ΠΈ ΠΊΠ°ΠΊ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ – Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python

Π’ΠΎΡ‚, ΠΊΡ‚ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ» ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΌ стилС. Π’Π΅Π΄ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ с Π½Π΅Π³ΠΎ начинаСтся вСсь процСсс обучСния. Π§Ρ‚ΠΎ ΠΆΠ΅ это Ρ‚Π°ΠΊΠΎΠ΅? По сути, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, состоящий ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, растянутый Π½Π° мноТСство строк.

Π’ Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° ООП Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΎ, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ использовался повсСмСстно. Он умСстСн для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΈ ΠΏΠΎ сСй дСнь с успСхом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях. Но Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, содСрТащиС ΠΊΠΎΠ΄Ρ‹ Π½Π° 10000 строк ΠΈ большС, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ доставит массу нСудобств. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ это Π΅Π³ΠΎ созданиС.

ΠŸΡ€ΠΈ нСобходимости внСсСния ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, придСтся ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π° Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΉΡ‚ΠΈ Π½Π΅ ΠΎΠ΄ΠΈΠ½ час, послС Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ измСнСниям.

Π‘ появлСниСм ООП Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ стало Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Π’ основС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π»Π΅ΠΆΠΈΡ‚ идСя, Ρ‡Ρ‚ΠΎ всС состоит ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ посрСдством ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… связСй. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, вСдя сСбя обособлСно, Π½ΠΎ являясь частичкой ΠΎΠ΄Π½ΠΎΠ³ΠΎ большого ΠΊΠΎΠ΄Π°.

Как ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ класс Π² Python

Класс прСдставляСт собой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ нСбольшой ΠΊΠΎΠ΄:

Π—Π΄Π΅ΡΡŒ, Π² послСднСй строкС, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Β«Ρ…Β», которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ большой объСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ Π² Π½Π΅ΠΉ имССтся мноТСство ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Для ΠΈΡ… обнаруТСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово dir. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ строка основана Π½Π° классС, Π° пСрСмСнная Ρ… являСтся экзСмпляром класса.

Для создания класса, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ потрСбуСтся ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ class, послС Ρ‡Π΅Π³ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅. Π”Π°Π»Π΅Π΅ прописываСтся описаниС класса, Π½ΠΎ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ ΠΏΠΎ ТСланию ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ доступ ΠΊ строкС, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Class._doc_ Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ознакомлСния с классом, рассмотрим ΠΈΠ· Ρ‡Π΅Π³ΠΎ ΠΎΠ½ состоит.

Атрибут

Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ относится ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² классС. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, всС Π΅Π³ΠΎ дСйствия происходят Π²Π½ΡƒΡ‚Ρ€ΠΈ классового ΠΊΠΎΠ΄Π°. Атрибут Class способСн ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ копию Π²Π½ΡƒΡ‚Ρ€ΠΈ класса. Она ΠΆΠ΅, впослСдствии, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со всСми функциями ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ этого класса. Если это ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

class class_attribute:

Β Β  val = 1

Β Β  def product(self):

Β Β Β Β Β Β  class_attribute.val *= 10

Β Β Β Β Β Β  print(class_attribute.val)

obj1 = class_attribute() obj1.product()

obj2 = class_attribute() obj2.product()

Для создания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ слово val ΠΈ ΠΏΡ€ΠΈΠ΄Π°Π΄ΠΈΠΌ Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ val, прописываСм Π½ΠΈΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ product(). Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΡŽ значСния, ΡƒΠΌΠ½ΠΎΠΆΠΈΠ² Π΅Π³ΠΎ Π½Π° 10.

НиТС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ послС создания Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² копия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½ΠΈΡ… ΠΎΠ±ΠΎΠΈΡ…. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Ρ€Π°Π²Π½ΠΎ 1, Π° послС ΠΎΠ½ΠΎ умноТаСтся Π½Π° 10, Ρ‚ΠΎ Π² obj1 ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ val=10, Π° Π²ΠΎΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ obj2, val умноТаСтся Π½Π° 10 ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 100. Как ΠΈΡ‚ΠΎΠ³ Π½Π° экранС Π²Ρ‹ΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠœΠ΅Ρ‚ΠΎΠ΄

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

  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра класса. НаиболСС часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° self, экзСмпляр класса ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° сам экзСмпляр. Π”Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ИспользованиС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° self ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ, привязанным ΠΊ Π½Π΅ΠΌΡƒ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΈ использовании Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° self._class_, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ класса ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ состояниС. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ экзСмпляры класса ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ измСнСния состояния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ класса Π² Ρ†Π΅Π»ΠΎΠΌ.
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса. Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° cls ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ класс. ДСкларируя ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ classmethod. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ класса привязан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ классу, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ привязанности ΠΊ Π΅Π³ΠΎ экзСмпляру. ΠœΠ΅Ρ‚ΠΎΠ΄ класса Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ состояния класса, Ρ‡Ρ‚ΠΎ отраТаСтся Π½Π° всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, содСрТащихся Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π½ΠΎ ΠΎΠ½ Π½Π΅ способСн ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ДСкларация статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° производится использованиСм Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° staticmethod. Π₯арактСрная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ этого Π²ΠΈΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ способны ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояний класса ΠΈΠ»ΠΈ ΠΈΡ… экзСмпляров. Они Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² статичСском состоянии ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ записывании ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ конструктор ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄, проявляСмый автоматичСски ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ участвуСт Π² построСнии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ языкС программирования конструктору даСтся своС имя, Ρ‚Π°ΠΊ Π² Python это ΠΌΠ΅Ρ‚ΠΎΠ΄ _init_().

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

  • ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ΡΡ символичСским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ _init_.
  • Π•Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • Π§Π΅Ρ€Π΅Π· свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° конструктор ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².
  • НСзависимо, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° класс, ΠΎΠ½ Π²ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ конструктор.
  • Π’ случаС нСвозмоТности обнаруТСния конструктором класса, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс.
# ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ.

class Rectangle :

'Π­Ρ‚ΠΎ класс Rectangle'

# Бпособ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (конструктор)

def __init__(self, width, height):Β Β Β Β Β Β Β Β 

self.width= width

self.height = height




def getWidth(self):Β Β Β Β Β Β Β 

return self.width




def getHeight(self):Β Β Β Β Β Β Β 

return self.height




# ΠœΠ΅Ρ‚ΠΎΠ΄ расчСта ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ.

def getArea(self):

return self.width * self.height

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс Rectangle:

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ 2 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: r1 & r2

r1 = Rectangle(10,5)

r2 = Rectangle(20,11)




print("r1.width = ", r1.width)

print("r1.height = ", r1.height)

print("r1.getWidth() = ", r1.getWidth())

print("r1.getArea() = ", r1.getArea())




print("-----------------")




print("r2.width = ", r2.width)

print("r2.height = ", r2.height)

print("r2.getWidth() = ", r2.getWidth())

print("r2.getArea() = ", r2.getArea())

Π§Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса

Работая Π½Π°Π΄ конструированиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° автоматичСски запускаСт конструктор. ΠŸΡ€ΠΈ этом Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Рассматривая ΠΈΠ½Ρ‹Π΅ языки, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ содСрТат ΠΏΠΎ нСсколько конструкторов. ΠŸΠΈΡ‚ΠΎΠ½ допускаСт использованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Но прСимущСство Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎΡ‚ экспСрта! АргумСнты, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² построСнии класса, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

class Person:

Β Β Β  # ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ возраста ΠΈ ΠΏΠΎΠ»Π° ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Β Β Β  def __init__(self, name, age=1, gender="Male"):

Β Β Β Β Β Β Β  self.name = name

Β Β Β Β Β Β Β  self.age = age

Β Β Β Β Β Β Β  self.gender= gender

Β Β Β Β Β Β Β Β 

Β Β Β  def showInfo(self):

Β Β Β Β Β Β Β  print("Name: ", self.name)

Β Β Β Β Β Β Β  print("Age: ", self.age)

Β Β Β Β Β Β Β  print("Gender: ", self.gender)

Π“Π΄Π΅ gender =”Male” относится ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π”Π°Π»ΡŒΡˆΠ΅ Π·Π°Π΄Π°Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния:

from person import Person




# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Person.

aimee = Person("Aimee", 21, "Female")

aimee.showInfo()

print(" --------------- ")




# возраст ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΠΎΠ».

alice = Person( "Alice" )

alice.showInfo()




print(" --------------- ")




# Пол ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

tran = Person("Tran", 37)

tran.showInfo()

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΌΠΈ значСниями.

Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Python, создаваСмыС конструктором, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ располоТСния. Π§Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ адрСса. Допустим, сущСствуСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ АА, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° Π’Π’. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ АА выдСляСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ячСйка, вСдь основным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС считаСтся Π’Π’.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ==, прописанный Π² ΠΊΠΎΠ΄Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для провСдСния Π°Π½Π°Π»ΠΈΠ·Π°: Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ ячСйки ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Если ссылка Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ мСсту, Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ == Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ True. Для понимания ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° мСста с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ адрСсатами, прописываСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ !=

from rectangle import Rectangle







r1 = Rectangle(20, 10)

r2 = Rectangle(20 , 10)

r3 = r1




# Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ r1 ΠΈ r2

test1 = r1 == r2 # --> False

# Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ r1 ΠΈ r3

test2 = r1 == r3 # --> True




print ("r1 == r2 ? ", test1)

print ("r1 == r3 ? ", test2)




print (" -------------- ")




print ("r1 != r2 ? ", r1 != r2)

print ("r1 != r3 ? ", r1 != r3)

Π“Π΄Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹

Π’ ΠŸΠΈΡ‚ΠΎΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ сущСствуСт Π²Ρ‚ΠΎΡ€ΠΎΠ΅ понятиС Атрибуты, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ. Если ΠΏΠ΅Ρ€Π²ΠΎΠ΅ относится ΠΊ Β«ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ класса», Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΊ «Атрибутам». Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

class Player:

Β Β Β  # ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ класса

Β Β Β  minAgeΒ  = 18

Β Β Β  maxAge = 50

Β Β Β Β 

Β Β Β  def __init__(self, name, age):

Β Β Β Β Β Β Β  self.name = name

Β Β Β Β Β Β Β  self.age = age

Атрибут

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ячСйки памяти. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

from player import Player







player1 = Player("Tom", 20)




player2 = Player("Jerry", 20)




print("player1.name = ", player1.name)

print("player1.age = ", player1.age)




print("player2.name = ", player2.name)

print("player2.age = ", player2.age)




print(" ------------ ")




print("Assign new value to player1.age = 21 ")




# ΠŸΡ€ΠΈΡΠ²ΠΎΠΉΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ возраста player1.

player1.age = 21




print("player1.name = ", player1.name)

print("player1.age = ", player1.age)




print("player2.name = ", player2.name)

print("player2.age = ", player2.age)

Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π’ ΠŸΠΈΡ‚ΠΎΠ½Π΅ присутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания Π½ΠΎΠ²Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² для созданных Ρ€Π°Π½Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° player1 создаСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ address.

from player import Player







player1 = Player("Tom", 20)

player2 = Player("Jerry", 20)




# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«addressΒ» для player1.

player1.address = "USA"




print("player1.name = ", player1.name)

print("player1.age = ", player1.age)

print("player1.address = ", player1.address)




print(" ------------------- ")




print("player2.name = ", player2.name)

print("player2.age = ", player2.age)




# player2 Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° 'address' (Error!!)

print("player2.address = ", player2.address)

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄:

player1.name =Β  Tom

player1.age =Β  20

player1.address =Β  USA

Β -------------------

player2.name =Β  Jerry

player2.age =Β  20

Traceback (most recent call last):

Β  File "C:/Users/gvido/class.py", line 27, in <module>

Β Β Β  print("player2.address = ", player2.address)

AttributeError: 'Player' object has no attribute 'address'

Атрибуты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для получСния доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β«Ρ‚ΠΎΡ‡ΠΊΠ°Β» (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ‚Π°ΠΊΠΈΠ΅ значСния: player.age). Для облСгчСния Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

getattr (obj, name[,default])Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ установку Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹.
hasattr (obj, name)Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π»Π°ΡΡŒ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ name.
setattr (obj, name, value)Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΠΏΡ€ΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ. ΠŸΡ€ΠΈ Π΅Π³ΠΎ отсутствии создаСтся Π½ΠΎΠ²Ρ‹ΠΉ.
delattr (obj, name)Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°.

Разновидности встроСнных Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² класса

Благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ элСмСнтами Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² встроСнного языка ΠŸΠΈΡ‚ΠΎΠ½, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΈΠΌΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΡ‚ Π½Π΅Π³ΠΎ:

ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
_dict_ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ самых Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ классС.
Β Β Β Β Β Β Β Β Β Β Β  _doc_Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ строки с описаниСм класса. ΠŸΡ€ΠΈ нСвозмоТности опрСдСлСния значСния, возвращаСтся None.
_class_Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, содСрТащСго ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ классС.
Β Β Β Β Β  _module_Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ имя модуля класса. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса Π² выполняСмом ΠΌΠΎΠ΄ΡƒΠ»Π΅ возвращаСтся _main_.

Π’ΠΈΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… класса

Если ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Java ΠΈΠ»ΠΈ C#, Ρ‚ΠΎ навСрняка Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Field. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π‘ΠΎΠ²Π΅Ρ‚ ΠΎΡ‚ экспСрта! Для получСния доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π° Π½Π΅ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ.

Для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ выдСляСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ячСйка, ΠΈ ΠΎΠ½Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π° доступна для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… класса ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π²ΠΎΠ΄ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dir.

from player import Player







# ВывСсти список Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° 'Player'

print(dir(Player))

print("\n\n")




player1 = Player("Tom", 20)

player1.address ="USA"




# ВывСсти список Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° 'player1'

print(dir(player1))

Как Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° экран вывСдутся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__',

'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',

'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',

'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',

'__repr__', '__setattr__', '__sizeof__', '__str__',

'__subclasshook__', '__weakref__', 'maxAge', 'minAge']Β 




['__class__', '__delattr__', '__dict__', '__dir__', '__doc__',

'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',

'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',

'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',

'__repr__', '__setattr__', '__sizeof__', '__str__',

'__subclasshook__', '__weakref__', 'address', 'age', 'maxAge',

'minAge', 'name']

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прСдусматриваСт Ρ€Π°Π±ΠΎΡ‚Ρƒ с классами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π§Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² свой состав. И ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… дСйствий.

ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ качСство ΡΡ‚Π°Ρ‚ΡŒΠΈ. Нам Π²Π°ΠΆΠ½ΠΎ вашС ΠΌΠ½Π΅Π½ΠΈΠ΅:

Π Π°Π΄Ρ‡Π΅Π½ΠΊΠΎ Π“Π»Π΅Π± Π˜Π³ΠΎΡ€Π΅Π²ΠΈΡ‡

ο»Ώ

НаучныС интСрСсы

  • Π“Ρ€ΠΈΠ΄-вычислСния.
  • ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ вычислСния.
  • РаспрСдСлСнныС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ систСмы.

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹

  1. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Erasmus+ PWs@PhD. Основная Ρ†Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° PWs@PhD – ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° развития, ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ образования, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ СвропСйского образования уровня PhD, содСйствиС созданию Π½ΠΎΠ²Ρ‹Ρ… PhD-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² странах-ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π°Ρ… Π² области ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ.
  2. БСрвисно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ использованию ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² распрСдСлСнных ΠΈ Π³Ρ€ΠΈΠ΄-срСдах (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ DiVTB).
  3. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ рСализация нСйросСтСвого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° распознавания Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Ρ‡ΠΈ (Π§Π°ΡΡ‚ΡŒ 1, Π§Π°ΡΡ‚ΡŒ 2, Π§Π°ΡΡ‚ΡŒ 3).

Новости

  • [2013-12-25]  ОбновлСния страниц курсов:
  • [2013-12-17]  ОбновлСния страниц курсов:
  • [2013-11-28]  ОбновлСния страниц курсов:

Β 

  • [2013-11-07]Β Β Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ слайды ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΉ:
  • [2013-10-26]Β Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ слайды ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΉ:
  • [2013-06-03]Β Β Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ слайды ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΉ:

[Архив новостСй]

Бсылки

  • Mendeley — систСма для ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ управлСния Π±ΠΈΠ±Π»ΠΈΠΎΠ³Ρ€Π°Ρ„ΠΈΠ΅ΠΉ. ВстраиваСтся Π² Microsoft Word, позволяя Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс управлСния списками Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ статСй. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСство Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² оформлСния библиографичСских ссылок,Β Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π“ΠžΠ‘Π’-7.0.5-2008.
  • Memsource — опСрационная срСда для выполнСния ΠΏΠΈΡΡŒΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ Π±Π°Π·Ρ‹ памяти ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ², встроСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ управлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ MemSource Editor. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ всСх стандартных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Word ΠΈ PowerPoint.

Мой ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ

Β 

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ C ++


ΠšΠ»Π°ΡΡΡ‹ / ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ C ++

C ++ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования.

ВсС Π² C ++ связано с классами ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ вмСстС с ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΈ
ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. НапримСр: Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ . ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² , Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ вСс ΠΈ Ρ†Π²Π΅Ρ‚, ΠΈ .
ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ ΠΈ Ρ‚ΠΎΡ€ΠΌΠΎΠ·.

Атрибуты ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ — это Π² основном ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ классу.Π˜Ρ… часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚
Β«ΡƒΡ‡Π΅Π½ΠΈΠΊΠΈ класса».

Класс — это опрСдСляСмый ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΈ ΠΎΠ½
Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Β«ΠΏΠ»Π°Π½Β» для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².


Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ класс

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class :

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

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ класс ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β« MyClass Β»:

class MyClass {
// Класс
public:
// Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа
int myNum; //
Атрибут (пСрСмСнная Ρ‚ΠΈΠΏΠ° int)
string myString; //
Атрибут (строковая пСрСмСнная)
};

ОбъяснСниС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°

  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания класса с ΠΈΠΌΠ΅Π½Π΅ΠΌ MyClass .
  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово public — это спСцификатор доступа , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‡Π»Π΅Π½Ρ‹ (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹) класса доступны ΠΈΠ·Π²Π½Π΅. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ большС ΠΎ спСцификаторах доступа ΠΏΠΎΠ·ΠΆΠ΅.
  • Π’Π½ΡƒΡ‚Ρ€ΠΈ класса Π΅ΡΡ‚ΡŒ цСлочислСнная пСрСмСнная
    myNum
    ΠΈ строковая пСрСмСнная myString . Когда ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅
    Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ .
  • НаконСц, Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой ; .

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Π’ C ++ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся ΠΈΠ· класса. ΠœΡ‹ ΡƒΠΆΠ΅ создали класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ MyClass ,
Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ MyClass , ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅
имя класса, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Для доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ класса ( myNum ΠΈ myString ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΉ синтаксис (. )
Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅:

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

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β« myObj Β» ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅
Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹:

class MyClass {// Класс
общСдоступный:
// Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа
int myNum; //
Атрибут (пСрСмСнная Ρ‚ΠΈΠΏΠ° int)
string myString; //
Атрибут (строковая пСрСмСнная)
};

int main () {
MyClass myObj ;
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° MyClass

// Доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΈ установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
myObj.myNum
= 15;

myObj.myString
= «ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ тСкста»;

// Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²
cout << myObj.myNum << "\ n";
cout << myObj.myString;
Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »


НСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса:

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

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ класс Car с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ.
class Car {
public:
string brand; МодСль струны
;
ΠΈΠ½Ρ‚
Π³ΠΎΠ΄;
};

int main () {
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Car
Car carObj1;
carObj1.ΠΌΠ°Ρ€ΠΊΠ° = «BMW»;
carObj1.model = «X5»;
carObj1.year = 1999;

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Car
Car
carObj2;
carObj2.brand = «Π€ΠΎΡ€Π΄»;
carObj2.model =
Β«ΠœΡƒΡΡ‚Π°Π½Π³Β»;
carObj2.year = 1969;

// ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ
значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²
cout << carObj1.brand << "" << carObj1.model << "" << carObj1.year << "\ n";
cout << carObj2.brand << "" << carObj2.модСль << "" << carObj2.year << "\ n";
Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »


class — ΠŸΠΎΡ‡Π΅ΠΌΡƒ классы Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² C ++?

Π― всСгда Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ синонимами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π―Π·Ρ‹ΠΊ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ ООП ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½. НС ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ языки программирования ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько ΠΈΠ½ΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Класс — это шаблон ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (экзСмпляры этого класса).Π’ΠΎ Π΅ΡΡ‚ΡŒ класс прСдоставляСт структуру, сигнатуры Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса (ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° … ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅).

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ — это просто мСсто Π² памяти экзСмпляра этого класса.

ВикипСдия прСдоставляСт Ρ…ΠΎΡ€ΠΎΡˆΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ:

http://en.wikipedia.org/wiki/Class_(computer_programming)

http://en.wikipedia.org/wiki/Object_(object-oriated_programming)

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ Ρ‚ΠΈΠΏΠ° .Π’ΠΈΠΏ (ΠΈΠ»ΠΈ интСрфСйс, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ ΠΈΠ»ΠΈ языках программирования) ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдставляСт собой Π½Π°Π±ΠΎΡ€ сигнатур Ρ‚ΠΈΠΏΠ° / ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, повСдСния). Π’Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ интСрфСйсы Java ΠΈ чистыС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ классы C ++, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚ΠΈΠΏΠΎΠ² (Π½ΠΎ Π½Π΅ совсСм Ρ‚ΠΎ ΠΆΠ΅ самоС).

Π’ΠΎΠ³Π΄Π° класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт этому Ρ‚ΠΈΠΏΡƒ (Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ интСрфСйс ΠΈΠ»ΠΈ чистый Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс), являСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ этого Ρ‚ΠΈΠΏΠ° .

Π­Ρ‚ΠΎΡ‚ класс, рСализация Ρ‚ΠΈΠΏΠ° — это всСго лишь Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса / Ρ‚ΠΈΠΏΠ° Π² памяти.

Когда Π²Ρ‹ создаСтС экзСмпляр класса / Ρ‚ΠΈΠΏΠ°, Π²Ρ‹ Ρ€Π΅ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, создаСтС экзСмпляр (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚) этого класса Π² памяти.

Π’ C ++ класс Π½Π΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сам класс Π½Π΅ создаСтся. Класс C ++ Π½Π΅ являСтся экзСмпляром ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса (см. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π΄Π°Π» Π²Ρ‹ΡˆΠ΅).

OTH, Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Java, сам класс прСдставлСн экзСмплярами ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ класса (java.lang.Class). Π˜Ρ‚Π°ΠΊ, Ρƒ класса X Π΅ΡΡ‚ΡŒ связанный с Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти (экзСмпляр java.lang.Class).И с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, с этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ «class» , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ (тСорСтичСски) ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ экзСмпляр (ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚) класса / Ρ‚ΠΈΠΏΠ° X.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΡ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ. Π― Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ ΠΏΠΎ классам, Ρ‚ΠΈΠΏΠ°ΠΌ, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°ΠΌ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ / экзСмплярам.

, ΠΈ я Π½Π΅ понимаю, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ это ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅. Как классы Π½Π΅
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹,

Как объяснСно Π²Ρ‹ΡˆΠ΅. Класс — это Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ — это экзСмпляр, Ρ‡Π°ΡΡ‚ΡŒ памяти, созданная ΠΈ инициализированная ΠΏΠΎ Β«Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΡƒΒ» класса ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ°.

ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ, Ссли язык статичСн?

Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ½ΠΈΠ³ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Java, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΈ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ классы сами ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, тСкст относится ΠΊ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языкам (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JavaScript), Π³Π΄Π΅ классы Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ экзСмплярами.

Π― ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слово Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β», Π° просто ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ «классами» ΠΈ «экзСмплярами». Но это ΠΌΠΎΠ΅ Π»ΠΈΡ‡Π½ΠΎΠ΅ пристрастиС.Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ, ΠΈ ΠΏΡƒΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊ.

классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² C ++ | Studytonight

ΠšΠ»Π°ΡΡΡ‹ — самая ваТная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ C ++, вСдущая ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Класс — это опрСдСляСмый ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит свои собствСнныС элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, создав экзСмпляр этого класса.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния класса Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ функциями-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ.

НапримСр: Класс ΠΏΡ‚ΠΈΡ†, всС ΠΏΡ‚ΠΈΡ†Ρ‹ ΡƒΠΌΠ΅ΡŽΡ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒ, ΠΈ Ρƒ всСх Π΅ΡΡ‚ΡŒ ΠΊΡ€Ρ‹Π»ΡŒΡ ΠΈ ΠΊΠ»ΡŽΠ²Ρ‹.Π˜Ρ‚Π°ΠΊ, здСсь ΠΏΠΎΠ»Π΅Ρ‚ — это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π° ΠΊΡ€Ρ‹Π»ΡŒΡ ΠΈ клюв — Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡ… характСристик. Π’ этом классС ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ‚ΠΈΡ† с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎ всС ΠΎΠ½ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈ характСристиками.

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ класс — это просто ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΈ опрСдСляСт характСристики ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ соотвСтствСнно. И всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ эти характСристики ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.


ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ классах

  1. Имя класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ (хотя это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ).Если имя класса состоит ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ слова, Ρ‚ΠΎ пСрвая Π±ΡƒΠΊΠ²Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ слова Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ,
      класс Study, класс StudyTonight ΠΈ Ρ‚. Π”.  
  2. ΠšΠ»Π°ΡΡΡ‹ содСрТат элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, ΠΈ доступ этих элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ зависит ΠΎΡ‚ спСцификаторов доступа (обсуТдаСмых Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅).
  3. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ класса

  4. ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния класса ΠΈΠ»ΠΈ Π²Π½Π΅ опрСдСлСния класса.
  5. Класс

  6. Π² C ++ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ структурам Π² C, с Ρ‚ΠΎΠΉ лишь Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ частный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа, Π° Π² качСствС структуры ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ общСдоступная структура.
  7. ВсС возмоТности OOPS Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΎΠΊΡ€ΡƒΠ³ классов Π² C ++. НаслСдованиС, инкапсуляция, абстракция ΠΈ Ρ‚. Π”.
  8. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса содСрТат ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса, сколько Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ.
  9. ΠšΠ»Π°ΡΡΡ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ большим количСством характСристик, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ абстрактныС классы, нСизмСняСмыС классы, всС это ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов

Class — это просто ΠΏΠ»Π°Π½ ΠΈΠ»ΠΈ шаблон. Когда ΠΌΡ‹ опрСдСляСм класс, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π΅ назначаСтся.ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ — это экзСмпляры класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² классС, ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с этими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ класса, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ . О конструкторах ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅.

И всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ своСй области видимости, вызываСтся другая ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ функция-Ρ‡Π»Π΅Π½ класса, называСмая ДСструктор , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.Π’ C ++ Π½Π΅Ρ‚ автоматичСского сборщика мусора, ΠΊΠ°ΠΊ Π² JAVA, Π² C ++ эту Π·Π°Π΄Π°Ρ‡Ρƒ выполняСт дСструктор.

  класс Abc
{
    int x;
    пустой дисплСй ()
    {
        // ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ заявлСниС
    }
};

int main ()
{
    Abc obj; // Π‘ΠΎΠ·Π΄Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Abc
}  


ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ | C ++

Одна ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… особСнностСй C ++ — это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с большим количСством Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ…. ЀактичСски Π΄Π°Π½Π½Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π²ΠΈΠΆΡƒΡ‰Π΅ΠΉ силой Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅.ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ постоянно Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ строки, ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ числа, ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π²Π΅Ρ‰ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

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

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

Π­Ρ‚ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ для нас, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ всС Π±ΠΎΠ»Π΅Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… чисСл, тСкста ΠΈ истинной / Π»ΠΎΠΆΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π²Π΅Ρ‰Π΅ΠΉ , с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ взаимодСйствуСм ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ сохранСны Π² строкС, числС ΠΈΠ»ΠΈ логичСском Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΡƒΡ‡Π΅ΠΉ ΠΊΠ½ΠΈΠ³. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, Π° ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ эти ΠΊΠ½ΠΈΠ³ΠΈ?

ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π² логичСских значСниях, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ количСство страниц ΠΈ Π΄Π°Ρ‚Ρ‹ ΠΈΡ… ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ чисСл, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ имя ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π°Π²Ρ‚ΠΎΡ€Π° Π² строках. Но, надСюсь, Π²Π°ΠΌ ясно, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ простого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для прСдставлСния ΠΊΠ½ΠΈΠ³ΠΈ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π΄Π°Π΅ΠΌ. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π² ΠΊΠ½ΠΈΠ³Π΅ Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП)

На Π·Π°Ρ€Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ программирования, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ просто Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚Ρ€ΡƒΠ΄ΠΈΠ»ΠΈΡΡŒ ΠΈ сдСлали всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ описал. Но Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои собствСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ строкам, логичСским значСниям ΠΈ числам Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Book . Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ½ΠΈΠ³ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСн Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, распСчатан ΠΈ Π²ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Боздавая собствСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, Π²Ρ‹ тСорСтичСски ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΈΠ»ΠΈ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ строку ΠΈΠ»ΠΈ число.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ facebook, google, gruhhub ΠΈΠ»ΠΈ нСбольшиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ напишСм Π² дальнСйшСм Π² курсС, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти настраиваСмыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΊΠ½ΠΈΠ³ΠΈ.

ΠšΠ»Π°ΡΡΡ‹

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΆΠ΅ Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эти настраиваСмыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…? На самом Π΄Π΅Π»Π΅ это довольно просто, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, создав класс.Класс — это спСцификация Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ создаСм настраиваСмыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ сначала Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выглядят ΠΈ ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ C ++ Π·Π½Π°Π», Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ.

ΠšΠ»Π°ΡΡΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠΈ. Они ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ….

C ++ ΡƒΠΆΠ΅ прСдоставляСт Π½Π°ΠΌ Ρ‚Ρ€ΠΈ основных Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…: логичСскиС, строки (тСкст) ΠΈ числа.Когда ΠΌΡ‹ создаСм наши настраиваСмыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· этих Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ создании класса ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ класс Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… этих Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ класс для нашСй Книги:

 Копия  классная книга {
    ΠΎΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ:
          строковоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅;
          Π°Π²Ρ‚ΠΎΡ€ строки;
          int numPages;
};  

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ класс — это спСцификация, ΠΏΠ»Π°Π½, ΠΎΠ½ описываСт структуру ΠΈ состав этого Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ½ΠΈΠ³ΠΈ.

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ создали наш класс book, C ++ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ выглядит этот Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс book — это просто спСцификация, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, вмСсто этого ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ — это экзСмпляр класса. Π’ этом случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ настоящая ΠΊΠ½ΠΈΠ³Π° с фактичСским Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ количСством страниц.

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΉ тСрминологичСский ΠΌΠΎΠΌΠ΅Π½Ρ‚. Класс — это ΠΏΠ»Π°Π½ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — это экзСмпляр этого ΠΏΠ»Π°Π½Π°.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° C ++:

 Копия  классная книга {
    ΠΎΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ:
          строковоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅;
          Π°Π²Ρ‚ΠΎΡ€ строки;
          int numPages;
};

int main () {

    Книга book1;
    ΠΊΠ½ΠΈΠ³Π°1.title = "Π“Π°Ρ€Ρ€ΠΈ ΠŸΠΎΡ‚Ρ‚Π΅Ρ€";
    book1.author = "Π”ΠΆ. К. Π ΠΎΡƒΠ»ΠΈΠ½Π³";
    book1.numPages = 500;

    cout << book1.title << endl;

    КниТная книга2;
    book2.title = "ВластСлин ΠΊΠΎΠ»Π΅Ρ†";
    book2.author = "Π”ΠΆ. Π . Π . Π’ΠΎΠ»ΠΊΠΈΠ½";
    book2.numPages = 300;

    cout << book2.title << endl;

    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}  

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ создали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎ ΠΊΠ½ΠΈΠ³Π° с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ количСством страниц! Π§Ρ‚ΠΎ касаСтся C ++, это Π² основном Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π° протяТСнии этого курса.

Π’ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΠ»ΠΈ Π΅ΠΌΡƒ ряд Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ.

НазваниС ΠΈ Π°Π²Ρ‚ΠΎΡ€ - это просто строки, Π° количСство страниц - это число. Для доступа ΠΊ этим Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ . . Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. Π­Ρ‚ΠΎΡ‚ процСсс называСтся ΠΎΡ‚ΠΌΠ΅Π½ΠΎΠΉ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ½ΠΈΠ³ΠΈ.

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

Π’ΠΎΡ‚ ΠΈ всС! ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстны Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡΠ±ΠΈΠ²Π°ΡŽΡ‚ с Ρ‚ΠΎΠ»ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… программистов, Π½ΠΎ ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Π½ΠΈΡ… просто Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, большая Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Π°ΠΉΠ½Ρ‹ исчСзнСт.

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

11.2 - ΠšΠ»Π°ΡΡΡ‹ ΠΈ Ρ‡Π»Π΅Π½Ρ‹ классов

Π₯отя C ++ прСдоставляСт ряд Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, char, int, long, float, double ΠΈ Ρ‚. Π”.), ΠšΠΎΡ‚ΠΎΡ€Ρ‹Ρ… часто достаточно для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простых Π·Π°Π΄Π°Ρ‡, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ слоТных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΎ. ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с использованиСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этих Ρ‚ΠΈΠΏΠΎΠ².Одна ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ C ++ - это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ собствСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ пСрСчисляСмыС Ρ‚ΠΈΠΏΡ‹ ΠΈ структуры ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания Π²Π°ΡˆΠΈΡ… собствСнных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ структуры, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для хранСния Π΄Π°Ρ‚Ρ‹:

struct DateStruct

{

int year {};

int мСсяц {};

int дСнь {};

};

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ структуры Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄Π°Π½Π½Ρ‹Ρ… (структуры, содСрТащиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅) ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΌΠΈΡ€ Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅.Π’ C ++ 11 ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту структуру ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

DateStruct сСгодня {2020, 10, 14}; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ вывСсти Π΄Π°Ρ‚Ρƒ Π½Π° экран (Ρ‡Ρ‚ΠΎ ΠΌΡ‹, вСроятно, ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ), ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для этого. Π’ΠΎΡ‚ полная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

14

18

19

20

21

22

23

#include

struct DateStruct

{

int year {};

int мСсяц {};

int дСнь {};

};

void print (const DateStruct & date)

{

std :: cout << date.Π³ΠΎΠ΄ << '/' << date.month << '/' << date.day;

}

int main ()

{

DateStruct сСгодня {2020, 10, 14}; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ

today.day = 16; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‡Π»Π΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Π»Π΅Π½ структуры

print (today);

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;

}

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚:

 16.10.2020
 

ΠšΠ»Π°ΡΡΡ‹

Π’ ΠΌΠΈΡ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΌΡ‹ часто Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наши Ρ‚ΠΈΠΏΡ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΈ прСдоставляли Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.Π’ C ++ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class . ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class опрСдСляСт Π½ΠΎΠ²Ρ‹ΠΉ опрСдСляСмый ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ классом.

Π’ C ++ классы ΠΈ структуры ΠΏΠΎ сути ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹. ЀактичСски, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ структура ΠΈ класс практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹:

struct DateStruct

{

int year {};

int мСсяц {};

int дСнь {};

};

class DateClass

{

public:

int m_year {};

int m_month {};

int m_day {};

};

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ СдинствСнноС сущСствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ - это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово public: Π² классС.ΠœΡ‹ обсудим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ этого ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅.

Как ΠΈ объявлСниС структуры, объявлСниС класса Π½Π΅ выдСляСт памяти. Он Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опрСдСляСт, ΠΊΠ°ΠΊ выглядит класс.

Как ΠΈ Π² случаС со структурами, ΠΎΠ΄Π½Π° ΠΈΠ· самых простых ошибок C ++ - это Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ΅ с запятой Π² ΠΊΠΎΠ½Ρ†Π΅ объявлСния класса. Π­Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компилятора Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС ΠΊΠΎΠ΄Π° . Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ компиляторы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Visual Studio 2010, ΡƒΠΊΠ°ΠΆΡƒΡ‚ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°Π±Ρ‹Π»ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ старыС ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ слоТныС компиляторы ΠΌΠΎΠ³ΡƒΡ‚ этого Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ фактичСской ошибки.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ классов (ΠΈ структур) ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΏΠ»Π°Π½ - ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π§Ρ‚ΠΎΠ±Ρ‹ фактичСски ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ этого Ρ‚ΠΈΠΏΠ° класса:

DateClass сСгодня {2020, 10, 14}; // объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ класса DateClass

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹

Помимо хранСния Π΄Π°Π½Π½Ρ‹Ρ…, классы (ΠΈ структуры) Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ! Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ функциями-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ (ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ).Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠ»ΠΈ Π²Π½Π΅ опрСдСлСния класса. ΠœΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΈΡ… сСйчас Π²Π½ΡƒΡ‚Ρ€ΠΈ класса (для простоты), Π° ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ… Π²Π½Π΅ класса.

Π’ΠΎΡ‚ наш класс Date с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π΄Π°Ρ‚Ρ‹:

class DateClass

{

public:

int m_year {};

int m_month {};

int m_day {};

void print () // опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ с ΠΈΠΌΠ΅Π½Π΅ΠΌ print ()

{

std :: cout << m_year << '/' << m_month << '/' << m_day;

}

};

Как ΠΈ Ρ‡Π»Π΅Π½Ρ‹ структуры, доступ ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ функциям) класса осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Π±ΠΎΡ€Π° Ρ‡Π»Π΅Π½Π° (.):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

14

18

19

20

21

22

23

24

#include

class DateClass

{

public:

int m_year {};

int m_month {};

int m_day {};

void print ()

{

std :: cout << m_year << '/' << m_month << '/' << m_day;

}

};

int main ()

{

DateClass сСгодня {2020, 10, 14};

сСгодня.m_day = 16; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‡Π»Π΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‡Π»Π΅Π½Π° класса

today.print (); // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‡Π»Π΅Π½Π° для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° класса

return 0;

}

Π­Ρ‚ΠΎ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ:

 16.10.2020
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, насколько эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ структуры, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ написали Π²Ρ‹ΡˆΠ΅.

Однако Π΅ΡΡ‚ΡŒ нСсколько ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ. Π’ вСрсии print () DateStruct ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ саму структуру Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print () Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС print () Π½Π΅ ΡƒΠ·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ DateStruct ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ снова посмотрим Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° print:

void print () // опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ с ΠΈΠΌΠ΅Π½Π΅ΠΌ print ()

{

std :: cout << m_year << '/' << m_month << '/' << m_day;

}

Π§Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ m_year, m_month ΠΈ m_day? Они относятся ΠΊ связанному ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ (ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ).

Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Β«today.print ()Β», компилятор ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ m_day ΠΊΠ°ΠΊ today.m_day , m_month ΠΊΠ°ΠΊ today.m_month ΠΈ m_year ΠΊΠ°ΠΊ today.m_year . Если Π±Ρ‹ ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Β«Π·Π°Π²Ρ‚Ρ€Π°.print ()Β», m_day вмСсто этого Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π·Π°Π²Ρ‚Ρ€Π°.m_day .

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, связанный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ сущСству нСявно пСрСдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρƒ. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π΅Π³ΠΎ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ нСявным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ .

ΠœΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСявная ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ этой Π³Π»Π°Π²Ρ‹.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ с функциями, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π‘ функциями-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ нас всСгда Π΅ΡΡ‚ΡŒ нСявный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ!

ИспользованиС прСфикса Β«m_Β» для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ². Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ.Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ присвоСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с прСфиксом Β«m_Β», ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ мСняСм состояниС экзСмпляра класса. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пСрСмСнная с прСфиксом Β«m_Β», ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса, Π° Π½Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

По соглашСнию ΠΈΠΌΠ΅Π½Π° классов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹.

НазовитС классы, начиная с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹.

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ класса:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

14

18

19

20

21

22

23

24

25

26

27

28

29

31

9000

#include

#include

class Employee

{

public:

std :: string m_name {};

int m_id {};

двойная ΠΌ_Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° {};

// Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сотрудниках Π½Π° экран

void print ()

{

std :: cout << "Имя:" << m_name <<

"Id:" << m_id <<

"Заработная ΠΏΠ»Π°Ρ‚Π°: $" << m_wage << '\ n';

}

};

int main ()

{

// ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΄Π²ΡƒΡ… сотрудников

Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ alex {"Alex", 1, 25.00};

Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ Π”ΠΆΠΎ {"Π”ΠΆΠΎ", 2, 22.25};

// Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сотрудникС

alex.print ();

joe.print ();

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;

}

Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

 Имя: АлСкс Id: 1 Заработная ΠΏΠ»Π°Ρ‚Π°: 25 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²
Имя: Π”ΠΆΠΎ Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: 2 Заработная ΠΏΠ»Π°Ρ‚Π°: 22,25 Π΄ΠΎΠ»Π»Π°Ρ€Π°
 

Π‘ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ функциями, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, функция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Β«Π½ΠΈΠΆΠ΅Β» (Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ объявлСния):

void x ()

{

// Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ y () ΠΎΡ‚ΡΡŽΠ΄Π°, Ссли компилятор ΡƒΠΆΠ΅ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Π» Ρ„ΠΎΡ€Π²Π°Ρ€Π΄Π½ΠΎΠ΅ объявлСниС для y ()

}

void y ()

{

}

Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ дСйствуСт:

class foo

{

public:

void x () {y (); } // здСсь ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ y (), Π΄Π°ΠΆΠ΅ Ссли y () Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΠΎΠ·ΠΆΠ΅ Π² этом классС

void y () {};

};

Π’ΠΈΠΏΡ‹ элСмСнтов

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

14

18

19

20

21

22

23

24

25

26

27

28

29

30

34

#include

#include

class Calculator

{

public:

using number_t = int; // это псСвдоним Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°

std :: vector m_resultHistory {};

number_t add (number_t a, number_t b)

{

автоматичСский Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ {a + b};

m_resultΠ˜ΡΡ‚ΠΎΡ€ΠΈΡ.push_back (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚);

Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

}

};

int main ()

{

ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€-ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ {};

std :: cout << Calculator.add (3, 4) << '\ n'; // 7

std :: cout << Calculator.add (99, 24) << '\ n'; // 123

для (Calculator :: number_t result: calculator.m_resultHistory)

{

std :: cout << result << '\ n';

}

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;

}

Π’Ρ‹Ρ…ΠΎΠ΄

 7
123
7
123
 

Π’ Ρ‚Π°ΠΊΠΎΠΌ контСкстС имя класса эффСктивно дСйствуСт ΠΊΠ°ΠΊ пространство ΠΈΠΌΠ΅Π½ для Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.Π˜Π·Π½ΡƒΡ‚Ρ€ΠΈ класса Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылка number_t . ИзвнС класса ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‚ΠΈΠΏΡƒ Ρ‡Π΅Ρ€Π΅Π· Calculator :: number_t .

Когда ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ int большС Π½Π΅ удовлСтворяСт нашим трСбованиям, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ double , Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ псСвдоним Ρ‚ΠΈΠΏΠ°, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ int Π½Π° double .

Π§Π»Π΅Π½Ρ‹ псСвдонима Ρ‚ΠΈΠΏΠ° ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ сопровоТдСниС ΠΊΠΎΠ΄Π° ΠΈ ΡΠΎΠΊΡ€Π°Ρ‰Π°ΡŽΡ‚ Π½Π°Π±ΠΎΡ€ тСкста.ΠšΠ»Π°ΡΡΡ‹ шаблонов, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅, часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ элСмСнты псСвдонима Ρ‚ΠΈΠΏΠ°. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ это ΠΊΠ°ΠΊ std :: vector :: size_type , Π³Π΄Π΅ size_type - это псСвдоним для Ρ†Π΅Π»ΠΎΠ³ΠΎ числа Π±Π΅Π· Π·Π½Π°ΠΊΠ°.

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

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ структурах Π² C ++

Π’ C структуры ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ связанных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ². Π’ C ++ послС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ классов (с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class) Π‘ΡŒΡΡ€Π½ Бтрауструп ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π° Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, слСдуСт Π»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ структурам (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ унаслСдованы ΠΎΡ‚ C) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹. ΠŸΠΎΡ€Π°Π·ΠΌΡ‹ΡΠ»ΠΈΠ², ΠΎΠ½ Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ частично ΠΈΠΌΠ΅Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» для ΠΎΠ±ΠΎΠΈΡ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, хотя ΠΌΡ‹ написали Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct.

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

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово struct для структур Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Ρ‹ ΡƒΠΆΠ΅ использовали классы, Π½Π΅ зная ΠΎΠ± этом

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C ++ ΠΏΠΎΠ»Π½Π° классов, созданных для вашСго удобства. std :: string, std :: vector ΠΈ std :: array - это всС Ρ‚ΠΈΠΏΡ‹ классов! Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого ΠΈΠ· этих Ρ‚ΠΈΠΏΠΎΠ², Π²Ρ‹ создаСтС экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса. И ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с использованиСм этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½.

#include

#include

#include

#include

int main ()

{

std :: string s {"ЗдравствуйтС, ΠœΠΈΡ€!" }; // созданиС экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° строкового класса

std :: array a {1, 2, 3}; // создаСм экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса массива

std :: vector v {1.1, 2.2, 3.3}; // созданиС экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ класса

std :: cout << "length:" << s.length () << '\ n'; // Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π°

return 0;

}

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

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class позволяСт Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ Π² C ++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹, Ρ‚Π°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹. ΠšΠ»Π°ΡΡΡ‹ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ основу ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Ρ‡Π°ΡΡ‚ΡŒ этой Π³Π»Π°Π²Ρ‹ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π³Π»Π°Π²Ρ‹, исслСдуя всС, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ!

ВрСмя Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹

Π°) Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ IntPair, содСрТащий Π΄Π²Π° Ρ†Π΅Π»Ρ‹Ρ… числа.Π­Ρ‚ΠΎΡ‚ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ для хранСния Ρ†Π΅Π»Ρ‹Ρ… чисСл. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹: ΠΎΠ΄Π½Ρƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«setΒ», которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ значСния Ρ†Π΅Π»Ρ‹ΠΌ числам, ΠΈ ΠΎΠ΄Π½Ρƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«printΒ», которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π”ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ основная функция:

int main ()

{

IntPair p1;

ΠΏ1.Π½Π°Π±ΠΎΡ€ (1, 1); // устанавливаСм значСния p1 Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ (1, 1)

IntPair p2 {2, 2}; // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ значСния p2 Π² (2, 2)

p1.Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ();

p2.print ();

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;

}

ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄:

 ΠŸΠ°Ρ€Π° (1, 1)
ΠŸΠ°Ρ€Π° (2, 2)
 

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

1

2

3

4

5

6

7

8

9

10

11

12

13

14

14

18

19

20

21

22

23

24

25

26

27

28

29

31

9000

#include

class IntPair

{

public:

int m_first {};

int m_second {};

void set (int first, int second)

{

m_first = first;

ΠΌ_сСкунда = сСкунда;

}

void print ()

{

std :: cout << "Pair (" << m_first << "," << m_second << ") \ n";

}

};

int main ()

{

IntPair p1;

ΠΏ1.Π½Π°Π±ΠΎΡ€ (1, 1);

IntPair p2 {2, 2};

p1.print ();

p2.print ();

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;

}

(Ρ‡ / Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ Пашка 2107 Π·Π° идСю Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹)

Π±) ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс для IntPair вмСсто структуры?

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹, Ρ‚Π°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, поэтому ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс. ΠœΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуры для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹.

классов (ООП) | БлСстящая Π²ΠΈΠΊΠΈ ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ Π½Π°ΡƒΠΊΠ΅

БозданиС класса

Π’ Python классы ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом class , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя класса. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ class опрСдСляСт Π½ΠΎΠ²Ρ‹ΠΉ класс Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ def опрСдСляСт Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ простой класс, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Brilliant.

  класс brilliant ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚):
  

ΠœΠ΅Ρ‚ΠΎΠ΄ конструктора

ПослС объявлСния ΠΈΠΌΠ΅Π½ΠΈ класса программист Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ конструктора .Π’ Python это обозначаСтся __init __ () . Ѐункция __init__ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ self Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ТСланию программиста. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΌ блСстящих ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, программист Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ имя, возраст ΠΈ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Имя __init __ () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Β«ΠΌΠ΅Ρ‚ΠΎΠ΄Π° конструктора» класса. Π₯отя класс являСтся ΠΏΠ»Π°Π½ΠΎΠΌ для Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, программисту ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ значСния этого Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ функциям.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ конструктор создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, запускаСт ΠΊΠΎΠ΄ Π² конструкторС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎ строка user = brilliantUser ('Mursalin', 17, 4). НСзависимо ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ класса конструктор всСгда называСтся __init__ .

Пока Ρƒ нас

  класс brilliant ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚):
    def __init __ (я, имя, возраст, Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³):
  

Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ΅ опрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ для класса brilliantUsers.ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… классу.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __init__

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΈ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΈΡ… с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ экзСмпляром класса, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ __init__ создайтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: self.variableName = variableName .

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, связанным с классами, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² . Атрибуты - это характСристики ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.ΠœΠ΅Ρ‚ΠΎΠ΄ __init __ () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ - это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ - это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса начинаСтся со ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-экзСмпляр. По соглашСнию это называСтся «я».

Π’ Python ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² являСтся self . ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ self ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ². Π’Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ значСния Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ экзСмпляра класса, ΠΊΠ°ΠΊ self.Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ . Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΌ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ color для car_1 ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ color для car_2 , ΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ машинС своС собствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° , Π½Π°ΠΌ понадобится self .

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-конструктора для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Brilliant выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  self.name = name
self.age = возраст
self.rating = Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³
  

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ создаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, созданного конструктором.ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с self , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π° Π½Π΅ просто ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅.

Π’ Ρ†Π΅Π»ΠΎΠΌ класс для описания блСстящих ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ выглядит Ρ‚Π°ΠΊ:

  класс brilliant ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚):
    def __init __ (я, имя, возраст, Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³):
      self.name = имя
      self.age = возраст
      self.rating = Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³

# ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ блСстящий ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ


user = brilliantUser ('ΠœΡƒΡ€ΡΠ°Π»ΠΈΠ½', 17, 4)
  

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра

ЭкзСмпляр - это особый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, созданный ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса.Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляры класса, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ класс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя класса ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π»ΡŽΠ±Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__ - Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ имя , возраст ΠΈ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ .

  user = brilliantUser ('ΠœΡƒΡ€ΡΠ°Π»ΠΈΠ½', 17, 4)
  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса brilliantUser . Или, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΌΡ‹ создаСм экзСмпляр класса brilliantUser .

13 ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

13 ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π­Ρ‚Π° Π³Π»Π°Π²Π° основана Π½Π° ΡΡ‚Π°Ρ‚ΡŒΠ΅ [Flatt06].

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ класса ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ пСрвоклассноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅,
Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

(class superclass-expr decl-or-expr ...)

superclass-expr опрСдСляСт супСркласс для Π½ΠΎΠ²ΠΎΠ³ΠΎ
класс. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ decl-or-expr являСтся Π»ΠΈΠ±ΠΎ объявлСниСм, относящимся ΠΊ
ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, поля ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΠ»ΠΈ это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ оцСниваСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° создаСтся экзСмпляр класса.Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ
слов, вмСсто конструктора, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, класс ΠΈΠΌΠ΅Π΅Ρ‚
выраТСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Π΅Ρ€Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ с ΠΏΠΎΠ»Π΅ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ
Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ.

По соглашСнию ΠΈΠΌΠ΅Π½Π° классов Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π°%. ВстроСнный ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ класс
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚%. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ создаСт класс с
общСдоступныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ get-size, grow ΠΈ eat:

(define public (grow amt)

(ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса%
(Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ); Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
(ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°); ΠΏΠΎΠ»Π΅
(супСр-Π½ΠΎΠ²Ρ‹ΠΉ); инициализация супСркласса
(define / public (get-size)
current-size)
(set! current-size (+ amt current-size)))
(define / public (eat other-fish)
(grow (send other-fish get-size))))

АргумСнт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈ создании экзСмпляра класса Ρ‡Π΅Ρ€Π΅Π· Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:

(Π½ΠΎΠ²Ρ‹ΠΉ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса% (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ)....) [Ρ€Π°Π·ΠΌΠ΅Ρ€ 10])

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ класс ΠΈ Π΅Π³ΠΎ экзСмпляр:

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ fish% Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ - это
частноС ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ начинаСтся со значСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. АргумСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€
доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя создания экзСмпляра класса, поэтому ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ
ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ нСпосрСдствСнно ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ПолС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²
Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², доступны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (супСр-Π½ΠΎΠ²ΠΎΠ΅) Π² fish% Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚
инициализация супСркласса.Π’ этом случаС супСрклассом являСтся
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚%, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ выполняСт
Π½Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹; Π² любом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ супСрновый, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ класс Π΄ΠΎΠ»ΠΆΠ΅Π½
всСгда Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ своСго супСркласса.

АргумСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, объявлСния ΠΏΠΎΠ»Π΅ΠΉ ΠΈ выраТСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
(супСрновыС) ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² классС Π² любом порядкС,
ΠΈ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ с объявлСниями ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ
порядок Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² классС опрСдСляСт порядок ΠΎΡ†Π΅Π½ΠΊΠΈ
Π²ΠΎ врСмя создания экзСмпляра. НапримСр, Ссли для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния поля трСбуСтся
Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ супСркласса, Π·Π°Ρ‚Π΅ΠΌ
объявлСниС поля Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ послС супСрнового
Π²Ρ‹Π·ΠΎΠ².Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, упорядочиваниС ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚
ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ задания. ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ порядок объявлСний ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния для ΠΎΡ†Π΅Π½ΠΊΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹
ΠΏΠ΅Ρ€Π΅Π΄ созданиСм экзСмпляра класса.

13.1 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

КаТдоС ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ / ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… объявлСний Π²
fish% прСдставляСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎ ΠΆΠ΅
синтаксис ΠΊΠ°ΠΊ функция Racket, Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ нСдоступСн ΠΊΠ°ΠΊ
нСзависимая функция. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° grow для
Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° fish% трСбуСтся Ρ„ΠΎΡ€ΠΌΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ:

> (ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ charlie grow 6)
> (ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ charlie get-size)

16

Within fish%, ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,
ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² входят Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости.НапримСр, ΡΡŠΠ΅ΡΡ‚ΡŒ
ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² fish% Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ рост
ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
ΠΊΡ€ΠΎΠΌΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ синтаксичСской ошибкС.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, прСдоставляСмыС супСрклассом.
Π½ΠΎ Π½Π΅ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ΠΎ. Π’ этом случаС класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ send
с этим, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ:

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³ΠΎΠ»ΠΎΠ΄-Ρ€Ρ‹Π±Π°% (класс Ρ€Ρ‹Π±Π°% (супСр-Π½ΠΎΠ²Ρ‹ΠΉ)
(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ / общСдоступный (Π΅ΡΡ‚ΡŒ-большС Ρ€Ρ‹Π±Ρ‹2 Ρ€Ρ‹Π±Π°3)
( ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ эту ΡΡŠΠ΅ΡΡ‚ΡŒ Ρ€Ρ‹Π±Ρƒ2)
(ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ эту ΡΡŠΠ΅ΡΡ‚ΡŒ Ρ€Ρ‹Π±Ρƒ3))))

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎ сущСствовании ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ наслСдованиС,
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π²ΠΎΠ΄ΠΈΡ‚ имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия для прямого Π²Ρ‹Π·ΠΎΠ²Π°:

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³ΠΎΠ»ΠΎΠ΄Π½ΡƒΡŽ Ρ€Ρ‹Π±Ρƒ% (класс Ρ€Ρ‹Π±Π°% (супСр-Π½ΠΎΠ²Ρ‹ΠΉ)
(Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅ΡΡ‚ΡŒ)
(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ / public (Π΅ΡΡ‚ΡŒ-большС Ρ€Ρ‹Π±Ρ‹2 Ρ€Ρ‹Π±Ρ‹3)
(Π΅ΡΡ‚ΡŒ Ρ€Ρ‹Π±Ρƒ2) (Π΅ΡΡ‚ΡŒ Ρ€Ρ‹Π±Ρƒ3))))

Π‘ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΎ наслСдовании, Ссли Ρƒ Ρ€Ρ‹Π±Ρ‹% Π½Π΅ Π±Ρ‹Π»ΠΎ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΎ наслСдовании
ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Сст, ошибка Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²
ΠΎΡ†Π΅Π½ΠΊΠ° Ρ„ΠΎΡ€ΠΌΡ‹ класса Π³ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΉ Ρ€Ρ‹Π±Ρ‹%.Π’
Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², с (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это ....) ошибка Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚
сигнализируСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΅ΡˆΡŒΡ‚Π΅ большС ΠΈ
Ρ„ΠΎΡ€ΠΌΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ оцСниваСтся. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ наслСдованиС
ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ нСдостатком send являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠ΅Π½Π΅Π΅ эффСктивСн, Ρ‡Π΅ΠΌ
Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· send Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚
поиск ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² классС Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя выполнСния, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚
send ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° основС интСрфСйса Π² Java. Π’
Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° основС наслСдования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ смСщСниС
Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса, которая вычисляСтся, ΠΊΠΎΠ³Π΄Π° класс
созданный.

Для достиТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° основС наслСдования, ΠΊΠΎΠ³Π΄Π°
вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ·Π²Π½Π΅ класса ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, программист Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
общая Ρ„ΠΎΡ€ΠΌΠ°, которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ зависящиС ΠΎΡ‚ класса ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ send-generic:

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ get-fish (ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Ρ‹Π±Ρ‹%))
> (send-generic charlie get-fish-size)

16

> (send-generic (new hungry-fish% [size 32]) get-fish-size)

32

> (send-generic (Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚%) get-fish-size)

generic: get-size: target Π½Π΅ являСтся экзСмпляром ΠΎΠ±Ρ‰Π΅Π³ΠΎ

класса

target: (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)

имя класса: fish%

Π“Ρ€ΡƒΠ±ΠΎ говоря, Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ класс ΠΈ внСшний
имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² мСсто Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса.Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ
Π² послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ провСряСт, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ
АргумСнт являСтся экзСмпляром ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ класса.

ВызываСтся Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ нСпосрСдствСнно Π² классС,
Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄,
ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

)

> (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ daisy eat charlie)
> (send daisy

32

ΠœΠ΅Ρ‚ΠΎΠ΄ выращивания Π²% Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²ΠΎΠΉ Ρ€Ρ‹Π±Ρ‹ заявлСн с
ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ / ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ вмСсто опрСдСлСния / общСдоступного, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ
Grow подразумСваСтся ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠ΅ объявлСниС.Если вырастСт
Π±Ρ‹Π» объявлСн с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ define / public, ошибка Π±ΡƒΠ΄Π΅Ρ‚
Π±Ρ‹Π» сигнализирован ΠΏΡ€ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ΅ выраТСния класса, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ
Ρ€Ρ‹Π±Ρ‹% ΡƒΠΆΠ΅ запасы растут.

ИспользованиС опрСдСлСния / пСрСопрСдСлСния Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ
ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ супСрвызова. НапримСр,
рСализация Grow Π²% Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
super для дСлСгирования Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ супСркласса.

13.2 АргумСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π’Π°ΠΊ ΠΊΠ°ΠΊ picky-fish% Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π»ΡŽΠ±Ρ‹Π΅
значСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, прСдоставлСнныС Π² (new picky-fish%....) находятся
распространяСтся Π½Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ супСркласса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° fish%.
Подкласс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для своСго
супСркласс Π² супСр-Π½ΠΎΠ²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, ΠΈ такая инициализация
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² new. Для
НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс size-10-fish% всСгда Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚
Ρ€Ρ‹Π±Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10:

Π’ случаС Ρ€Π°Π·ΠΌΠ΅Ρ€Π°-10-fish%, прСдоставлСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ
ошибка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ; ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² супСр-Π½ΠΎΠ²ΠΎΠΌ
ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ€Π°Π·ΠΌΠ΅Ρ€, поставляСмый Π² Π½ΠΎΠ²Ρ‹ΠΉ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ
Π½Π΅Ρ‚ объявлСния Ρ†Π΅Π»ΠΈ.

АргумСнт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли Ρ„ΠΎΡ€ΠΌΠ° класса
ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ default-10-fish%
класс ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½ΠΎ
10, Ссли ΠΏΡ€ΠΈ создании экзСмпляра Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ:

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ default-10-fish% (class fish%
(init [size 10])
(super-new [size) Ρ€Π°Π·ΠΌΠ΅Ρ€])))
> (Π½ΠΎΠ²Ρ‹ΠΉ default-10-fish%)

(object: default-10-fish%...)

> (Π½ΠΎΠ²Ρ‹ΠΉ default-10-fish% [size 20])

(object: default-10-fish% ...)

In Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ супСр-Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² распространяСт свой собствСнный
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° для
супСркласс.

13.3 Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΈ внСшнСС ΠΈΠΌΠ΅Π½Π°

Π”Π²Π° использования Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² default-10-fish% Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚
двойная Тизнь ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π»Π΅Π½ΠΎΠ² класса. Когда Ρ€Π°Π·ΠΌΠ΅Ρ€
ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΠΏΠ°Ρ€Ρ‹ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ»ΠΈ
супСр-Π½ΠΎΠ²Ρ‹ΠΉ, Ρ€Π°Π·ΠΌΠ΅Ρ€ - внСшнСС имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅
символичСски соотвСтствуСт Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² классС.Когда
Ρ€Π°Π·ΠΌΠ΅Ρ€ отобраТаСтся ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ
default-10-fish%, Ρ€Π°Π·ΠΌΠ΅Ρ€ - Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ имя
это лСксичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ² унаслСдованного
ΠœΠ΅Ρ‚ΠΎΠ΄ eat ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π² качСствС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ eat, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ
send of eat ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ eat ΠΊΠ°ΠΊ внСшнСС имя.

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

13.4 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ класс
Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ (ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌΡ‹ΠΌ) ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ.
Π’Π°ΠΊΠΎΠ΅ использованиС интСрфСйсов ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π°ΠΆΠ΅ Π±Π΅Π· систСмы статичСских Ρ‚ΠΈΠΏΠΎΠ².
(Ρ‡Ρ‚ΠΎ являСтся основной ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ Java Π΅ΡΡ‚ΡŒ интСрфСйсы).

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π² Racket создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйса
Ρ„ΠΎΡ€ΠΌΠ°, которая просто ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
интСрфСйс. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрфСйсы, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ
Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ
интСрфСйсы.

(interface (superinterface-expr ...) id ...)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс,
ВмСсто class Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ class *:

(class * superclass-expr (interface-expr ...) decl-or-expr ...)

НапримСр, вмСсто ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ всСх классов Ρ€Ρ‹Π± Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΎΡ‚
fish%, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ fish-интСрфСйс ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
fish%, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚
fish-interface:

Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ fish% Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚
ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ увСличСния, роста ΠΈ употрСблСния, Π·Π°Ρ‚Π΅ΠΌ
ошибка сигнализируСтся ΠΏΡ€ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ class *,
ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса fish-interface трСбуСтся
эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π­Ρ‚ΠΎ Π°? ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°
ΠΈ Π»ΠΈΠ±ΠΎ класс, Π»ΠΈΠ±ΠΎ интСрфСйс Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Когда даСтся
класс, это-Π°? провСряСт, являСтся Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ экзСмпляром этого
класс ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс. Когда прСдоставляСтся интСрфСйс, являСтся Π»ΠΈ?
провСряСт, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° интСрфСйс. Π’
ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, рСализация? ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ провСряСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ
Π΄Π°Π½Π½Ρ‹ΠΉ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ интСрфСйс.

13.5 Final, Augment ΠΈ Inner

Как ΠΈ Π² Java, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Ρ„ΠΎΡ€ΠΌΠ΅ класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ
final, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ подкласс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ
ΠΌΠ΅Ρ‚ΠΎΠ΄.ПослСдний ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ public-final ΠΈΠ»ΠΈ
override-final, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Π»ΠΈ объявлСниС для
Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰Π°Ρ рСализация.

ΠœΠ΅ΠΆΠ΄Ρƒ крайностями Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈ запрСщСния
ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ пСрСопрСдСляя, систСма классов Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π΅Ρ‚Π°-ΡΡ‚ΠΈΠ»ΡŒ
Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ [Goldberg04]. ΠœΠ΅Ρ‚ΠΎΠ΄
ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pubment ΠΏΠΎΡ…ΠΎΠΆ Π½Π° общСдоступный, Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄
нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² подклассах; Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ. А
ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ явно Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ (Ссли Π΅ΡΡ‚ΡŒ)
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ; подкласс дополняСт ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ
ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ, Π° Π½Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ дополнСния ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ Π²
ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅ класса. БпСцификация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° augride
ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ само ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² подклассах (хотя рСализация супСркласса
Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½). Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄
ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠΉ.

13.6 Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ объСмом Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΈΠΌΠ΅Π½

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа Java (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, protected)
ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ€ΠΎΠ»ΡŒ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ define-member-name, Π½ΠΎ
Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Java, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Racket для контроля доступа
основан Π½Π° лСксичСской области видимости, Π° Π½Π΅ Π½Π° ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования.

Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²ΠΎ Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΈ Π’Π½Π΅ΡˆΠ½ΠΈΡ… ΠΈΠΌΠ΅Π½Π°Ρ…, Ρ‡Π»Π΅Π½Ρ‹ класса ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Π°
Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΈ внСшниС ΠΈΠΌΠ΅Π½Π°. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‡Π»Π΅Π½Π° связываСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ
имя локально, ΠΈ эту привязку ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ локально. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ
ΠΈΠΌΠ΅Π½Π°, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅ΡŽΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π° Ρ‡Π»Π΅Π½
ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ связываСт внСшнСС имя. ВмСсто этого Ρ‡Π»Π΅Π½
ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ относится ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ привязкС для внСшнСго ΠΈΠΌΠ΅Π½ΠΈ, Π³Π΄Π΅
имя Ρ‡Π»Π΅Π½Π° привязано ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ Ρ‡Π»Π΅Π½Π°; класс Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅
сопоставляСт ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, полями ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ВспомнитС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ класса «голодная Ρ€Ρ‹Π±Π°%Β»:

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅% Π³ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΉ Ρ€Ρ‹Π±Ρ‹ (класс Ρ€Ρ‹Π±Ρ‹% ....
(Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅ΡΡ‚ΡŒ)
(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ / общСдоступно (Π΅ΡΡ‚ΡŒ-большС) Ρ€Ρ‹Π±Π°2 Ρ€Ρ‹Π±Π°3)
(Π΅ΡΡ‚ΡŒ Ρ€Ρ‹Π±Ρƒ2) (Π΅ΡΡ‚ΡŒ Ρ€Ρ‹Π±Ρƒ3))))

Π’ΠΎ врСмя ΠΎΡ†Π΅Π½ΠΊΠΈ, Π³ΠΎΠ»ΠΎΠ΄Π½Ρ‹Π΅ Ρ€Ρ‹Π±Ρ‹% ΠΈ Ρ€Ρ‹Π±Π°%
классы относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ глобальной привязкС eat. На Π±Π΅Π³Ρƒ
врСмя, ΠΏΡ€ΠΈΠ·Ρ‹Π²Ρ‹ ΠΏΠΎΠ΅ΡΡ‚ΡŒ Π²% Π³ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΉ Ρ€Ρ‹Π±Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с
ΠΌΠ΅Ρ‚ΠΎΠ΄ eat Π² fish% Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄
ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡŠΠ΅ΡΡ‚.

ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для внСшнСго ΠΈΠΌΠ΅Π½ΠΈ являСтся глобальной, Π½ΠΎ
программист ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти привязку внСшнСго ΠΈΠΌΠ΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
Ρ„ΠΎΡ€ΠΌΠ° опрСдСлСния-Ρ‡Π»Π΅Π½Π°-ΠΈΠΌΠ΅Π½ΠΈ.

Π’ частности, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ (generate-member-key) Π² качСствС
member-key-expr, внСшнСС имя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ для
конкрСтная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сгСнСрированный ΠΊΠ»ΡŽΡ‡ Ρ‡Π»Π΅Π½Π° нСдоступСн
Π²Π½Π΅ Ρ€Π°ΠΌΠΎΠΊ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅-Ρ‡Π»Π΅Π½-имя Π΄Π°Π΅Ρ‚
внСшнСС имя своСго Ρ€ΠΎΠ΄Π° Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ области видимости ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·
ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ областям привязки Π² Racket.

НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ классы fish% ΠΈ pond% Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚
с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° получСния Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹, доступного Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для
Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы:

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° находятся Π² пространствС ΠΈΠΌΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ отдСляСт ΠΈΡ… ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Racket
ΠΈΠΌΠ΅Π½Π°. Π­Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½ нСявно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²
send, для ΠΈΠΌΠ΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΈΠ»ΠΈ для
внСшнСС имя Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‡Π»Π΅Π½Π°. Особая Ρ„ΠΎΡ€ΠΌΠ°
ΠΊΠ»ΡŽΡ‡-имя-Ρ‡Π»Π΅Π½ обСспСчиваСт доступ ΠΊ привязкС внСшнСго ΠΈΠΌΠ΅Π½ΠΈ
Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ выраТСния: (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€-имя-Ρ‡Π»Π΅Π½Π°)
ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ привязку ΠΊΠ»ΡŽΡ‡Π° Ρ‡Π»Π΅Π½Π° ΠΊ id Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°-Ρ‡Π»Π΅Π½Π° Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с
Ρ„ΠΎΡ€ΠΌΠ° опрСдСлСния-Ρ‡Π»Π΅Π½Π°-ΠΈΠΌΠ΅Π½ΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π°
(member-name-key id) фиксируСт ΠΊΠ»ΡŽΡ‡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° id
Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ опрСдСлСния-Ρ‡Π»Π΅Π½Π°-ΠΈΠΌΠ΅Π½ΠΈ
Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ объСмС. Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ оказываСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для
ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ миксины, ΠΊΠ°ΠΊ обсуТдаСтся Π΄Π°Π»Π΅Π΅.

13.7 Mixins

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс - это Ρ„ΠΎΡ€ΠΌΠ° выраТСния, Π° Π½Π΅ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ
объявлСниС, ΠΊΠ°ΠΊ Π² Smalltalk ΠΈ Java, Ρ„ΠΎΡ€ΠΌΠ° класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
Π²Π»ΠΎΠΆΠ΅Π½ Π² Π»ΡŽΠ±ΡƒΡŽ Π»Π΅ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ лямбда.Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
прСдставляСт собой миксин, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ класса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ
ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ своСго супСркласса.

НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс% ΠΏΡ€ΠΈΠ΄ΠΈΡ€Ρ‡ΠΈΠ²ΠΎΠΉ Ρ€Ρ‹Π±Ρ‹ Ρ‡Π΅Ρ€Π΅Π·
Π΅Π³ΠΎ супСркласс для опрСдСлСния Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²ΠΎΠΉ смСси:

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΌΠ΅Π»ΠΊΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ классами Π² стилС Smalltalk ΠΈ Racket
классы ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚ эффСктивному использованию миксинов. Π’ частности,
использованиС опрСдСлСния / пСрСопрСдСлСния явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ
Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ-mixin ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ класс с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Grow. Если
Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ миксин примСняСтся ΠΊ классу Π±Π΅Π· увСличСния
ΠΌΠ΅Ρ‚ΠΎΠ΄, ошибка выдаСтся, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ миксин
примСняСмый.

Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, использованиС наслСдования обСспСчиваСт «сущСствованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β».
Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ миксина:

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ миксинов Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для создания
Π½ΠΎΠ²Ρ‹Π΅ классы, совмСстноС использованиС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ вписываСтся Π²
иСрархия с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌ наслСдованиСм - Π±Π΅Π· нСоднозначностСй, связанных с
мноТСствСнноС наслСдованиС. ΠžΡΠ½Π°Ρ‰Π΅Π½ Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΌ миксином ΠΈ
hungry-mixin, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ класс для Π³ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΉ, Π½ΠΎ ΠΏΡ€ΠΈΠ΄ΠΈΡ€Ρ‡ΠΈΠ²ΠΎΠΉ Ρ€Ρ‹Π±Ρ‹
прост:

(define-picky-hungry-fish%
(hungry-mixin (Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ-mixin fish%)))

ИспользованиС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для простого
использованиС миксинов.НапримСр, Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ миксин ΠΈ
hungry-mixin ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ любой класс подходящСй Π΅Π΄ΠΎΠΉ
ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ выращивания, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π½Π΅ добавляйтС Π½ΠΈΡ‡Π΅Π³ΠΎ Π² ΠΈΡ… супСр-Π½ΠΎΠ²Ρ‹Π΅ выраТСния:

НаконСц, использованиС Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΈΠΌΠ΅Π½ для Ρ‡Π»Π΅Π½ΠΎΠ² класса (вмСсто
ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ с лСксичСской ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости) Π΄Π΅Π»Π°Π΅Ρ‚ использованиС миксина ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ миксин с Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ% Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π°
Π΅ΡΡ‚ΡŒ ΠΈ Π²Ρ‹Ρ€Π°Ρ‰ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ‡, Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π°ΠΏΡ€ΠΈΠΎΡ€Π½ΠΎΠ³ΠΎ заявлСния
Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ расти Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π²
Ρ€Ρ‹Π±Π°% ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ%.Π­Ρ‚Π° функция являСтся ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ
нСдостаток, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π° участников случайно ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ; Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ случайныС
ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ² внСшниС ΠΈΠΌΠ΅Π½Π° области, ΠΊΠ°ΠΊ
обсуТдаСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ объСмом Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΈΠΌΠ΅Π½Β».

13.7.1 ΠœΠΈΠΊΡˆΠΈΠ½Ρ‹ ΠΈ интСрфСйсы

ΠŸΡ€ΠΈ использовании Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ?, ΠΏΡ€ΠΈΠ΄ΠΈΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ миксин ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ
Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс садовода, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚
Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ fish%, Ρ‚Π°ΠΊ ΠΈ person%:

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ использованиС интСрфСйсов с миксином - Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ классов, сгСнСрированных
миксин, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ экзСмпляры миксина.Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ
слова, это-Π°? Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с миксином, прСдставлСнным ΠΊΠ°ΠΊ
функция, Π½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ интСрфСйс (Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅
интСрфСйс спСциализации), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ рСализуСтся
миксином. НапримСр, классы, созданныС Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΌ миксином
ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΌ интСрфСйсом, Ρ‡Ρ‚ΠΎ позволяСт
ΠΏΡ€ΠΈΠ΄ΠΈΡ€Ρ‡ΠΈΠ²? ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚:

13.7.2 Π€ΠΎΡ€ΠΌΠ° миксина

Для ΠΊΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ шаблона лямбда-плюс-класс для
рСализация миксинов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ использованиС интСрфСйсов для Π΄ΠΎΠΌΠ΅Π½Π°
ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ миксина, систСма классов прСдоставляСт миксин
макрос:

(mixin (interface-expr...) (interface-expr ...)
decl-or-expr ...)

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ interface-exprs опрСдСляСт Π΄ΠΎΠΌΠ΅Π½
mixin, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½Π°Π±ΠΎΡ€ опрСдСляСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅
это функция, которая провСряСт, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс
пСрвая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ интСрфСйсов-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ создаСт класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ
Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ интСрфСйсов-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π”Ρ€ΡƒΠ³ΠΎΠΉ
трСбования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ унаслСдованных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²
супСркласс, Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ класса
Ρ„ΠΎΡ€ΠΌΠ° миксина.НапримСр:

> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ интСрфСйс (интСрфСйс () Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ?))
> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉ интСрфСйс (интСрфСйс () Π΅ΡΡ‚ΡŒ))
> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ -eater-mixin
(mixin (choosy-interface) (hungry-interface)
(Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ?)
(super-new)
(define / public (eat x)
(cond
[(Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ? X)
(printf "chomp chomp chomp on ~ a.\ n "x)]
[else
(printf" Π― Π½Π΅ Π±Π΅Π· ΡƒΠΌΠ° ΠΎΡ‚ ~ a. \ n "x)]))))
> ( ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅% сСлСдочника (Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΉ-Π΅Π΄ΠΎΠΊ-ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΡŒ сСльди%))
> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π΅Π΄ΠΎΠΊΠ° (Π½ΠΎΠ²Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-сСлСдочник%))
> (ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π΅Π΄ΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ "Π±ΡƒΠ·ΠΈΠ½Π°")

Π― Π½Π΅ Π² восторгС ΠΎΡ‚ Π±ΡƒΠ·ΠΈΠ½Ρ‹

> (ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒ ΠΏΠΎΠ΅Π΄Π°Ρ‚Π΅Π»ΡŒ ΡΡŠΠ΅ΡΡ‚ΡŒ "сСлСдку")

ΠΏΠΎΡ‰ΠΈΠΏΠ°Ρ‚ΡŒ ΠΏΠΎΡ‰ΠΈΠΏΠ°Ρ‚ΡŒ сСлСдку.

> (ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π΅Π΄ΠΎΠΊΠ° ΡΡŠΠ΅ΡΡ‚ΡŒ "ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅ ΠΈΠ· сСльди")

chomp chomp chomp chomp on herring ice cream.

ΠœΠΈΠΊΡΠΈΠ½Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ вводят общСдоступныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ½ΠΈ
ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ
отмСняСмоС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠ³ΠΎ пСрСопрСдСлСния - всС
Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ класс (см. Final, Augment ΠΈ Inner).

13.7.3 ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠΈΠΊΡˆΠ΅Ρ€Ρ‹

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΈΠΌΠ΅Π½Β», внСшниС ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ связаны с
ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ-имя-Ρ‡Π»Π΅Π½Π°.Π­Ρ‚ΠΎ срСдство позволяСт миксину Π±Ρ‹Ρ‚ΡŒ
ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Ρ‹ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ опрСдСляСт ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚. Для
НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉ миксин ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
внСшний ΠΊΠ»ΡŽΡ‡-Ρ‡Π»Π΅Π½ для eat:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π³ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉ миксин, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ
ΠΊΠ»ΡŽΡ‡-Ρ‡Π»Π΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ относится ΠΊ подходящСму
eat, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡-имя-Ρ‡Π»Π΅Π½Π°:

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ примСняСм hungry-mixin ΠΊ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌΡƒ классу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт
Π΅ΡΡ‚ΡŒ, Π½ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с классом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт
chomp вмСсто:

13.8 Traits

Trait ΠΏΠΎΡ…ΠΎΠΆ Π½Π° миксин Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ инкапсулируСт Π½Π°Π±ΠΎΡ€
ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² класс. Π§Π΅Ρ€Ρ‚Π° отличаСтся ΠΎΡ‚ примСси
Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²
Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ trait-sum (ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄Π²ΡƒΡ… Ρ‡Π΅Ρ€Ρ‚), trait-exclude
(ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°) ΠΈ псСвдоним ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° (Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ копию
ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ; Π½Π΅ пСрСнаправляйтС Π·Π²ΠΎΠ½ΠΊΠΈ Π½Π° староС имя).

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ миксинами ΠΈ Ρ‚Ρ€Π΅ΠΉΡ‚Π°ΠΌΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π²Π° Ρ‚Ρ€Π΅ΠΉΡ‚Π°
ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Π΄Π°ΠΆΠ΅ Ссли
Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.Π’ этом случаС
программист Π΄ΠΎΠ»ΠΆΠ΅Π½ явно Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ псСвдонима
ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈ объСдиняя Π½ΠΎΠ²ΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚
псСвдонимы.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, наш программист fish% Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π° класса
Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, пятна ΠΈ полосы, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…
Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ получСния Ρ†Π²Π΅Ρ‚Π°. ΠŸΡΡ‚Π½ΠΈΡΡ‚Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ Ρ€Ρ‹Π±Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ полосы ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚; вмСсто этого
пятна + полосы-Ρ€Ρ‹Π±Π°% Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ Π΄Π²Π° Ρ†Π²Π΅Ρ‚Π°, Ρ‡Ρ‚ΠΎ
Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли пятна ΠΈ полосы Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ
простыС миксины.Если всС ΠΆΠ΅ пятна ΠΈ полосы
Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Ρ‚Ρ‹, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ псСвдоним
ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ характСристикС ΠΊ Π½Π΅ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ,
ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ get-color ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· ΠΎΠ±ΠΎΠΈΡ…, Π° Ρ‡Π΅Ρ€Ρ‚Ρ‹
Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с псСвдонимами. НаконСц, новая Ρ‡Π΅Ρ€Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания
класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π²ΠΎΠ΄ΠΈΡ‚ свой собствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ получСния Ρ†Π²Π΅Ρ‚Π° Π½Π° основС
Π΄Π²Π° псСвдонима, производящиС ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ пятна + Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ полос.

13.8.1 Π§Π΅Ρ€Ρ‚Ρ‹ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€Ρ‹ миксинов

Один СстСствСнный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Ρ‚ Π² Racket - это Π½Π°Π±ΠΎΡ€
миксинов, с ΠΎΠ΄Π½ΠΈΠΌ миксином Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°.НапримСр, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹
ΠΏΠΎΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ пятСн ΠΈ полос ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ
списки ассоциаций для прСдставлСния Π½Π°Π±ΠΎΡ€ΠΎΠ²:

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пятна-ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°
(список (cons 'get-color
(лямбда (%) (класс% (супСр-Π½ΠΎΠ²Ρ‹ΠΉ)
( define / public (get-color)
'black))))))
(define stripes-trait
(list (cons' get-color
(lambda (%) (class% (super-new)
(define / public (get-color)
'red))))))

. сумма ΠΈ
trait-exclude простыми манипуляциями; ΠΊ соТалСнию, это Ρ‚Π°ΠΊ
Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ trait-alias.Π₯отя миксин ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
дублируСтся Π² спискС ассоциаций, миксин ΠΈΠΌΠ΅Π΅Ρ‚ фиксированноС имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°,
Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, get-color ΠΈ миксины Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
опСрация. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ псСвдоним ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ
ΠΏΠΎΠ΄ΠΌΠ΅ΡˆΠΈΠ²Π°Π΅Ρ‚ имя внСшнСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ eat
Π±Ρ‹Π» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… миксинах.

Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ trait-alias, пятна-Ρ‡Π΅Ρ€Ρ‚Π°
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΠΊΠ°ΠΊ:

Когда ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ get-color Π² пятнах-ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ΅ примСняСтся псСвдоним
для получСния-Ρ†Π²Π΅Ρ‚Π°-Ρ‡Π΅Ρ€Ρ‚Ρ‹, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ получСния-Ρ†Π²Π΅Ρ‚Π° -
ΡƒΠ΄Π°Π»Π΅Π½, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ T ΠΊ классу C ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ
class, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ((trait-> mixin T) C).Π§Π΅Ρ€Ρ‚Π°-> миксин
функция снабТаСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ миксин T ΠΊΠ»ΡŽΡ‡ΠΎΠΌ для миксина
ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ частичноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ C:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π²Ρ‹ΡˆΠ΅ сочСтаСтся с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°ΠΌΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ
ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ классу использованиС get-color становится ссылкой
ΠΊ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ get-trait-color.

13.8.2 Inherit and Super in Traits

Π­Ρ‚Π° пСрвая рСализация Ρ‚Ρ€Π΅ΠΉΡ‚ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ trait-alias, ΠΈ это
ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‡Π΅Ρ€Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сам сСбя, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚
ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.Π’ частности, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ пятнистая Ρ€Ρ‹Π±Π°
рыночная ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ зависит ΠΎΡ‚ Ρ†Π²Π΅Ρ‚Π° Π΅Π³ΠΎ пятСн:

)

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ пятно-ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ
(список (минусы (имя-Ρ‡Π»Π΅Π½Π°-ΠΊΠ»ΡŽΡ‡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ-Ρ†Π²Π΅Ρ‚) ....)
(минусы ( имя-Ρ‡Π»Π΅Π½Π°-ΠΊΠ»ΡŽΡ‡ get-price)
(лямбда (get-price%) ....
(class% ....
(define / public (get-price)
.... (get-color) ....))))))

Π’ этом случаС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пятна-ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° Π½Π΅ выполняСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ
Get-Color Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Get-Price
миксин. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π² зависимости ΠΎΡ‚ порядка примСнСния миксина, ΠΊΠΎΠ³Π΄Π°
trait примСняСтся ΠΊ классу, ΠΌΠ΅Ρ‚ΠΎΠ΄ get-color Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
доступно, ΠΊΠΎΠ³Π΄Π° ΠΊ классу примСняСтся миксин get-price.
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ объявлСния (наслСдованиС get-color) ΠΊ
ΠŸΡ€ΠΈΠΌΠ΅ΡΡŒ get-price Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Одно ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ - ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ использования (ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ этот Ρ†Π²Π΅Ρ‚) Π²
Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ get-price.Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ
send всСгда ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ поиск ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚
ΠΎΡ†Π΅Π½Π΅Π½. ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ поиск Π΄ΠΎΡ€ΠΎΠΆΠ΅ прямого Π²Ρ‹Π·ΠΎΠ²Π°,
Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½ΠΈΠ΅. Π₯ΡƒΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ, это Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ get-color
Π΄Π°ΠΆΠ΅ сущСствуСт.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ эффСктивноС ΠΈ дСйствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ.
Ρ‡Π΅Ρ€Ρ‚. Π’ частности, ΠΌΡ‹ прСдставляСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Ρ‹ миксинов:
ΠΎΠ΄Π½Π° прСдставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° другая - Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚. Когда
примСняСтся ΠΊ классу, всС примСси, вводящиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹,
примСняСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.Π’ΠΎΠ³Π΄Π° миксины, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ для прямого доступа ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Ρ‚Ρƒ пятна
(list (list (local-member-name-key get-color)
(lambda (get-color get-price%) ....
(class% ....
(define / public (get-color) (void)))
(lambda (get-color get-price%)....
(class% ....
(define / override (get-color) 'black))))
(list (local-member-name-key get-price )
(лямбда (get-price get-color%) ....
(class% ....
(define / public (get-price) (void))))
(лямбда (get-color, get-price%)....
(класс% ....
(наслСдованиС get-color)
(ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ / ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (get-price)
.... (get-color) ....))))))

Π‘ этой ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° trait-alias добавляСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с
Π½ΠΎΠ²ΠΎΠ΅ имя, Π½ΠΎ ΠΎΠ½ΠΎ Π½Π΅ мСняСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ссылок Π½Π° старый ΠΌΠ΅Ρ‚ΠΎΠ΄.

13.8.3 Π€ΠΎΡ€ΠΌΠ° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°

Π¨Π°Π±Π»ΠΎΠ½ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° явно слишком слоТСн для
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΎΡ€ для прямого использования, Π½ΠΎ ΠΎΠ½ Π»Π΅Π³ΠΊΠΎ кодируСтся Π²
макрос ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°:

(ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°-ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅...)

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π² Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ наслСдования доступны для прямого
ссылка Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ exprs, ΠΈ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прСдоставлСны
Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‡Π΅Ρ€Ρ‚Π°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ
эта Ρ‡Π΅Ρ€Ρ‚Π° Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ примСняСтся.

ИспользованиС этой Ρ„ΠΎΡ€ΠΌΡ‹ вмСстС с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ
trait-sum, trait-exclude, trait-alias ΠΈ
trait-> mixin, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ пятна-Ρ‡Π΅Ρ€Ρ‚Ρ‹ ΠΈ
полосы-Ρ‡Π΅Ρ€Ρ‚Π° ΠΏΠΎ ТСланию.

(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Ρ‚Ρƒ пятна
(Ρ‡Π΅Ρ€Ρ‚Π°
(define / public (get-color) 'black)
(define / public (get-price)... (get-color) ...)))
(define stripes-trait
(trait
(define / public (get-color) 'red)))
(ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ пятна + полосы-Ρ‡Π΅Ρ€Ρ‚Π°
(Ρ‡Π΅Ρ€Ρ‚Π°-сумма
(Ρ‡Π΅Ρ€Ρ‚Π°-ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ (Ρ‡Π΅Ρ€Ρ‚Π°-псСвдоним пятна-Ρ‡Π΅Ρ€Ρ‚Π°
ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ пятна )
get-color)
(trait-exclude (trait-alias stripes-trait
get-color get-stripes-color)
get-color)
trait
(Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ get-spot-color get-stripes-color)
(define / public (get-color)
.... (get-spot-color) .... (get-stripes-color) ....))))
13.9 ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ классов

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ значСниями, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² , ΠΈ ΠΌΡ‹
ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΆΠ΅Π»Π°Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ части Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°ΠΌΠΈ. Π—Π° это,
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ° class / c. Π€ΠΎΡ€ΠΌΠ° class / c ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ
ΠΏΠΎΠ΄Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² ΠΏΠΎ полям ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ:
Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° использованиС Ρ‡Π΅Ρ€Π΅Π· созданныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π»ΠΈΡΡŽΡ‚
подклассы.

13.9.1 ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… классов

Π’ своСй ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ class / c Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ общСдоступныС поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², созданных ΠΈΠ· свСрнутого класса.Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ
Ρ„ΠΎΡ€ΠΌΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° / c, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ общСдоступных ΠΏΠΎΠ»Π΅ΠΉ
ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
animal%, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π² качСствС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π°:

Для любого экзСмпляра ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ%, доступ ΠΊ полю Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π·Π°Π΄Π°Π½ΠΎ ΠΏΠΎΠ»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°,
Π΅ΠΌΡƒ слСдуСт ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число. НаконСц, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΅Π΄Ρ‹
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ с ΠΏΠΎΠ»Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число.Для обСспСчСния этих условий ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ
класс% animal с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠΌ:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ -> m для описания повСдСния Π΅Π΄Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹
Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ трСбования ΠΊ этому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ класс с ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠΌ, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹
для Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Π΅Π΄Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ:

'большой

> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ камСнь (Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚%))

1-ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

ΠΌΠ΅Ρ‚ΠΎΠ΄ eat Π²

> (define bob (new animal%))
> (set-field! size bob 3)
> (get-field size bob)

3

> (set-field! Size bob 'large)

ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…%: Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°

ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅: ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ / c

in: ΠΏΠΎΠ»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²

(class / c

(Π΅ΡΡ‚ΡŒ

(-> m

000 (-> m

02) / c (ΠΏΠΎΠ»Π΅ (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c)))

Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ?))

(ΠΏΠΎΠ»Π΅ (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c)))

ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΎΡ‚: Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…%)

ΠΎΠ±Π²ΠΈΠ½Π΅Π½ΠΈΠ΅: Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

(ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ)

at: eval: 31.0

> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€ΠΈΡ‡ΠΈ (Π½ΠΎΠ²ΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅%))
> (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΠ± Π΅ΡΡ‚ΡŒ Ρ€ΠΈΡ‡ΠΈ)
> (ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΠΎΠ±Π°)

13

> (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΠ± Π΅ΡΡ‚ΡŒ камСнь)

Π΅ΡΡ‚ΡŒ: Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°;

Π±Π΅Π· Ρ€Π°Π·ΠΌΠ΅Ρ€Π° общСдоступного поля

Π²: 1-ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

ΠΌΠ΅Ρ‚ΠΎΠ΄ eat Π²

(class / c

(-> m

(ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ / c (ΠΏΠΎΠ»Π΅ (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c)))

пусто?)

(Ρ€Π°Π·ΠΌΠ΅Ρ€ поля ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c)))

ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΎΡ‚: (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ%)

ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π°: ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅%

ΠΎΠ±Π²ΠΈΠ½Π΅Π½ΠΈΠ΅: Π²Ρ‹ΡΡˆΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ)

at: eval: 31.0

> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³ΠΈΠ³Π°Π½Ρ‚ (Π½ΠΎΠ²Ρ‹ΠΉ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса% (супСр-Π½ΠΎΠ²Ρ‹ΠΉ) (ΠΏΠΎΠ»Π΅ [Ρ€Π°Π·ΠΌΠ΅Ρ€ 'большой]))))
> (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΠ± Π΅ΡΡ‚ΡŒ Π³ΠΈΠ³Π°Π½Ρ‚)

Π΅ΡΡ‚ΡŒ: Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°

ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅: ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ / c

заданноС: 'большоС

Π²: ΠΏΠΎΠ»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²

(class / c

(eat

(-> m

(Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° / c (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° / c) )))

Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ?))

(ΠΏΠΎΠ»Π΅ (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c)))

ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΎΡ‚: (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ%) 900 06

ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π°: ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅%

ΠΎΠ±Π²ΠΈΠ½Π΅Π½ΠΈΠ΅: Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

(ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ)

ΠΏΡ€ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ΅: 31.0

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

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, эти ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ подклассы ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…%
Π² любом случаС. Поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ подклассами
Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ этими ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°ΠΌΠΈ, ΠΈ использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² супСркласса
via super Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚
ΠΎΠ±Π° прСдостСрСТСния:

9037 7

> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ слона (Π½ΠΎΠ²ΠΎΠ΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅%))
> (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ слона ΠΏΠΎΠ΅ΡΡ‚ΡŒ (Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚%)

602

Nom nom nom

> (слон Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ с ΠΏΠΎΠ»Π΅)

animal%: Π½Π°Ρ€ΡƒΡˆΠΈΠ» собствСнный ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚

ΠΎΠ±Π΅Ρ‰Π°Π»: ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c

9000 ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ большой

in: ΠΏΠΎΠ»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²

(class / c

(Π΅ΡΡ‚ΡŒ

(-> m

000 (-> m

000) c (ΠΏΠΎΠ»Π΅ (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c)))

пусто?))

(ΠΏΠΎΠ»Π΅ (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c))

ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΎΡ‚: (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…%)

ΠΎΠ±Π²ΠΈΠ½Π΅Π½ΠΈΠ΅: (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…%)

(ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ)

at: eval: 31.0

13.9.2 Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ классов

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

Π’ качСствС простого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° доступных Π²ΠΈΠ΄ΠΎΠ² Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ
ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° класс ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…%, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅
Ρ„ΠΎΡ€ΠΌΡ‹:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ класса Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса animal%
Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ подклассы ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…%
Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния Π² ΠΏΠΎΠ»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΡ‚ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ% соотвСтствСнно.Π­Ρ‚ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² Π²Π»ΠΈΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° использованиС Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ
для Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°.

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

c

(класс / c

)

> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свинью (Π½ΠΎΠ²Ρ‹ΠΉ Π½Π΅Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΉ%))
> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ slop1 (Π½ΠΎΠ²ΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅%))
> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠΌΠΎΠΉ2 (Π½ΠΎΠ²ΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ %))
> (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ slop3 (% Π½ΠΎΠ²Ρ‹Ρ… ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…))
> (ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свинью Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΌΠΎΠΈ1)

(ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: animal%...)

> (Ρ€Π°Π·ΠΌΠ΅Ρ€ get-field slop1)

5

> (send pig gulp (list slop1 slop2 slop3))

Π΅ΡΡ‚ΡŒ 9036 Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°

оТидаСтся: Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ?

Π·Π°Π΄Π°Π½ΠΎ: (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅% ...)

Π²: Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅

ΠΌΠ΅Ρ‚ΠΎΠ΄ питания Π²

(

(ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ (Π΅ΡΡ‚ΡŒ

(-> m

(ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ / c

(ΠΏΠΎΠ»Π΅ (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ / c))

000

Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ?))))

ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΎΡ‚: (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΆΠΎΡ€Π°%)

ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π°: ΠΎΠ±ΠΆΠΎΡ€Π°%

ΠΎΠ±Π²ΠΈΠ½Π΅Π½ΠΈΠ΅: (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ sloppy-eater%)

(ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ)

at: eval: 47.0

Помимо ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… здСсь Ρ„ΠΎΡ€ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса, Π΅ΡΡ‚ΡŒ
Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ для Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² стилС Π±Π΅Ρ‚Π°.

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

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