value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ПониманиС lvalue и rvalue в C и Б++

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€! ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ Eli Bendersky, Understanding of lvalues and rvalues in C and C++.

ΠžΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π’Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ интСрСсной ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΠ± lvalue ΠΈ rvalue Π² языках C/C++. Π’Π΅ΠΌΠ° Π½Π΅ Π½ΠΎΠ²Π°, Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± этих понятиях Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ·Π΄Π½ΠΎ. Π‘Ρ‚Π°Ρ‚ΡŒΡ рассчитана Π½Π° Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², Π»ΠΈΠ±ΠΎ Π½Π° программистов пСрСходящих с C (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков) Π½Π° C++. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΆΡ‘Π²Ρ‹Π²Π°Π½ΠΈΡŽ. Если Π²Π°ΠΌ интСрСсно, Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ lvalue ΠΈ rvalue Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠΌ, с Ρ‡Π΅ΠΌ часто приходится ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C/C++, Π° ΠΏΡ€ΠΈ встрСчС Π½Π΅ сразу становится ясным, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚. НаиболСС вСроятноС мСсто ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ β€” это сообщСния компилятора. НапримСр, ΠΏΡ€ΠΈ компиляции ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° компилятором gcc :

Π’Ρ‹ ΡƒΠ²Π΅Π΄ΠΈΡ‚Π΅ Π½Π΅Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

БогласСн, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ, ΠΈ вряд Π»ΠΈ Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ сообщСниС ΠΎΠ± ошибкС ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ lvalue β€” Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ‚Π°ΠΊ часто ΡƒΠ²ΠΈΠ΄ΠΈΡˆΡŒ Π² Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π°Ρ… ΠΏΠΎ C/C++. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ наглядСн ΠΏΡ€ΠΈ компиляции ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ g++ :

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π² сообщСниС ΠΎΠ± ошибкС упоминаСтся мистичСскоС rvalue. Π§Ρ‚ΠΎ ΠΆΠ΅ Π² C ΠΈ C++ понимаСтся ΠΏΠΎΠ΄ lvalue ΠΈ rvalue? Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΌΠ° Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Для Π½Π°Ρ‡Π°Π»Π° Π½Π°Ρ€ΠΎΡ‡ΠΈΡ‚ΠΎ Π΄Π°Π΄ΠΈΠΌ опрСдСлСния lvalue ΠΈ rvalue Π² ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. Π’ дальнСйшСм эти понятия Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны ΠΏΠΎΠ΄ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ стСклом.

lvalue (locator value) прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ мСсто Π² памяти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ΅Π΅Ρ‚ адрСс).

rvalue ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, говоря, Ρ‡Ρ‚ΠΎ любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ являСтся Π»ΠΈΠ±ΠΎ lvalue, Π»ΠΈΠ±ΠΎ rvalue. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ· опрСдСлСния lvalue слСдуСт, Ρ‡Ρ‚ΠΎ rvalue β€” это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ мСсто Π² памяти.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‡Ρ‘Ρ‚ΠΊΠΈΠΌΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ стоит сразу Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ нСсколько простых ΠΏΠΎΡΡΠ½ΡΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ lvalue с Π»Π΅Π²ΠΎΠΉ стороны, ΠΈ var являСтся lvalue, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ мСстом Π² памяти. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ заклинания ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ошибкам:

Однако, Π½Π΅ всС присваивания Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹. НапримСр, использованиС ссылок Π² C++ Π΄Π΅Π»Π°Π΅Ρ‚ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ:

Π—Π΄Π΅ΡΡŒ foo Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку, которая являСтся lvalue, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ΠΎΠΎΠ±Ρ‰Π΅, Π² C++ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ lvalue, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, сущСствСнна для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° [] Π² классах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ доступ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ поиска. НапримСр std::map :

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ mymap[10] Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ нСконстантная ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° std::map::operator[] Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π˜Π·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹Π΅ lvalue

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ всСм lvalue ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ измСняСмыС lvalue (modifiable lvalues). Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ C99 стандарт опрСдСляСт измСняСмыС lvalue ΠΊΠ°ΠΊ:

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ lvalue ΠΈ rvalue

ΠžΠ±Ρ€Π°Π·Π½ΠΎ говоря, конструкции языка, ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ значСниями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ rvalue Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². НапримСр, Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ‘+’ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° rvalue Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ rvalue:

Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, a ΠΈ b ΠΎΠ±Π° lvalue. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ строкС ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ нСявному ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ lvalue-Π²-rvalue. ВсС lvalue, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивом, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² rvalue.

Π§Ρ‚ΠΎ насчёт прСобразования Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ сторону? МоТно Π»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ rvalue Π² lvalue? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅Ρ‚! Π­Ρ‚ΠΎ Π±Ρ‹ Π½Π°Ρ€ΡƒΡˆΠΈΠ»ΠΎ ΡΡƒΡ‚ΡŒ lvalue, согласно Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ (ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ нСявного прСобразования ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ rvalue Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Π°ΠΌ, Π³Π΄Π΅ оТидаСтся lvalue).

Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ lvalue Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΈΠ· rvalue явным способом. НапримСр, ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ‘*’ (Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ rvalue Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ lvalue Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ, ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ‘&’ (адрСс) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ lvalue ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ rvalue:

Π‘ΠΈΠΌΠ²ΠΎΠ» «&» ΠΈΠ³Ρ€Π°Π΅Ρ‚ нСсколько Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² C++ β€” ΠΎΠ½ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ссылочный Ρ‚ΠΈΠΏ. Π•Π³ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «ссылкой Π½Π° lvalueΒ». НСконстантной ссылкС Π½Π° lvalue Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСно rvalue, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ rvalue-Π²-lvalue ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅:

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

CV-спСцифицированныС rvalues

lvalue (3.10) Π½Π° Ρ‚ΠΈΠΏ T, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈΠ»ΠΈ массивом, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² rvalue. [. ] Если T Π½Π΅ класс, Ρ‚ΠΈΠΏΠΎΠΌ rvalue являСтся cv-нСспСцифицированная вСрсия Ρ‚ΠΈΠΏΠ° T. Π˜Π½Π°Ρ‡Π΅, Ρ‚ΠΈΠΏΠΎΠΌ rvalue являСтся T.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚ Β«cv-нСспСцифицированный»? CV-спСцификатор β€” это Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для описания const ΠΈ volatile спСцификаторов Ρ‚ΠΈΠΏΠ°.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся cv-нСспСцифицированным ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ void (3.9), ΠΈΠΌΠ΅Π΅Ρ‚ соотвСтствСнно Ρ‚Ρ€ΠΈ cv-спСцифицированныС вСрсии: Ρ‚ΠΈΠΏ со спСцификатором const, Ρ‚ΠΈΠΏ со спСцификатором volatile ΠΈ Ρ‚ΠΈΠΏ со спСцификаторами const volatile. [. ] CV-спСцифицированныС ΠΈ cv-нСспСцифицированныС Ρ‚ΠΈΠΏΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ прСдставлСниС ΠΈ трСбования ΠΏΠΎ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡŽ.

Бсылки Π½Π° rvalue (C++11)

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

Добрая ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ Π±Ρ‹Π»Π° ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π° Π½Π° объяснСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых Π³Π»Π°Π²Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ lvalue ΠΈ rvalue являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ lvalue ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ rvalue β€” Π½Π΅Ρ‚. Π§Ρ‚ΠΎ ΠΆΠ΅, C++11 добавляСт ΠΎΠ΄Π½Ρƒ Π²Π°ΠΆΠ½Π΅ΠΉΡˆΡƒΡŽ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² этом Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΈ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ Π½Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ ссылки Π½Π° rvalue ΠΈ Ρ‚Π΅ΠΌ самым ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях.

Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€ рассмотрим Π½Π°ΠΈΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ динамичСского массива Ρ†Π΅Π»Ρ‹Ρ… чисСл. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим лишь Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ относящиСсС ΠΊ Ρ‚Π΅ΠΌΠ΅ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ‹:

Π”Π°Π²Π°ΠΉΡ‚Π΅ запустим простой ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС v1 Π² v2 :

И Π²ΠΎΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ:

Π§Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания. Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ v2 Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ rvalue:

Π₯отя здСсь я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свСТС созданному Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ, это являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· дСмонстраций ΠΎΠ±Ρ‰Π΅Π³ΠΎ случая, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ rvalue создаётся ΠΈ присваиваСтся v2 (это ΠΌΠΎΠΆΠ΅Ρ‚ случится Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€). Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½Π° экранС:

Ого! Выглядит ΠΎΡ‡Π΅Π½ΡŒ Ρ…Π»ΠΎΠΏΠΎΡ‚Π½ΠΎ. Π’ частности, здСсь ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π°ΡΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠ°Ρ€Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² конструктора с дСструктором, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. И это ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаётся ΠΈ удаляСтся. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° зря.

Но, Π½Π΅Ρ‚! C++11 Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ ссылки Π½Π° rvalue, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ «сСмантику пСрСноса», Π° Π² частности «пСрСносящий ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания» (Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ понятно ΠΏΠΎΡ‡Π΅ΠΌΡƒ я всё врСмя Π½Π°Π·Ρ‹Π²Π°Π» operator= ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ присваивания. Π’ C++11 эта Ρ€Π°Π·Π½ΠΈΡ†Π° становится Π²Π°ΠΆΠ½ΠΎΠΉ). Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ operator= Π² IntVec :

Π”Π²ΠΎΠΉΠ½ΠΎΠΉ аспСрсанд β€” это ссылка Π½Π° rvalue. Он ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ β€” Π΄Π°Ρ‘Ρ‚ ссылку Π½Π° rvalue, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ послС Π²Ρ‹Π·ΠΎΠ²Π°. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто Β«ΡΡ‚Π°Ρ‰ΠΈΡ‚ΡŒΒ» внутрСнности rvalue β€” ΠΎΠ½ΠΈ Π΅ΠΌΡƒ всё Ρ€Π°Π²Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹! Π’ΠΎΡ‚, Ρ‡Ρ‚ΠΎ вывСдСтся Π½Π° экран:

Π₯ΠΎΡ‡Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Π° айсбСрга сСмантики пСрСноса ΠΈ ссылок Π½Π° rvalue. Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, это слоТная Ρ‚Π΅ΠΌΠ° с мноТСством частных случаСв ΠΈ Π·Π°Π³Π°Π΄ΠΎΠΊ. Π― пытался лишь ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ интСрСсноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ lvalue ΠΈ rvalue Π² C++. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΈ позаботится ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ конструктора Π²ΠΎ врСмя компиляции.

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

МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ C++ ΠΊΠΎΠ΄Π°, Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡΡΡŒ ΠΎ разногласиях rvalue ΠΈ lvalue, опуская ΠΈΡ… ΠΊΠ°ΠΊ нСпонятный ΠΆΠ°Ρ€Π³ΠΎΠ½ компилятора Π² сообщСниях ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. Однако, ΠΊΠ°ΠΊ я пытался ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π»ΡƒΡ‡ΡˆΠ΅Π΅ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ этой Ρ‚Π΅ΠΌΡ‹ обСспСчит Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… конструкций C++, ΠΈ сдСлаСт части стандарта C++ ΠΈ дискуссии ΠΌΠ΅ΠΆΠ΄Ρƒ экспСртами языка для вас Π±ΠΎΠ»Π΅Π΅ доступными.

Π’ стандартС C++11 эта Ρ‚Π΅ΠΌΠ° являСтся Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ C++11 Π²Π²ΠΎΠ΄ΠΈΡ‚ понятия ссылок Π½Π° rvalue ΠΈ сСмантики пСрСноса. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ особСнности языка, строгоС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ rvalue ΠΈ lvalue просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

DTO vs POCO vs Value Object

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ DTO, POCO ΠΈ Value Object

Π’Π½Π°Ρ‡Π°Π»Π΅ нСбольшая Ρ€Π΅ΠΌΠ°Ρ€ΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Value Object. Π’ C# сущСствуСт похоТая концСпция, называСмая Value Type. Π­Ρ‚ΠΎ всСго лишь Π΄Π΅Ρ‚Π°Π»ΡŒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ хранятся Π² памяти ΠΈ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ этого. Value Object, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ, β€” понятиС ΠΈΠ· срСды DDD (Domain-Driven Design).

Ок, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ. Π’Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ понятия ΠΊΠ°ΠΊ DTO, Value Object ΠΈ POCO часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ синонимы. Но Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅?

DTO β€” это класс, содСрТащий Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. DTO ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ прилоТСниями, Π»ΠΈΠ±ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ слоями Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, СдинствСнная Ρ†Π΅Π»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Value Object β€” это ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ вашСй Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Он подчиняСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ сущности (Entities). ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Value Object ΠΈ Entity Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Value Object-Π° Π½Π΅Ρ‚ собствСнной идСнтичности. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π²Π° Value Object-Π° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ свойствами ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Π²Π΅ сущности ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π΄Π°ΠΆΠ΅ Π² случаС Ссли ΠΈΡ… свойства ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚.

Value Object-Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями.

POJO Π±Ρ‹Π» прСдставлСн ΠœΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΌ Π€Π°ΡƒΠ»Π΅Ρ€ΠΎΠΌ Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ для JavaBeans ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… «тяТСлых» enterprise-конструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ популярны Π² Ρ€Π°Π½Π½ΠΈΡ… 2000-Ρ….

Основной Ρ†Π΅Π»ΡŒΡŽ POJO Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΌΠ΅Π½ прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ смодСлирован Π±Π΅Π· использования JavaBeans. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, JavaBeans Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для этой Ρ†Π΅Π»ΠΈ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Π½Ρ‚ΠΈ-POCO ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” Entity Framework Π΄ΠΎ вСрсии 4.0. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс, сгСнСрированный EF, наслСдовал ΠΎΡ‚ EntityObject, Ρ‡Ρ‚ΠΎ привносило Π² Π΄ΠΎΠΌΠ΅Π½ Π»ΠΎΠ³ΠΈΠΊΡƒ, ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΡƒΡŽ для EF. Начиная с вСрсии 4, Entity Framework Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с POCO модСлью β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ EntityObject.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, понятиС POCO ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ использованиС Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ простых классов насколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ для модСлирования ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области. Π­Ρ‚ΠΎ понятиС ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² YAGNI, KISS ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… best practices. POCO классы ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ.

ΠšΠΎΡ€Ρ€Π΅Π»ΡΡ†ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ понятиями

Π•ΡΡ‚ΡŒ Π»ΠΈ связи ΠΌΠ΅ΠΆΠ΄Ρƒ этими трСмя понятиями? Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, DTO ΠΈ Value Object ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ взаимозамСняСмо. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, POCO β€” это надмноТСство для DTO ΠΈ Value Object:

value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Value Object ΠΈ DTO Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ сторонним ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ POCO. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, POCO β€” это Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ понятиС: это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Value Object, Entity, DTO ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс Π² Ρ‚ΠΎΠΌ случаС Ссли ΠΎΠ½ Π½Π΅ наслСдуСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, Π½Π΅ относящимся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ Π²Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

Π’ΠΎΡ‚ свойства ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…:

value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ POCO-класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ, ΠΈ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ собствСнной идСнтичности, Ρ‚.ΠΊ. ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Value Object, Ρ‚Π°ΠΊ ΠΈ Entity. Π’Π°ΠΊΠΆΠ΅, POCO ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ POCO DTO.

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

Π’Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ИспользованиС свойств (Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π² C#)

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»Π΅ΠΉ, свойства Π½Π΅ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. БоотвСтствСнно, нСльзя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ свойство Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ref ΠΈΠ»ΠΈ out.

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

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Month ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ свойство, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа set обСспСчиваСт установку значСния Month Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 1 Π΄ΠΎ 12. Для отслСТивания фактичСского значСния свойство Month ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ частноС ΠΏΠΎΠ»Π΅. ЀактичСскоС мСстополоТСниС Π΄Π°Π½Π½Ρ‹Ρ… свойства часто называСтся «Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ». Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² качСствС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° свойства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ частныС поля. ПолС помСчаСтся ΠΊΠ°ΠΊ частноС для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ измСнСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ посрСдством Π²Ρ‹Π·ΠΎΠ²Π° свойства. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± ограничСниях ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ доступа см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа.

АвтоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ свойства ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ синтаксис для простых объявлСний свойств. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ АвтоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ свойства.

ΠœΠ΅Ρ‚ΠΎΠ΄ доступа get

ΠœΠ΅Ρ‚ΠΎΠ΄ доступа get Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ инструкциСй return ΠΈΠ»ΠΈ throw, ΠΏΡ€ΠΈ этом ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· Ρ‚Π΅Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа.

ΠœΠ΅Ρ‚ΠΎΠ΄ доступа get ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния поля Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ послС вычислСния. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠœΠ΅Ρ‚ΠΎΠ΄ доступа set

ΠŸΡ€ΠΈ присвоСнии значСния свойству вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа set с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, содСрТащим Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ИспользованиС ΠΈΠΌΠ΅Π½ΠΈ явного ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ( value ) для объявлСния локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ доступа set являСтся ошибкой.

ΠœΠ΅Ρ‚ΠΎΠ΄ доступа init

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Бвойство ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ΠΎ ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова virtual. Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классам ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ свойства с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова override. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ НаслСдованиС.

Бвойство, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Π½Ρ‹ΠΌ (sealed). Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов ΠΎΠ½ΠΎ большС Π½Π΅ являСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ. НаконСц, свойство ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ абстрактным (abstract). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² классС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° рСализация Ρ‚Π°ΠΊΠΎΠ³ΠΎ свойства, ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ собствСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ АбстрактныС ΠΈ Π·Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Π½Ρ‹Π΅ классы ΠΈ Ρ‡Π»Π΅Π½Ρ‹ классов.

ИспользованиС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² virtual, abstract ΠΈΠ»ΠΈ override Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ доступа статичСского (static) свойства являСтся ошибкой.

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ скрытого свойства

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ дСмонстрируСтся доступ ΠΊ свойству Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ скрыто Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС Π΄Ρ€ΡƒΠ³ΠΈΠΌ свойством с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ:

На Ρ‡Ρ‚ΠΎ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Бвойство Name Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС скрываСт свойство Name Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π² объявлСнии свойства Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ new :

Для доступа ΠΊ скрытому свойству Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Employee) :

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ скрытии элСмСнтов см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ new.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ пСрСопрСдСлСния свойства

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Entity vs Value Object: ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ

Π’ΠΈΠΏΡ‹ эквивалСнтности

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ entities ΠΈ value objects, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° эквивалСнтности (equality), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² силу ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ пытаСмся ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

Reference equality (ссылочная ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π°Π²Π½Ρ‹ Π² случаС Ссли ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΊΡƒΡ‡Π΅:

value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π² C#:

Identifier equality (ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²) ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ класса присутствуСт Id ΠΏΠΎΠ»Π΅. Π”Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π²Π½Ρ‹ Ссли ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€:

value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, струкрурная ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ всСх ΠΏΠΎΠ»Π΅ΠΉ Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ сущностями ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ-значСния Π»Π΅ΠΆΠΈΡ‚ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ сравниваСм ΠΈΡ… экзСмпляры Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ эквивалСнтности ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² относится ΠΊ сущностям, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ структурая ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ β€” ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ-значСниям. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, сущности ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-значСния β€” Π½Π΅Ρ‚.

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

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎ Π΄Π²ΡƒΡ… Π»ΡŽΠ΄ΡΡ…, носящих ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ имя. ΠœΡ‹ Π½Π΅ считаСм ΠΈΡ… ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΈΠ·-Π·Π° этого. Они ΠΎΠ±Π° ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ (Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»ΠΈΠΌΠΎΠΉ) ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ 1 Ρ€ΡƒΠ±Π»ΡŒ, Π½Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ Ρ‚Π° ΠΆΠ΅ Π»ΠΈ это ΠΌΠΎΠ½Π΅Ρ‚Π°, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° Ρƒ нас Π²Ρ‡Π΅Ρ€Π°. Π’ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° эта ΠΌΠΎΠ½Π΅Ρ‚Π° являСтся ΠΌΠΎΠ½Π΅Ρ‚ΠΎΠΉ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π² 1 Ρ€ΡƒΠ±Π»ΡŒ, ΠΌΡ‹ Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ Π΄Π΅Π½Π΅Π³ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя понятиями состоит Π² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ ΠΈΡ… экзСмпляров. Бущности ΠΆΠΈΠ²ΡƒΡ‚ Π² ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΡƒΠΌΠ΅. Они ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ историСй (Π΄Π°ΠΆΠ΅ Ссли ΠΌΡ‹ Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΠΌ эту ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ) Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ мСнялись Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½ΠΈ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-значСния, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ. ΠœΡ‹ создаСм ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌ ΠΈΡ… с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΎ слСдствиС, Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π²Ρ‹Ρ‚Π΅ΠΊΠ°ΡŽΡ‰Π΅Π΅ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ взаимозамСняСмы. Если рублСвая ΠΌΠΎΠ½Π΅Ρ‚Π° β€” Ρ‚ΠΎΡ‡Π½ΠΎ такая ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ другая рублСвая ΠΌΠΎΠ½Π΅Ρ‚Π°, Ρ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π°? ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ экзСмпляром ΠΈ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎ Π½Π΅ΠΌ послС этого.

Π“Π°ΠΉΠ΄Π»Π°Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΈΠ· этого отличия, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-значСния Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сами ΠΏΠΎ сСбС, ΠΎΠ½ΠΈ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСскольким сущностям. Π”Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдставляСт ΠΈΠ· сСбя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² контСкстС ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ сущности. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΌΠΎΠ½Π΅Ρ‚Π°ΠΌΠΈ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅, вопрос «Бколько Π΄Π΅Π½Π΅Π³?Β» Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, Ρ‚.ΠΊ. ΠΎΠ½ Π½Π΅ нСсСт Π² сСбС достаточного контСкста. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, вопрос «Бколько Π΄Π΅Π½Π΅Π³ Ρƒ ΠŸΠ΅Ρ‚ΠΈ?Β» ΠΈΠ»ΠΈ «Бколько Π΄Π΅Π½Π΅Π³ Ρƒ всСх ΡŽΠ·Π΅Ρ€ΠΎΠ² нашСй систСмы?Β» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Π°Π»ΠΈΠ΄Π½Ρ‹.

Π”Ρ€ΡƒΠ³ΠΎΠ΅ слСдствиС здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-значСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. ВмСсто этого, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡ‚ΡŒ (ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ) ΠΈΡ… ΠΊ сущностям ΠΏΡ€ΠΈ сохранСнии Π² Π‘Π” (ΠΎΠ± этом Π½ΠΈΠΆΠ΅).

ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ

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

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

Π’ настоящСС врСмя я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ связь ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚ Π³Π»ΡƒΠ±ΠΆΠ΅ Ρ‡Π΅ΠΌ я Π΄ΡƒΠΌΠ°Π». ИзмСняя экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-значСния, ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Ρ€Π°Π²Π½Ρ‹ΠΉ Π½ΡƒΠ»ΡŽ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ». А это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²Π΅Π΄Π΅Ρ‚ ΠΊ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-значСния ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡŽ этого понятия.

Π­Ρ‚ΠΎ нСслоТноС мыслСнноС ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Если ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», Π² Ρ‚ΠΎΠΌ смыслС Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ всСго лишь слСпком ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ состояния ΠΈ Π½ΠΈΡ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ этого состояния.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ нас ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ: Ссли Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСизмСняСмым, Π·Π½Π°Ρ‡ΠΈΡ‚ этот класс Π½Π΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Как Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ?

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

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

НС смотря Π½Π° отсутствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΌΡ‹ всС ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ отнСсти ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ ΠΊ сущностям ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ-значСниям. ΠœΡ‹ ΡƒΠΆΠ΅ обсуТдали Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° эквивалСнтности: Ссли ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ экзСмпляр класса Π΄Ρ€ΡƒΠ³ΠΈΠΌ с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ свойствами, Ρ‚ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π‘ΠΎΠ»Π΅Π΅ простая вСрсия Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ мыслСнно ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ класс с цСлочислСнным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (integer). Π’Π°ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π±Π΅Π·Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ являСтся Π»ΠΈ Ρ†ΠΈΡ„Ρ€Π° 5 Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ использовали Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅. ВсС пятСрки Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹, Π½Π΅ зависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ созданы. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ integer ΠΏΠΎ сути ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π·Π°Π΄Π°ΠΉΡ‚Π΅ сСбС вопрос: выглядит Π»ΠΈ этот класс ΠΊΠ°ΠΊ integer? Если ΠΎΡ‚Π²Π΅Ρ‚ Π΄Π°, Ρ‚ΠΎ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Как Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-значСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…?

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π° класса Π² Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ: ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Person ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Address:

Как Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ΡŒ структура Π‘Π” Π² этом случаС? РСшСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для ΠΎΠ±ΠΎΠΈΡ… классов:

value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’Π°ΠΊΠΎΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½, Π½Π΅ смотря Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π‘Π”, ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° нСдостатка. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‚Π°Π±Π»ΠΈΡ†Π° Address содСрТит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Id Π² класс Address Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Π­Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ добавляСм классу Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ. А это ΡƒΠΆΠ΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-значСния.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ нСдостаток здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠΊΠΎΠΉ сущности. Address ΠΌΠΎΠΆΠ΅Ρ‚ ΠΆΠΈΡ‚ΡŒ собствСнной Тизнью, Ρ‚.ΠΊ. ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Person ΠΈΠ· Π‘Π” Π±Π΅Π· удалСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строки Address. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°, говорящСго ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… сущностСй.

ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Β«Π·Π°ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡ‚ΡŒΒ» поля ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Address Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Person:

value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ value Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ ΠΎΠ±Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: Address Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ собствСнного ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ Π΅Π³ΠΎ врСмя ΠΆΠΈΠ·Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ сущности Person.

Π­Ρ‚ΠΎΡ‚ Π΄ΠΈΠ·Π°ΠΉΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ссли Π²Ρ‹ мыслСнно Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ всС поля, относящиСся ΠΊ Address, СдинствСнным integer, ΠΊΠ°ΠΊ я ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Ρ€Π°Π½Π΅Π΅. Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ цСлочислСнного значСния Π² вашСй Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅Ρ‚, Π²Ρ‹ просто Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Π’Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ-значСниям. НС создавайтС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, просто Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΈΡ… поля Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ сущности, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚.

ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-значСния сущностям

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

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

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

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

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