Π Π°Π·Π½ΠΎΠ΅

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ: Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π² Π‘ΠΈ++ ΠΈ Π‘ΠΈ / Π₯Π°Π±Ρ€

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

ООП Π² ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°Ρ… / Π₯Π°Π±Ρ€

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


ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго стоит ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ, Π·Π°Ρ‡Π΅ΠΌ? ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная идСология Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ сущности с Π΅Ρ‘ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΡΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° ΠΈ бизнСс-процСссов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π—Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ‰Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, Ρ‚. ΠΊ. людям свойствСнно Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΌΠΈΡ€ ΠΊΠ°ΠΊ мноТСство Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ классификации. Удалось Π»ΠΈ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³Π°ΠΌ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ†Π΅Π»ΠΈ, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ слоТно, Π½ΠΎ Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ массу ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… с программиста Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ООП.

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

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

Π’ силу своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. Как ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π», нашими ΠΏΠ°Ρ†ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ трансформСры. Π― Π½Π΅ трансформСролог, ΠΈ комиксов Π½Π΅ Ρ‡ΠΈΡ‚Π°Π», посСму Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π±ΡƒΠ΄Ρƒ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠ΅ΠΉ ΠΈ Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠ΅ΠΉ.

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

Π‘Ρ€Π°Π·Ρƒ лиричСскоС отступлСниС: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ Π±Π΅Π· классов, Π½ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ, извиняюсь Π·Π° ΠΊΠ°Π»Π°ΠΌΠ±ΡƒΡ€, ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ схСму, Π³Π΄Π΅ классы β€” нашС всё.

Π‘Π°ΠΌΠΎΠ΅ простоС объяснСниС: класс β€” это Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ трансформСра, Π° экзСмпляры этого класса β€” ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ трансформСры, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠžΠΏΡ‚ΠΈΠΌΡƒΡ ΠŸΡ€Π°ΠΉΠΌ ΠΈΠ»ΠΈ ОлСг. И хотя ΠΎΠ½ΠΈ ΠΈ собраны ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΡƒ, ΡƒΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ, Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ, ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ собствСнным ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ состояниСм. БостояниС β€” это ряд ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ свойств. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρƒ Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠ΅ имя, возраст, мСстополоТСниС, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ заряда, количСство боСприпасов ΠΈ Ρ‚. Π΄. Π‘Π°ΠΌΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ этих свойств ΠΈ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² классС.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, класс β€” это описаниС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠΌΠΈ свойствами ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. А ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” это экзСмпляр с собствСнным состояниСм этих свойств.

ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ «свойства ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Β», Π½ΠΎ Π·Π²ΡƒΡ‡ΠΈΡ‚ это ΠΊΠ°ΠΊ-Ρ‚ΠΎ абстрактно ΠΈ нСпонятно. ΠŸΡ€ΠΈΠ²Ρ‹Ρ‡Π½Π΅Π΅ для программиста Π±ΡƒΠ΄Π΅Ρ‚ Π·Π²ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΒ». На самом Π΄Π΅Π»Π΅ «свойства» β€” это Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, просто ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ полями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). Аналогично Β«ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Β» β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ лишь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ собствСнному ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· поля.

Π˜Ρ‚ΠΎΠ³ΠΎ, ΠΈΠΌΠ΅Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ. Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ? Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ЯП ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ обращСния ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ β€” это Ρ‚ΠΎΡ‡ΠΊΠ° (ΠΊΡ€ΠΎΠΌΠ΅ PHP ΠΈ Perl). Выглядит это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ (псСвдокод):

// объявлСниС класса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class
class Transformer(){
    // объявлСниС поля x
    int x

    // объявлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° конструктора (сюда Π½Π°ΠΌ Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΡƒΡ‚ 0)
    function constructor(int x){
        // инициализация поля x 
        // (ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ конструктору 0 прСвращаСтся Π² свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°)
        this.x = x
    }
	
    // объявлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run
    function run(){
        // ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ собствСнному Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· this
        this.x += 1
    }
}

// Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ клиСнтский ΠΊΠΎΠ΄:

// создаСм Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр трансформСра с Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ 0
optimus = new Transformer(0)

optimus.run() // ΠΏΡ€ΠΈΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠžΠΏΡ‚ΠΈΠΌΡƒΡΡƒ Π±Π΅ΠΆΠ°Ρ‚ΡŒ
print optimus.x // Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 1
optimus.run() // ΠΏΡ€ΠΈΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠžΠΏΡ‚ΠΈΠΌΡƒΡΡƒ Π΅Ρ‰Π΅ Ρ€Π°Π· Π±Π΅ΠΆΠ°Ρ‚ΡŒ
print optimus.x // Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 2

Π’ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°Ρ… я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ обозначСния:

Π― Π½Π΅ стал ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ UML-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, посчитав ΠΈΡ… нСдостаточно наглядными, Ρ…ΠΎΡ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ.

Анимация β„–1

Π§Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΠ· ΠΊΠΎΠ΄Π°?

1. this β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ локальная пСрСмСнная (Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), которая позволяСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠ· своих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊ собствСнным Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ. ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ собствСнным, Ρ‚ΠΎ бишь, ΠΊΠΎΠ³Π΄Π° трансформСр Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ свой ΠΌΠ΅Ρ‚ΠΎΠ΄, Π»ΠΈΠ±ΠΎ мСняСт собствСнноС состояниС. Если снаруТи ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: optimus.x, Ρ‚ΠΎ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ, Ссли ΠžΠΏΡ‚ΠΈΠΌΡƒΡ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ сам ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ своСму полю x, Π² Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π²ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: this.x, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ «Ρ (ΠžΠΏΡ‚ΠΈΠΌΡƒΡ) ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡΡŒ ΠΊ своСму Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ x«. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков эта пСрСмСнная называСтся this, Π½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, self)

2. constructor β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ автоматичСски вызываСтся ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ языкС конструктор обозначаСтся своим ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π“Π΄Π΅-Ρ‚ΠΎ это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠ° __construct ΠΈΠ»ΠΈ __init__, Π° Π³Π΄Π΅-Ρ‚ΠΎ имя конструктора Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса. НазначСниС конструкторов β€” произвСсти ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ поля.

3. new β€” это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ экзСмпляра ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ класса. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ вызываСтся конструктор. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, конструктору пСрСдаСтся 0 Π² качСствС стартовой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ трансформСра (это ΠΈ Π΅ΡΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Π°Ρ инициализация). ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово new Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках отсутствуСт, ΠΈ конструктор вызываСтся автоматичСски ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ класс ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ: Transformer().

4. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ constructor ΠΈ run Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ состояниСм, Π° Π²ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”Π°ΠΆΠ΅ синтаксис объявлСния совпадаСт.

5. ΠšΠ»Π°ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ состояниС ΠΈ, ΠΊΠ°ΠΊ слСдствиС, созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ этом случаС ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄Π΅Π»Π°ΡŽΡ‚ статичСским.

SRP

(Single Responsibility Principle / ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнной отвСтствСнности / ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ SOLID). Π‘ Π½ΠΈΠΌ Π²Ρ‹, навСрняка, ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ: Β«ΠΎΠ΄Π½Π° функция Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΠΎΠ΅ дСйствиС». Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ справСдлив ΠΈ для классов: «Один класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡ΡƒΒ». К соТалСнию с классами слоТнСС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π°Ρ€ΡƒΡˆΠ°Π»ΡΡ.

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

Ассоциация

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

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ наш трансформСр ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ ΠΏΡƒΡˆΠΊΠΎΠΉ. Π₯отя Π½Π΅Ρ‚, Π»ΡƒΡ‡ΡˆΠ΅ двумя ΠΏΡƒΡˆΠΊΠ°ΠΌΠΈ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ€ΡƒΠΊΠ΅. ΠŸΡƒΡˆΠΊΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ (ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ классу, ΠΈΠ»ΠΈ, Ссли Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΡƒ), ΠΎΠ±Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΡƒΠΌΠ΅ΡŽΡ‚ ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Ρ€ΡΠΆΠ°Ρ‚ΡŒΡΡ, Π½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅ΡΡ‚ΡŒ своС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ боСприпасов (собствСнноС состояниС). Как Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ это ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ООП? Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ассоциации:

class Gun(){ // объявляСм класс ΠŸΡƒΡˆΠΊΠ°
    int ammo_count // объявляСм количСство боСприпасов

    function constructor(){ // конструктор
        this.reload() // Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ собствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ "ΠΏΠ΅Ρ€Π΅Π·Π°Ρ€ΡΠ΄ΠΈΡ‚ΡŒ"
    }

    function fire(){ // объявляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡƒΡˆΠΊΠΈ "ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ"
        this.ammo_count -= 1 // расходуСм боСприпас ΠΈΠ· собствСнного ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°
    }

    function reload(){ // объявляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ "ΠΏΠ΅Ρ€Π΅Π·Π°Ρ€ΡΠ΄ΠΈΡ‚ΡŒ"
        this.ammo_count = 10 // Π·Π°Π±ΠΈΠ²Π°Π΅ΠΌ собствСнный ΠΌΠ°Π³Π°Π·ΠΈΠ½ боСприпасами
    }
}

class Transformer(){ // объявляСм класс ВрансформСр
    Gun gun_left // объявляСм ΠΏΠΎΠ»Π΅ "лСвая ΠΏΡƒΡˆΠΊΠ°" Ρ‚ΠΈΠΏΠ° ΠŸΡƒΡˆΠΊΠ°
    Gun gun_right // объявляСм ΠΏΠΎΠ»Π΅ "правая ΠΏΡƒΡˆΠΊΠ°" Ρ‚ΠΎΠΆΠ΅ Ρ‚ΠΈΠΏΠ° ΠŸΡƒΡˆΠΊΠ°
    
    /*
    Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ конструктор ВрансформСра ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚
    Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π²Π΅ ΡƒΠΆΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ созданныС ΠΏΡƒΡˆΠΊΠΈ,
    ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ·Π²Π½Π΅
    */
    function constructor(Gun gun_left, Gun gun_right){
        this.gun_left = gun_left // устанавливаСм Π»Π΅Π²ΡƒΡŽ ΠΏΡƒΡˆΠΊΡƒ Π½Π° Π±ΠΎΡ€Ρ‚
        this.gun_right = gun_right // устанавливаСм ΠΏΡ€Π°Π²ΡƒΡŽ ΠΏΡƒΡˆΠΊΡƒ Π½Π° Π±ΠΎΡ€Ρ‚
    }
    
    // объявляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ ВрансформСр "ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сначала стрСляСт...
    function fire(){
        // Π»Π΅Π²ΠΎΠΉ ΠΏΡƒΡˆΠΊΠΎΠΉ, вызывая Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ "ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ"
        this.gun_left.fire()
        // Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΏΡƒΡˆΠΊΠΎΠΉ, вызывая Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ "ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ"
        this.gun_right.fire()
    }
}

gun1 = new Gun() // создаСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡƒΡˆΠΊΡƒ
gun2 = new Gun() // создаСм Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΡƒΡˆΠΊΡƒ
optimus = new Transformer(gun1, gun2) // создаСм трансформСра, пСрСдавая Π΅ΠΌΡƒ ΠΎΠ±Π΅ ΠΏΡƒΡˆΠΊΠΈ

Анимация β„–2

this.gun_left.fire() ΠΈ this.gun_right.fire() β€” это обращСния ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΠΈ. По ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΌΡ‹ обращаСмся ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ сСбя (this.gun_right), получая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡƒΡˆΠΊΠΈ, Π° ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ обращаСмся ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡƒΡˆΠΊΠΈ (this.gun_right.fire()).

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

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

2. АгрСгация β€” случай, ΠΊΠΎΠ³Π΄Π° ΠΏΡƒΡˆΠΊΠ° выдаСтся ΠΊΠ°ΠΊ пистолСт Π² Ρ€ΡƒΠΊΡƒ, ΠΈ послС смСрти ΠžΠΏΡ‚ΠΈΠΌΡƒΡΠ° этот пистолСт ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ΅Π²ΠΎΠΉ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰ ОлСг, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Π·ΡΡ‚ΡŒ Π² свою Ρ€ΡƒΠΊΡƒ, Π»ΠΈΠ±ΠΎ ΡΠ΄Π°Ρ‚ΡŒ Π² Π»ΠΎΠΌΠ±Π°Ρ€Π΄. Π’ΠΎ бишь ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ зависит ΠΎΡ‚ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ΠžΡ€Ρ‚ΠΎΠ΄ΠΎΠΊΡΠ°Π»ΡŒΠ½Π°Ρ ООП-Ρ†Π΅Ρ€ΠΊΠΎΠ²ΡŒ ΠΏΡ€ΠΎΠΏΠΎΠ²Π΅Π΄ΡƒΠ΅Ρ‚ Π½Π°ΠΌ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Ρ€ΠΎΠΈΡ†Ρƒ β€” ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ наслСдованиС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зиТдСтся вСсь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΈΡ… ΠΏΠΎ порядку.

НаслСдованиС

НаслСдованиС β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт, ΠΊΠ°ΠΊ Π±Ρ‹ ΠΏΠ°Ρ€Π°Π΄ΠΎΠΊΡΠ°Π»ΡŒΠ½ΠΎ это Π½Π΅ Π·Π²ΡƒΡ‡Π°Π»ΠΎ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌΠΈ классами свойства ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов для дальнСйшСго Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Π§Ρ‚ΠΎ Ссли, ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΡˆΡ‚Π°ΠΌΠΏΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… трансформСров, Π° Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ каркас, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌ обвСсом? ООП позволяСт Π½Π°ΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΡˆΠ°Π»ΠΎΡΡ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ раздСлСния Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° сходства ΠΈ различия с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ выносом сходств Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс, Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π² классы-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ. Как это выглядит?

ΠžΠΏΡ‚ΠΈΠΌΡƒΡ ΠŸΡ€Π°ΠΉΠΌ ΠΈ ΠœΠ΅Π³Π°Ρ‚Ρ€ΠΎΠ½ β€” ΠΎΠ±Π° трансформСры, Π½ΠΎ ΠΎΠ΄ΠΈΠ½ являСтся Π°Π²Ρ‚ΠΎΠ±ΠΎΡ‚ΠΎΠΌ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ дСсСптиконом. Допустим, Ρ‡Ρ‚ΠΎ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π²Ρ‚ΠΎΠ±ΠΎΡ‚Π°ΠΌΠΈ ΠΈ дСсСптиконами Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΠ±ΠΎΡ‚Ρ‹ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, Π° дСсСптиконы β€” Π² Π°Π²ΠΈΠ°Ρ†ΠΈΡŽ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ свойства ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму наслСдования Ρ‚Π°ΠΊ: ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ‡Π΅Ρ€Ρ‚Ρ‹ (Π±Π΅Π³, ΡΡ‚Ρ€Π΅Π»ΡŒΠ±Π°) Π±ΡƒΠ΄ΡƒΡ‚ описаны Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС «ВрансформСр», Π° различия (трансформация) Π² Π΄Π²ΡƒΡ… Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… классах «Автобот» ΠΈ «ДСсСптикон».

class Transformer(){ // Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс
    function run(){
        // ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Π±Π΅Π³
    }
    function fire(){
        // ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΡΡ‚Ρ€Π΅Π»ΡŒΠ±Ρƒ
    }
}

class Autobot(Transformer){ // Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс, наслСдованиС ΠΎΡ‚ Transformer
    function transform(){
        // ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ
    }
}

class Decepticon(Transformer){ // Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс, наслСдованиС ΠΎΡ‚ Transformer
    function transform(){
        // ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² самолСт
    }
}

optimus = new Autobot()
megatron = new Decepticon()

Анимация β„–3

Π‘Π΅ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ наглядно ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ наслСдованиС становится ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ (DRY-ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ прСдоставляСт возмоТности для ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ Π² классах-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ….

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ°

Если ΠΆΠ΅ Π² классС-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅, Ρ‚ΠΎ сработаСт ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ°. Π­Ρ‚ΠΎ позволяСт Π½Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ обращСния ΠΊ полю ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, поиск Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° происходит ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΊ самому ΠΊΠΎΡ€Π½ΡŽ β€” Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Ρƒ Π°Π²Ρ‚ΠΎΠ±ΠΎΡ‚Π° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ fire(), сначала поиск ΠΌΠ΅Ρ‚ΠΎΠ΄Π° производится Π² классС-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅ β€” Autobot, Π° ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ Ρ‚Π°ΠΌ Π½Π΅Ρ‚, поиск поднимаСтся Π½Π° ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅ β€” Π² класс Transformer, Π³Π΄Π΅ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ ΠΈ Π²Ρ‹Π·Π²Π°Π½. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ модификация Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ LSP ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² SOLID, Π½ΠΎ ΠΌΡ‹ рассматриваСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ…Π½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

НСумСстноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

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

Как ΠΏΡ€ΠΈ описании ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ Π΄Π²ΡƒΡ… сущностСй ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° умСстно наслСдованиС, Π° ΠΊΠΎΠ³Π΄Π° β€” композиция? МоТно Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ популярной ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠΎΠΉ: спроситС сСбя, ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ А являСтся ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ Π‘? Если Π΄Π°, Ρ‚ΠΎ скорСС всСго, Ρ‚ΡƒΡ‚ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ наслСдованиС. Если ΠΆΠ΅ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ А являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ сущности Π‘, Ρ‚ΠΎ наш Π²Ρ‹Π±ΠΎΡ€ β€” композиция.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ нашСй ситуации это Π±ΡƒΠ΄Π΅Ρ‚ Π·Π²ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  1. Автобот являСтся ВрансформСром? Π”Π°, Π·Π½Π°Ρ‡ΠΈΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ наслСдованиС.
  2. ΠŸΡƒΡˆΠΊΠ° являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ВрансформСра? Π”Π°, Π·Π½Π°Ρ‡ΠΈΡ‚ β€” композиция.

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

НаслСдованиС статично

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

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

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

АбстрактныС классы

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

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

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

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ β€” свойство систСмы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ мноТСство Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. НичСго нСпонятно. ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌΡΡ ΠΊ трансформСрам.

ПолоТим, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ трансформСра: ΠžΠΏΡ‚ΠΈΠΌΡƒΡ, ΠœΠ΅Π³Π°Ρ‚Ρ€ΠΎΠ½ ΠΈ ОлСг. ВрансформСры Π±ΠΎΠ΅Π²Ρ‹Π΅, стало Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ attack(). Π˜Π³Ρ€ΠΎΠΊ, наТимая Ρƒ сСбя Π½Π° дТойстикС ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π²ΠΎΠ΅Π²Π°Ρ‚ΡŒΒ», сообщаСт ΠΈΠ³Ρ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π° Π²Ρ‹Π·Π²Π°Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ attack() Ρƒ трансформСра, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊ. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ трансформСры Ρ€Π°Π·Π½Ρ‹Π΅, Π° ΠΈΠ³Ρ€Π° интСрСсная, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ своим способом. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΠžΠΏΡ‚ΠΈΠΌΡƒΡ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Автобот, Π° Автоботы ΡΠ½Π°Π±ΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΡƒΡˆΠΊΠ°ΠΌΠΈ с ΠΏΠ»ΡƒΡ‚ΠΎΠ½ΠΈΠ΅Π²Ρ‹ΠΌΠΈ Π±ΠΎΠ΅Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ (Π΄Π° Π½Π΅ ΠΏΡ€ΠΎΠ³Π½Π΅Π²Π°ΡŽΡ‚ΡΡ Ρ„Π°Π½Π°Ρ‚Ρ‹ трансформСров). ΠœΠ΅Π³Π°Ρ‚Ρ€ΠΎΠ½ β€” ДСсСптикон, ΠΈ стрСляСт ΠΈΠ· ΠΏΠ»Π°Π·ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡƒΡˆΠΊΠΈ. ОлСг β€” басист, ΠΈ ΠΎΠ½ обзываСтся. А Π² Ρ‡Π΅ΠΌ польза?

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

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ β€” это ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа ΠΊ полям ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Под ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ доступа подразумСваСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ/Π½Π΅ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠΈ, вычислСния ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅ динамичСскоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках Ρ‡Π°ΡΡ‚ΡŒΡŽ инкапсуляции являСтся сокрытиС Π΄Π°Π½Π½Ρ‹Ρ…. Для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа (опишСм Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх ООП языках):

  • publiс β€” ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ любой ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΉ
  • private β€” ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса
  • protected β€” Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ private, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ доступ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈ наслСдники класса Π² Ρ‚ΠΎΠΌ числС
class Transformer(){
    public function constructor(){ }

    protected function setup(){ }

    private function dance(){ }
}

Как ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа? Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС Ρ‚Π°ΠΊ: Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ public. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” private. Если Π΅ΡΡ‚ΡŒ наслСдованиС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ protected Π² случаС, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ снаруТи, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ.

АксСссоры (Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры)

Π“Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π·Π°Π΄Π°Ρ‡Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ полям. Π“Π΅Ρ‚Ρ‚Π΅Ρ€ считываСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля, Π° сСттСр β€” Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ записываСт Π² ΠΏΠΎΠ»Π΅. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ. НапримСр, сСттСр ΠΏΡ€ΠΈ записи значСния Π² ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΈΠ»ΠΈ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ допустимых (валидация). Π’ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Π»Π΅Π½ΠΈΠ²ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ссли Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ Π»Π΅ΠΆΠΈΡ‚ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ мноТСство.

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

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

Π—Π°Π΄Π°Ρ‡Π° интСрфСйса β€” ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ зависимости сущностСй Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² большС абстракции.

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

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² языках, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ интСрфСйсы, Π½Π΅Ρ‚ мноТСствСнного наслСдования классов, Π½ΠΎ Π΅ΡΡ‚ΡŒ мноТСствСнноС наслСдованиС интСрфСйсов. Π­Ρ‚ΠΎ позволяСт классу ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ обязуСтся ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ΠšΠ»Π°ΡΡΡ‹ с интСрфСйсами состоят Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ»: ΠΎΠ΄ΠΈΠ½ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСство интСрфСйсов, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ интСрфСйс, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ классами.

Π£ интСрфСйса двустороннСС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:

  1. По ΠΎΠ΄Π½Ρƒ сторону интСрфСйса β€” классы, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΉ интСрфСйс.
  2. По Π΄Ρ€ΡƒΠ³ΡƒΡŽ сторону β€” ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ этот интСрфСйс Π² качСствС описания Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ (ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ) Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

НапримСр, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠΌΠΈΠΌΠΎ основного повСдСния, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сСриализован, Ρ‚ΠΎ пускай ΠΎΠ½ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ интСрфСйс Β«Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉΒ». А Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΡƒΡΡ‚ΡŒ ΠΎΠ½ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ интСрфСйс β€” Β«ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉΒ». И Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ транспортный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ сСти, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс Β«Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉΒ».

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ каркас трансформСра ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ трСмя слотами: слот для оруТия, для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° энСргии ΠΈ для ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сканСра. Π­Ρ‚ΠΈ слоты ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ интСрфСйсами: Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ слот ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подходящСС ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅. Π’ слот для оруТия ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°ΠΊΠ΅Ρ‚Π½ΡƒΡŽ установку ΠΈΠ»ΠΈ Π»Π°Π·Π΅Ρ€Π½ΡƒΡŽ ΠΏΡƒΡˆΠΊΡƒ, Π² слот для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° энСргии β€” ядСрный Ρ€Π΅Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠ»ΠΈ Π Π˜Π’Π­Π“ (Ρ€Π°Π΄ΠΈΠΎΠΈΠ·ΠΎΡ‚ΠΎΠΏΠ½Ρ‹ΠΉ тСрмоэлСктричСский Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€), Π° Π² слот для сканСра β€” Ρ€Π°Π΄Π°Ρ€ ΠΈΠ»ΠΈ Π»ΠΈΠ΄Π°Ρ€. Π‘ΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ слот ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π° ΡƒΠΆΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ устройства Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ этому интСрфСйсу. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π½Π° матСринских ΠΏΠ»Π°Ρ‚Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько Ρ‚ΠΈΠΏΠΎΠ² слотов: слот для процСссора позволяСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ процСссоры, подходящиС ΠΏΠΎΠ΄ Π΄Π°Π½Π½Ρ‹ΠΉ сокСт, Π° слот SATA β€” любой SSD ΠΈΠ»ΠΈ HDD Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ CD/DVD.

ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ°ΡΡΡ систСма слотов Ρƒ трансформСров β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Если ΠΆΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π² слотах Π±ΡƒΠ΄Π΅Ρ‚ смСнным Π² Ρ…ΠΎΠ΄Π΅ ΠΆΠΈΠ·Π½ΠΈ трансформСра, Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° это ΡƒΠΆΠ΅ агрСгация. Для наглядности, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйсы, ΠΊΠ°ΠΊ принято Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках, добавляя Π·Π°Π³Π»Π°Π²Π½ΡƒΡŽ «И» ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ: IWeapon, IEnergyGenerator, IScanner.

// описания интСрфСйсов:

interface IWeapon{
    function fire() {} // дСкларация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π΅Π· ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. НиТС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ
}

interface IEnergyGenerator{
    // Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы:
    function generate_energy() {} // ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ
    function load_fuel() {}       // Π²Ρ‚ΠΎΡ€ΠΎΠΉ
}

interface IScanner{
    function scan() {}
}


// классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы:

class RocketLauncher() : IWeapon
{
    function fire(){
        // имплСмСнтация запуска Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹
    }
}

class LaserGun() : IWeapon
{
    function fire(){
        // имплСмСнтация выстрСла Π»Π°Π·Π΅Ρ€ΠΎΠΌ
    }
}

class NuclearReactor() : IEnergyGenerator
{
    function generate_energy(){
        // имплСмСнтация Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ энСргии ядСрным Ρ€Π΅Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ
    }
	
    function load_fuel(){
        // имплСмСнтация Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΡƒΡ€Π°Π½ΠΎΠ²Ρ‹Ρ… стСрТнСй
    }
}

class RITEG() : IEnergyGenerator
{
    function generate_energy(){
        // имплСмСнтация Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ энСргии Π Π˜Π’Π­Π“
    }
	
    function load_fuel(){
        // имплСмСнтация Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π Π˜Π’Π­Π“-ΠΏΠ΅Π»Π»Π΅Ρ‚
    }
}

class Radar() : IScanner
{
    function scan(){
        // имплСмСнтация использования Ρ€Π°Π΄ΠΈΠΎΠ»ΠΎΠΊΠ°Ρ†ΠΈΠΈ
    }	
}

class Lidar() : IScanner
{
    function scan(){
        // имплСмСнтация использования оптичСской Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ
    }
}

// класс - ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ:

class Transformer() {
    // ΠΏΡ€ΠΈΠ²Π΅Ρ‚, композиция:
    IWeapon slot_weapon   // Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² качСствС Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….
    IEnergyGenerator slot_energy_generator // Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹,
    IScanner slot_scanner // ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ интСрфСйс
	
    /*
    Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² интСрфСйс Ρ‚ΠΎΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…,
    ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого класса,
    ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ интСрфСйс:
    */
    function install_weapon(IWeapon weapon){ 
        this.slot_weapon = weapon
    }
	
    function install_energy_generator(IEnergyGenerator energy_generator){
        this.slot_energy_generator = energy_generator
    }
	
    function install_scanner(IScanner scanner){
        this.slot_scanner = scanner
    }
}

// Ρ„Π°Π±Ρ€ΠΈΠΊΠ° трансформСров

class TransformerFactory(){
    function build_some_transformer() {
       	transformer = new Transformer()
       	laser_gun = new LaserGun()
       	nuclear_reactor = new NuclearReactor()
       	radar = new Radar()
       	
       	transformer.install_weapon(laser_gun)
       	transformer.install_energy_generator(nuclear_reactor)
       	transformer.install_scanner(radar)
        	
        return transformer
    }
}

// использованиС

transformer_factory = new TransformerFactory()
oleg = transformer_factory.build_some_transformer()

Анимация β„–4

К соТалСнию, Π² ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π΅ Π²Π»Π΅Π·Π»Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ°, Π½ΠΎ ΠΎΠ½Π° всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°, трансформСра ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ Π²ΠΎ Π΄Π²ΠΎΡ€Π΅.

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ слой абстракции Π² Π²ΠΈΠ΄Π΅ интСрфСйсов ΠΌΠ΅ΠΆΠ΄Ρƒ слоСм ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ слоСм-ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΌ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΡ… ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ это Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, посмотрСв Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ слой Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: Π² слоС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (слСва) Π½Π΅Ρ‚ Π½ΠΈ слова ΠΏΡ€ΠΎ класс Transformer, Π° Π² слоС-ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ (справа) Π½Π΅Ρ‚ Π½ΠΈ слова ΠΏΡ€ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (Ρ‚Π°ΠΌ Π½Π΅Ρ‚ слов Radar, RocketLauncher, NuclearReactor ΠΈ Ρ‚. Π΄.)

Π’ Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊ трансформСрам, Π½Π΅ затрагивая Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠΈ самих трансформСров. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Ρ… трансформСров, комбинируя ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅, Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅, Π½Π΅ мСняя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ….

Утиная типизация

Π―Π²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ наблюдаСм Π² ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅ΠΉΡΡ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, называСтся ΡƒΡ‚ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ: Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ крякаСт ΠΊΠ°ΠΊ ΡƒΡ‚ΠΊΠ°, ΠΏΠ»Π°Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΡƒΡ‚ΠΊΠ°, ΠΈ выглядит ΠΊΠ°ΠΊ ΡƒΡ‚ΠΊΠ°, Ρ‚ΠΎ, скорСС всСго β€” это ΡƒΡ‚ΠΊΠ°.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ это Π½Π° язык трансформСров, Π·Π²ΡƒΡ‡Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊ: Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ стрСляСт ΠΊΠ°ΠΊ ΠΏΡƒΡˆΠΊΠ°, ΠΈ пСрСзаряТаСтся ΠΊΠ°ΠΊ ΠΏΡƒΡˆΠΊΠ°, скорСС всСго это ΠΏΡƒΡˆΠΊΠ°. Если устройство Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ, скорСС всСго это Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ энСргии.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ иСрархичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ наслСдования, ΠΏΡ€ΠΈ ΡƒΡ‚ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ трансформСру ΠΏΠΎΡ„ΠΈΠ³, ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса ΠΏΡƒΡˆΠΊΡƒ Π΅ΠΌΡƒ Π΄Π°Π»ΠΈ, ΠΈ ΠΏΡƒΡˆΠΊΠ° Π»ΠΈ это Π²ΠΎΠΎΠ±Ρ‰Π΅. Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ эта ΡˆΡ‚ΡƒΠΊΠΎΠ²ΠΈΠ½Π° ΡƒΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ! Π­Ρ‚ΠΎ Π½Π΅ достоинство ΡƒΡ‚ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° скорСС компромисс. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ обратная ситуация, ΠΊΠ°ΠΊ Π½Π° этой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅:

ISP

(Interface Segregation Principle / ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйса / Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ SOLID) ΠΏΡ€ΠΈΠ·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΆΠΈΡ€Π½Ρ‹Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы. ВмСсто этого интСрфСйсы Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΈ спСциализированныС, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π³ΠΈΠ±Ρ‡Π΅ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… классах, Π½Π΅ заставляя ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ лишниС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Абстракция

Π’ ООП всС крутится Π²ΠΎΠΊΡ€ΡƒΠ³ абстракции. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„Π°Π½Π°Ρ‚ΠΈΠΊΠΈ, ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅, Ρ‡Ρ‚ΠΎ абстракция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ ООП-Ρ‚Ρ€ΠΎΠΈΡ†Ρ‹ (инкапсуляция, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, наслСдованиС). А ΠΌΠΎΠΉ инспСктор ΠΏΠΎ Π£Π”Πž Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅: абстракция присуща для любого программирования, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ООП, поэтому ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹, Π½ΠΎ ΠΈΠ· пСсни слов Π½Π΅ Π²Ρ‹ΠΊΠΈΠ½Π΅ΡˆΡŒ. Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, абстракция Π½ΡƒΠΆΠ½Π°, ΠΈ особСнно Π² ООП.

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ абстракции

Π’ΡƒΡ‚ нСльзя Π½Π΅ ΠΏΡ€ΠΎΡ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΡˆΡƒΡ‚ΠΊΡƒ:
β€” Π»ΡŽΠ±ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ слоя абстракции, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ большого количСства абстракций.

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

НСвСрный Π²Ρ‹Π±ΠΎΡ€ уровня абстракции Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

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

Π•Ρ‰Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции опрСдСляСтся Π½Π΅ для всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Ρ†Π΅Π»ΠΎΠΌ, Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π’ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ мСстах систСмы абстракции ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСдостаточно, Π° Π³Π΄Π΅-Ρ‚ΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€. Однако, Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ уровня абстракции ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ своСврСмСнным Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово β€” своСврСмСнным. Π—Π°ΠΏΠΎΠ·Π΄Π°Π»Ρ‹ΠΉ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ провСсти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ абстракции Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡƒΠΆΠ΅ мноТСство ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ². ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ обряд Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π² Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… систСмах ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΏΡ€ΡΠ³Π°Ρ‚ΡŒΡΡ с острой болью Π² труднодоступных мСстах программиста. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ Π² Π΄ΠΎΠΌΠ΅ β€” дСшСвлС ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ рядом Π΄ΠΎΠΌ с нуля.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ уровня абстракции ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ гипотСтичСской ΠΈΠ³Ρ€Ρ‹ «трансформСры-ΠΎΠ½Π»Π°ΠΉΠ½Β». Π£Ρ€ΠΎΠ²Π½ΠΈ абстракции Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ слои, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ рассматриваСмый слой Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΆΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ, забирая ΠΈΠ· Π½Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° Π² сСбя.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ слой. Π’ ΠΈΠ³Ρ€Π΅ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ класс трансформСра, всС свойства ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ описаны Π² Π½Π΅ΠΌ. Π­Ρ‚ΠΎ совсСм дСрСвянный ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΊΠ°Π·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹, которая Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ особой гибкости.

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

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

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

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

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования

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

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования, ΠΊΠ°ΠΊ ΠΈ абстракция, свойствСнны Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ООП Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π½ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°ΠΌ. Π’ΠΎΠΎΠ±Ρ‰Π΅, Ρ‚Π΅ΠΌΠ° ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π½ΠΎ здСсь Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π΅Ρ€Π΅Ρ‡ΡŒ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ. Π­Ρ‚ΠΎ Π»ΠΎΠ²ΡƒΡˆΠΊΠ°! БСйчас объясню, ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

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

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² β€” Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π“ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΊΠΎΠ»Π»Π΅Π³Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² этом мСстС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Β«Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° обязанностСй», Ρ‡Π΅ΠΌ полчаса Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Π±ΡƒΠΌΠ°ΠΆΠΊΠ΅.

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

Π’ условиях соврСмСнных Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² вашСм ΠΊΠΎΠ΄Π΅ слова class Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠ· вас ООП-программиста. Ибо Ссли Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ описанныС Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ (ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, наслСдованиС ΠΈ Ρ‚. Π΄.), Π° вмСсто этого примСняСтС классы лишь для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ это Π½Π΅ ООП. Π’ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ нСймспСйсами ΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ…. НС ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅, ΠΈΠ½Π°Ρ‡Π΅ Π½Π° собСсСдовании Π±ΡƒΠ΄Π΅Ρ‚ стыдно.

Π₯очСтся Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ свою пСснь Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ словами. Π›ΡŽΠ±Ρ‹Π΅ описанныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, ΠΊΠ°ΠΊ ΠΈ ООП Π² Ρ†Π΅Π»ΠΎΠΌ Π½Π΅ стоит ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΌ, Π³Π΄Π΅ это бСссмыслСнно ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ Π²Π΅Π΄Π΅Ρ‚ ΠΊ появлСнию статСй со странными Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° «НаслСдованиС β€” ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ старСния» ΠΈΠ»ΠΈ Β«Π‘ΠΈΠ½Π³Π»Ρ‚ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ онкологичСским заболСваниям».

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

К соТалСнию, Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ сущСствуСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² Π½Π° всС случаи ΠΆΠΈΠ·Π½ΠΈ, Π³Π΄Π΅ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ умСстно, Π° Π³Π΄Π΅ нСумСстно. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ постСпСнно ΡƒΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)?

Π’ языках программирования инкапсуля́ция имССт ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ:

  • языковой ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ограничСния доступа ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;
  • языковая конструкция, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ объСдинСнию Π΄Π°Π½Π½Ρ‹Ρ… с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ функциями), ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ эти Π΄Π°Π½Π½Ρ‹Π΅.

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

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

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ цСлСсообразно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… цСлях:

  • ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Π°Ρ локализация ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ нСобходимости Ρ‚Π°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ,
  • ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (ΠΊΠ°ΠΊΠΈΠ΅ измСнСния Π² ΠΊΠΎΠ΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ измСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ) ΠΈ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ послСдствий ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

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

C++

class A 
{
 public:
   int a, b; //Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ интСрфСйса
   int ReturnSomething(); //ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ интСрфСйса
 private:
   int Aa, Ab; //скрытыС Π΄Π°Π½Π½Ρ‹Π΅
   void DoSomething(); //скрытый ΠΌΠ΅Ρ‚ΠΎΠ΄
};

Класс А инкапсулируСт свойства Aa, Ab ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ DoSomething, прСдставляя внСшний интСрфСйс ReturnSomething, a, b.

C#

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

    class NoEncapsulation
    {
        public double Value;
        public string ValueString;
    }

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

    class EncapsulationExample
    {
        private double valueDouble;
        private string valueString;
 
        public double Value
        {
            get { return valueDouble; }
            set 
            {
                valueDouble = value;
                valueString = value.ToString();
            }
        }
 
        public string ValueString
        {
            get { return valueString; }
            set 
            {
                double tmp_value = Convert.ToDouble(ValueString); //здСсь ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
                valueDouble = tmp_value;
                valueString = ValueString;
            }
        }
    }

Π—Π΄Π΅ΡΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ valueDouble ΠΈ valueString Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· свойства Value ΠΈ ValueString. Если ΠΌΡ‹ попытаСмся ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ свойству ValueString Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ строку ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ останутся Π² ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌ, согласованном состоянии, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

Delphi

Π’ Delphi для создания скрытых ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΡ… достаточно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π² сСкции private.

  TMyClass = class
  private
    FMyField: Integer;
    procedure SetMyField(const Value: Integer);
    function GetMyField: Integer;
  protected
  public
    property MyField: Integer read GetMyField write SetMyField;
  end;

Для создания интСрфСйса доступа ΠΊ скрытым полям Π² Delphi Π²Π²Π΅Π΄Π΅Π½Ρ‹ свойства.

PHP5

class A 
{
 private $a; // скрытоС свойство
 private $b; // скрытоС свойство
 private function DoSomething() //скрытый ΠΌΠ΅Ρ‚ΠΎΠ΄
 {  
  //actions
 }
 
 public function ReturnSomething() //ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ интСрфСйс
 { 
  //actions
 }
};

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ свойства $a ΠΈ $b для класса A с Ρ†Π΅Π»ΡŒΡŽ прСдотвращСния поврСТдСния этих свойств Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²Π° Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

Java

class A {
 private int a;
 private int b;
 
 private void doSomething() { //скрытый ΠΌΠ΅Ρ‚ΠΎΠ΄
  //actions
 }
 
 public int returnSomething() { //ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄
  return a;
 } 
}

JavaScript

A = function() {
 // private
 var _property;
 var _privateMethod = function() { /* actions */ } // скрытый ΠΌΠ΅Ρ‚ΠΎΠ΄
 
 // public
 this.getProperty = function() { // ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ интСрфСйс
  return _property;
 }
 
 this.setProperty = function(value) { // ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ интСрфСйс
  _property = value;
  _privateMethod();
 }
}

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

ООП с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ (Ρ‡Π°ΡΡ‚ΡŒ 1) / Π₯Π°Π±Ρ€

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

Для этого я постарался Π½Π° Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΠΆΠΈΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ понятия ООП (класс, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, интСрфСйс, абстракция, инкапсуляция, наслСдованиС ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ).

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ, прСдставлСнная Π½ΠΈΠΆΠ΅, посвящСна классам, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈ интСрфСйсам.
Вторая Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ наслСдованиС

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия ООП

Класс

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

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

Класс – это способ описания сущности, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ состояниС ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, зависящСС ΠΎΡ‚ этого состояния, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° для взаимодСйствия с Π΄Π°Π½Π½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ (ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚).

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программирования класс ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠΎΠ»Π΅ΠΉ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Ρ‡Π»Π΅Π½ΠΎΠ² класса) ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²).

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, класс являСтся слоТным Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ нашСм случаС, класс Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ – Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ. Атрибутами класса Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ, подвСска, ΠΊΡƒΠ·ΠΎΠ², Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ колСса ΠΈ Ρ‚.Π΄. ΠœΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса Π±ΡƒΠ΄Π΅Ρ‚ Β«ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π²Π΅Ρ€ΡŒΒ», Β«Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° пСдаль Π³Π°Π·Π°Β», Π° Ρ‚Π°ΠΊΠΆΠ΅ Β«Π·Π°ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π±Π΅Π½Π·ΠΈΠ½Π° ΠΈΠ· Π±Π΅Π½Π·ΠΎΠ±Π°ΠΊΠ° Π² Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒΒ». ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступны для выполнСния Π΄Ρ€ΡƒΠ³ΠΈΠΌ классам (Π² частности, классу Β«Π’ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΒ»). ПослСдний описываСт взаимодСйствия Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈ Π½Π΅ доступСн ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Π’ дальнСйшСм, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ слово Β«ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΒ» ассоциируСтся с пасьянсом Β«ΠšΠΎΡΡ‹Π½ΠΊΠ°Β» ΠΈ Β«Microsoft WordΒ», ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Ρ‚Π΅Ρ… программистов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ваш класс, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ вас самих. Π§Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ класса, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ.

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

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ (экзСмпляр) – это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ класса, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ состояниС ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ опрСдСляСмоС классом.

Говоря простым языком, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с этими значСниями Π½Π° основС ΠΏΡ€Π°Π²ΠΈΠ», Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² классС. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли класс – это Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ абстрактный Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ ΠΈΠ· Β«ΠΌΠΈΡ€Π° ΠΈΠ΄Π΅ΠΉΒ», Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ – это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, стоящий Ρƒ вас ΠΏΠΎΠ΄ ΠΎΠΊΠ½Π°ΠΌΠΈ.

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

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

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ – это Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса, доступных для использования Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ классами.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ интСрфСйсом класса Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π°Π±ΠΎΡ€ всСх Π΅Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² совокупности с Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². По сути, интСрфСйс спСцифицируСт класс, Ρ‡Ρ‘Ρ‚ΠΊΠΎ опрСдСляя всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ дСйствия Π½Π°Π΄ Π½ΠΈΠΌ.

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

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

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

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ?

  • Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ β€” (Π»Π°Ρ‚.Β in Π², capsula ΠΊΠΎΡ€ΠΎΠ±ΠΎΡ‡ΠΊΠ°Β ; ΠΈΡ‚Π°Π». incapsulare Π·Π°ΠΊΡƒΠΏΠΎΡ€ΠΈΠ²Π°Ρ‚ΡŒ) 1. Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ, Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ‡Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ ΠΌΠ΅ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ, Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ, Π²Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ с Ρ†Π΅Π»ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ влияния Π½Π° ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π΅. (ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π΄ΠΈΠΎΠ°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΎΡ‚Ρ…ΠΎΠ΄Ρ‹ Π² капсулу, Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒβ€¦ … Β  ВикипСдия

  • Π˜ΠΠšΠΠŸΠ‘Π£Π›Π―Π¦Π˜Π― β€” (Π»Π°Ρ‚.). ИзмСнСниС ΠΎΠ΄Π½ΠΈΡ… слов Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π² амСриканских языках. Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ иностранных слов, Π²ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… Π² состав русского языка. Π§ΡƒΠ΄ΠΈΠ½ΠΎΠ² А.Н., 1910. инкапсуляция (Π»Π°Ρ‚. in Π²) ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ капсулы 1 Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‡ΡƒΠΆΠ΄Ρ‹Ρ… для ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΌΠ° вСщСств (ΠΈΠ½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚Π΅Π»,… … Β  Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ иностранных слов русского языка

  • инкапсуляция β€” инкапсулированиС Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ русских синонимов. инкапсуляция сущ., ΠΊΠΎΠ» Π²ΠΎ синонимов: 1 β€’ инкапсулированиС (1) Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ синонимов ASIS … Β  Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ синонимов

  • инкапсуляция «IP Π² IP» β€” Для инкапсуляции Π² Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡƒ IP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ инкапсуляция IP Π² IP (IP in IP), для этого ΠΏΠ΅Ρ€Π΅Π΄ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ IP Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ вставляСтся внСшний Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ IP (МБЭ Π’ Y.1281). [http://www.iks media.ru/glossary/index.html?glossid=2400324]… … Β  Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ тСхничСского ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

  • Π˜ΠΠšΠΠŸΠ‘Π£Π›Π―Π¦Π˜Π― β€” (ΠΎΡ‚ Π»Π°Ρ‚ capsula ящик, капсула, сумка), осумкованиС, Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰ΠΈΠΉΡΡ для обозначСния разрастания ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡ‚ΠΊΠ°Π½Π½ΠΎΠΉ капсулы, сумки Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… ΠΏΠ°Ρ‚. ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΠ°Ρ€Π°Π·ΠΈΡ‚ΠΎΠ² ΠΈ ΠΏΡ€. Ρ‚Π΅Π», Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π»ΠΈΠ±ΠΎ Ρ€Π°ΡΡΠ°ΡΡ‹Π²Π°Π½ΠΈΡŽ в… … Β  Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ мСдицинская энциклопСдия

  • инкапсуляция β€” скрытиС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π±ΠΈΡ€Π°Π½ΠΈΠ΅ Π’Π΅Ρ€ΠΌΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ структурированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ особого Π²ΠΈΠ΄Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ классами ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ класса нС… … Β  Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ тСхничСского ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

  • инкапсуляция β€” (incapsulatio; ΠΈΠ½ + Π»Π°Ρ‚. capsula ящичСк, ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°) процСсс отграничСния ΠΎΡ‡Π°Π³Π° воспалСния ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΡ€ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π° ΠΏΡƒΡ‚Π΅ΠΌ образования Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ Ρ„ΠΈΠ±Ρ€ΠΎΠ·Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ (капсулы) … Β  Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ мСдицинский ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

  • инкапсуляция β€” инкапсуляция, инкапсуляции, инкапсуляции, инкапсуляций, инкапсуляции, инкапсуляциям, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, инкапсуляции, инкапсуляциСй, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΠ΅ΡŽ, инкапсуляциями, инкапсуляции, инкапсуляциях (Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: «Полная акцСнтуированная ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΏΠΎ А. А.… … Β  Π€ΠΎΡ€ΠΌΡ‹ слов

  • инкапсуляция β€” инкапсул яция, ΠΈ … Β  Русский орфографичСский ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

  • Π˜ΠΠšΠΠŸΠ‘Π£Π›Π―Π¦Π˜Π― β€” (ΠΎΡ‚ Π»Π°Ρ‚. inΒ Β— Π², Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈ capsulaΒ Β—ΠΊΠΎΡ€ΠΎΠ±ΠΎΡ‡ΠΊΠ°, ящичСк), разрастаниС ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΊΠ°Π½ΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΈΠ½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚Π΅Π» ΠΈΠ»ΠΈ ΠΌΡ‘Ρ€Ρ‚Π²Ρ‹Ρ… масс, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΎΡ€Π³Π°Π½Π°Ρ… ΠΈ тканях ΠΏΡ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… патологичСских процСссах … Β  Π’Π΅Ρ‚Π΅Ρ€ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ энциклопСдичСский ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² графичСских языках / Π₯Π°Π±Ρ€

    ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) – концСпция, которая ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ слоТных систСм, Π·Π° счСт ввСдСния Π½ΠΎΠ²Ρ‹Ρ… понятий, Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ, Ρ‡Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ языки программирования. Как ΠΏΠΈΡˆΠ΅Ρ‚ википСдия, Β«ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ чСловСчСский язык Π² Ρ†Π΅Π»ΠΎΠΌ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ идСологию ООП, начиная с инкапсуляции прСдставлСния ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Π΅ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ заканчивая ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ использования слова Π² пСрСносном смыслС, Ρ‡Ρ‚ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ прСдставлСния Ρ‡Π΅Ρ€Π΅Π· имя ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ понятия – класса.Β»

    Но с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния всСх, ΠΊΡ‚ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ сталкивался эти этим абстракциями, послС классичСских ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… языков понятнСС Π½Π΅ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ, каТСтся Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ всС Π΅Ρ‰Π΅ большС Π·Π°ΠΏΡƒΡ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ.

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

    Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС Π² графичСской Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° управлСния Π·Π°Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ АЭБ.:

    Рисунок 1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ управлСния АЭБ Π² графичСской Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ

    Π‘Π»Π΅Π²Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ сигналы, справа ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

    МнС каТСтся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ Ρ€Π΅Π±Π΅Π½ΠΎΠΊ:

    • Если насос Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ 60 сСкунд ΠΈ расход мСньшС 10, Ρ‚ΠΎ Π·Π°Π΄Π²ΠΈΠΆΠΊΡƒ Π½Π° рСциркуляции ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ.
    • Если насос Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚ΠΎ ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ 5 сСкунд Π½Π° Π·Π°Π΄Π²ΠΈΠΆΠΊΠΈ 001 ΠΈ 002 ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ.
    • Если расход большС 20 ΠΈ насос Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚ΠΎ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ 5 сСкунд Π½Π° Π·Π°Π΄Π²ΠΈΠΆΠΊΡƒ 003 ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ.

    Π’ Π±Ρ‹Ρ‚Π½ΠΎΡΡ‚ΡŒ мою студСнтом я ΠΏΠΎΠ΄Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π», создавая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для Delphi ΠΈ Π±Ρ‹Π» Π·Π½Π°ΠΊΠΎΠΌ с ООП Π½Π΅ ΠΏΠΎΠ½Π°ΡΠ»Ρ‹ΡˆΠΊΠ΅. ΠŸΠΎΡ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° столкнулся с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ управлСния АЭБ, ΠΎΡ‡Π΅Π½ΡŒ удивился Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ абстрагирования, инкапсуляции ΠΈ, прости господи ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чистый Π‘ΠΈ, ΠΈ Π΅Ρ‰Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡ€Π΅Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈ рСкомСндация MISRA C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π±Ρ‹Π»ΠΎ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ, пСрСносимо, бСзопасно.

    Π’Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ обрСзания Π‘ΠΈ Π² ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π±Ρ‹Π» язык FIL, для систСм управлСния Ρ€Π΅Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ Π Π‘ΠœΠš. Π’ Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Ρ€Π°Π½Π΅Π΅ писались Π½Π° Π‘ΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈΡΡŒ Π½Π° основС тСкстового Ρ„Π°ΠΉΠ»Π°, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ описаны Π½Π° языкС FIL. Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ, Π½ΠΎ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. И всС это – Π²ΠΎ имя бСзопасности ΠΈ надСТности.

    Но ΠΏΡ€ΠΈ этом систСма управлСния Ρ€Π΅Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ систСма управлСния АЭБ – это ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎΡ‚ случай, Π³Π΄Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ООП Π΄ΠΎΠ»ΠΆΠ½Ρ‹ примСнятся Π² ΠΏΠΎΠ»Π½Ρ‹ΠΉ рост. Π’ само Π΄Π΅Π»Π΅, Π΅ΡΡ‚ΡŒ мноТСство ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ³ΠΎ оборудования – Π·Π°Π΄Π²ΠΈΠΆΠΊΠΈ, насосы, Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ, всё Π»Π΅Π³ΠΊΠΎ классифицируСтся, Π΅ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ. Казалось Π±Ρ‹, Π²ΠΎΡ‚ ΠΎΠ½ΠΎ – примСняй ООП, классы, наслСдованиС, абстрагированиС ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Но Π½Π΅Ρ‚, Π½ΡƒΠΆΠ΅Π½ чистый Π‘ΠΈ ΠΈ это трСбования бСзопасности.

    А дальшС – Π΅Ρ‰Π΅ интСрСснСС. На самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для управлСния АЭБ ΠΏΠΈΡˆΠ΅Ρ‚ Π½Π΅ программист, Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ, Π° Π³Π»Π°Π²Π½ΠΎΠ΅ – ΠΎΠ½ Π·Π½Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° всю это Π±Π°ΠΉΠ΄Ρƒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄ΠΎΠ»Π±Π°Π½ΡƒΠ»ΠΎ. А программист Π΄ΠΎΠ»ΠΆΠ΅Π½ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ всё это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠ΄Π΅ Π‘ΠΈ. А Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Ρ‚ΠΎ Π±Ρ‹ программиста Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ, Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ сам рисовал тСхнологичСскиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² графичСском Π²ΠΈΠ΄Π΅, автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π» ΠΊΠΎΠ΄ Π‘ΠΈ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π» Π΅Π³ΠΎ Π² Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρƒ управлСния. Π­Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Π΅ стандарты ΠΏΠΎ бСзопасности, Π² этом случаС программист – ΠΊΠ°ΠΊ скрипач – Π½Π΅ Π½ΡƒΠΆΠ΅Π½. Он вносит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ошибки ΠΈ искаТСния Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ мыслСй Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°.

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

    Π’ самом Π΄Π΅Π»Π΅, Ссли ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сгСнСрирован ΠΈΠ· схСмы Π½Π° рисункС 1 ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ чистый Π‘ΠΈ Π±Π΅Π· всяких Ρ‚Π°ΠΌ классов.

    НапримСр Ρ‚Π°Π±Π»ΠΈΡ†Π° Π²Ρ…ΠΎΠ΄Π° Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

    /* Index=0
       UID=0
       GeneratorClassName=TSignalReader
       Name=KBA__AA.KBA31EY001.alg_inp
       Type=Π’Ρ…ΠΎΠ΄ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° */
    
    state_vars->kbaalgsv0_out_1_ = kba31ap001_xb01;
    state_vars->kbaalgsv0_out_4_ = kba31cf001_xq01;

    ΠŸΡ€ΠΎΡΡ‚ΠΎ присвоСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

    Π›ΡŽΠ±ΠΎΠΉ Π±Π»ΠΎΠΊ описываСтся ΠΊΠ°ΠΊ вычислСниС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΏΠΎ Π²Ρ…ΠΎΠ΄Ρƒ, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² спискС констант. НапримСр Π±Π»ΠΎΠΊ Β«Π‘ΠΎΠ»ΡŒΡˆΠ΅Β» выглядит Π² ΠΊΠΎΠ΄Π΅ Ρ‚Π°ΠΊ:

    /* Index=5
       UID=5
       GeneratorClassName=TLogBlock
       Name=KBA__AA.KBA31EY001.smu.GT2
       Type=ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π‘ΠžΠ›Π¬Π¨Π• */
    
    locals->v5_out_0_ = state_vars->kbaalgsv0_out_4_ > consts->kbaalgsv3_a_;

    Π’Ρ‹Ρ…ΠΎΠ΄ Π±Π»ΠΎΠΊΠ° это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сравнСниС сигнала Π²Ρ…ΠΎΠ΄Π° со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² константС.

    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π»ΠΎΠΊΠ°Ρ… происходит ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ вычислСниС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ…, ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ осущСствляСтся запись Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

    /* Index=14
       UID=14
       GeneratorClassName=TSignalWriter
       Name=KBA__AA.KBA31EY001.alg_out
       Type=Π’Ρ‹Ρ…ΠΎΠ΄ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° */
    
    if((action==f_InitState)||(action==f_GoodStep)||(action==f_RestoreOuts)){
     kba31ey001_yb01 = locals->v8_out_0_;
     kba31ey001_yb11 = state_vars->kbaalgsv9_out_0_;
     kba31ey001_yb12 = state_vars->kbaalgsv12_out_0_;
     kba31ey001_yb02 = locals->v13_out_0_;
    };

    А Π³Π΄Π΅ здСсь классы, спроситС Π²Ρ‹?

    Вся мСтодология, связанная с ООП, находится Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Казалось Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ? А Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Π° Π±Π΅Π·Π΄Π½Π°. НапримСр имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ kba31ap001_xb01, просто пСрСмСнная Π² ΠΊΠΎΠ΄Π΅ Π‘ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π°Ρ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ наимСнованию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Однако для Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Π½Ρ‚Π° ΠΎΠ½Π° выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ: Β«Π Π΅Π°ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅, систСма ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ водоснабТСния, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ насос, пуск». ВсС это Π²ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ прСобразования происходит благодаря Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΎΠΉ систСмС кодирования (Kraftwerk-Kennzeichensystem) KKS, Ρ†ΠΈΡ‚Π°Ρ‚Π°:

    β€œΠ”Π°Π½Π½Π°Ρ систСма классификации кодирования ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для элСктростанций ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ большими возмоТностями, Π° Ρ‚Π°ΠΊ ΠΆΠ΅, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ особСнности свободно-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… микропроцСссорных тСхничСских срСдств.

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

    Но самоС интСрСсноС Π² послСднСй части ΠΈΠΌΠ΅Π½ΠΈ β€” _xb01, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ задаСтся Ρ‡Π΅Ρ€Π΅Π· Π·Π½Π°ΠΊ подчСркивания. Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π±Π°Π·Ρƒ сигналов для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° управлСния, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Ρ‚Π°ΠΌ классы, понятныС ΠΈ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ всСм, ΠΊΡ‚ΠΎ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ, ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΈ Π³Π΄Π΅-Ρ‚ΠΎ интСрСсовался ООП (см. Рис. 2).

    Рисунок 2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ структуры Π±Π°Π·Ρ‹ сигналов для систСмы управлСния АЭБ.

    Π£ нас Π΅ΡΡ‚ΡŒ классы, ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½Π° рисункС это столбСц Β«ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΒ». НапримСр, Β«KD1Β» Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… сигналов, ΠΏΠΎΠ»Π΅ΠΉ класса Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄Π΅Π» измСрСния, Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡ€Π΅Π΄Π΅Π» измСрСния, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° ΠΈ Ρ‚.Π΄. β€” это абстракция.

    А Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅ΡΡ‚ΡŒ рСализация Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса β€” ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ВК21F02B1, располоТСнный Π² ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π΅, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΆΠ΅ догадались ΠΏΠΎ Π΅Π³ΠΎ названию, Π² Β«Π Π΅Π°ΠΊΡ‚ΠΎΡ€Π½ΠΎΠΌ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠΈ, систСмС ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ водоснабТСния, Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ насоса», Π΄Π° ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это Π΄Π°Ρ‚Ρ‡ΠΈΠΊ расхода, Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² этом Π½Π°Π·Π²Π°Π½ΠΈΠΈ, Π½ΠΎ это Π½Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ.

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

    На этом мСстС ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, постой это ΠΆΠ΅ Π½Π΅ совсСм ООП, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ совсСм Π½Π΅ ООП, Ρ‚ΡƒΡ‚ ΠΆΠ΅ просто структуры Π΄Π°Π½Π½Ρ‹Ρ…, это Π΅ΡΡ‚ΡŒ ΠΈ Π² стандартном Π‘ΠΈ. А Π³Π΄Π΅ инкапсуляция ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² состав класса? ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² классС, Ρ‚ΠΎΠ³Π΄Π° это ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ настоящий ΠΊΠΎΡˆΠ΅Ρ€Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ООП.

    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ выглядит Π² графичСском Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° контроля достовСрности Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°. На рисункС 3 Ρ‡Π°ΡΡ‚ΡŒ схСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов:

    Рисунок 3. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигнала.

    Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ВК21F02B1_XQ04, сформированныС ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ККS ΠΈ Π½Π° основании Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠΎΠ»Π΅ΠΉ класса. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ происходит вычислСниС показания Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… ВК21F02B1_XQ03 ΠΏΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ значСниям ΠΏΠΎΠ»Π΅ΠΉ экзСмпляра класса Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ ВК21F02B1_Xmin ΠΈ ВК21F02B1_Xmax.

    Если обратится ΠΊ ΠΊΠΎΠ΄Ρƒ, сгСнСрированному ΠΈΠ· этой схСмы, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ простоС присвоСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, чистый Π‘ΠΈ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… плюсов ΠΈ ООП.

     /* Index=12
       UID=12
       GeneratorClassName=TSignalReader
       Name=KD1.kd3_45.SR6
       Type=Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· списка сигналов */
    
    state_vars->su100v12_out_0_ = tk21f02b1_ai;

    И присвоСниС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° расчСта, Ρ‚ΠΎΠΆΠ΅ ΠΊΠ°ΠΊ простоС присвоСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ числа, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π½Π΅ ΡƒΡ€ΠΎΠ½ΠΈΡ‚ΡŒ систСму Ссли Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ)

    /* Index=100
       UID=100
       GeneratorClassName=TSignalWriter
       Name=KD1.kd3_45.SW3
       Type=Π—Π°ΠΏΠΈΡΡŒ Π² список сигналов */
    
    if(isfinite(locals->v63_out_0_)){
     tk21f02b1_xq04 = locals->v63_out_0_;
    };

    А Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚ появляСтся объСдинСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ класса ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ? На самом Π΄Π΅Π»Π΅ я Π·Π½Π°ΠΊΠΎΠΌ с двумя Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ этого фокуса. БСйчас Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…. (Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½ здСсь..)

    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ Π½Π° схСмС настраиваСтся Π±Π»ΠΎΠΊ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ располоТСна схСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (см. рис. 4).

    Π£ нас Π΅ΡΡ‚ΡŒ схСма, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π±Π»ΠΎΠΊΠΈ субмодСли графичСского языка программирования, Π²Π½ΡƒΡ‚Ρ€ΠΈ этих Π±Π»ΠΎΠΊΠΎΠ² находится графичСская схСма, Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° рисункС 3, β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов с Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ².

    Π’ свойствах Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ поля Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… сигналов ΠΈ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находятся ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… сигналов, экзСмпляры класса, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Достаточно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ, экзСмпляр класса ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ происходит Ρ‡ΡƒΠ΄ΠΎ. Π’ схСмС всС Π±Π»ΠΎΠΊΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ записи ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠ° ВК21F02B1_XQ03, (имя Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° экзСмпляра класса + имя поля).

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π‘ΠΈ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ значСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°. И программист Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ всС сдСлал сам ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» схСму Π² графичСском языкС програмирования для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° управлСния АЭБ.

    Рисунок 4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки схСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°.

    Для присвоСния ΠΈΠΌΠ΅Π½ слуТит ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ скрипт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π² срСдС проСктирования систСм управлСния, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ Π½Π° рисункС 5. ВсСм Π±Π»ΠΎΠΊΠ°ΠΌ чтСния Π½Π° схСмС ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°, состоящиС ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ поля Π² классС (см. рис. 5).

    Рисунок 5. Настройка ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π±Π»ΠΎΠΊΠ°Ρ… чтСния.

    Ясно, Ρ‡Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создано Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов, ΠΏΠΎ сути ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для класса Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ООП. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сформированы для Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°, Π΅Π³ΠΎ ΠΏΠΎΠ΄Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Π΄Ρ€Π°Ρ… SCADA систСмы, ΠΈΠ»ΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ измСнСния уставок. БоздаСтся схСма Π² графичСском Π²ΠΈΠ΄Π΅, сохраняСтся Π²ΠΈΠ΄Π΅ Π±Π»ΠΎΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ нСобходимости.

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

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

    Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ

    Π² Java OOP с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ

    • Home
    • Testing

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

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

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

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

          • SQL
          • 000

            0003 SQL

            000

            0003 SQL

            000

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

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

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

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

            • HBOps
            • 0003

            • HBOps
            • 0003

            • MicroStrategy

        .

        8.4 — Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа ΠΈ инкапсуляция

        Автор Alex, 4 сСнтября 2007 Π³. | послСднСС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: nascardriver 22 августа 2020 Π³.

        Π—Π°Ρ‡Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ?

        Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, часто Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π·Π°Ρ‡Π΅ΠΌ Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° этот вопрос, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ.

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

        По Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ интСрфСйса ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

        Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ

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

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

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

        ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ: инкапсулированныС классы ΠΏΡ€ΠΎΡ‰Π΅ Π² использовании ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

        ΠŸΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ инкапсулированном классС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ общСдоступны для использования этого класса, ΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ значСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚.НСваТно, ΠΊΠ°ΠΊ класс Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ. НапримСр, класс, содСрТащий список ΠΈΠΌΠ΅Π½, ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с использованиСм динамичСского массива строк Π² стилС C, std :: array, std :: vector, std :: map, std :: list ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…. конструкции. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот класс, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ (ΠΈΠ»ΠΈ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ), ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство ошибок. Π­Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ прСимущСство инкапсуляции большС, Ρ‡Π΅ΠΌ какая-Π»ΠΈΠ±ΠΎ другая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°.

        ВсС классы стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C ++ инкапсулированы.ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, насколько слоТнСС Π±Ρ‹Π» Π±Ρ‹ C ++, Ссли Π±Ρ‹ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ std :: string, std :: vector ΠΈΠ»ΠΈ std :: cout, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…!

        ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ: инкапсулированныС классы ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ваши Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС

        Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ опасны, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ вас Π½Π΅Ρ‚ строгого контроля Π½Π°Π΄ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚. ΠšΠ»Π°ΡΡΡ‹ с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ ΡΡ‚Ρ€Π°Π΄Π°ΡŽΡ‚ ΠΎΡ‚ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² мСньшСм ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅.

        НапримСр, допустим, ΠΌΡ‹ пишСм строковый класс.ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

        class MyString

        {

        char * m_string; // ΠΌΡ‹ динамичСски размСстим здСсь Π½Π°ΡˆΡƒ строку

        int m_length; // Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π΄Π»ΠΈΠ½ΠΎΠΉ строки

        };

        Π­Ρ‚ΠΈ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ соСдинСниС: m_length всСгда Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ Π΄Π»ΠΈΠ½Π΅ строки, содСрТащСйся Π² m_string (это соСдинСниС называСтся ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ).Если Π±Ρ‹ m_length Π±Ρ‹Π»ΠΎ общСдоступным, любой ΠΌΠΎΠ³ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки, Π½Π΅ измСняя m_string (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚). Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ класс Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎΠ΅ состояниС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ всСвозмоТныС ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ДСлая m_length ΠΈ m_string Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ доступныС общСдоступныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с классом (ΠΈ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ m_length ΠΈ m_string всСгда ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ).

        ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚ ошибок ΠΏΡ€ΠΈ использовании нашСго класса.Рассмотрим класс с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ массива:

        class IntArray

        {

        public:

        int m_array [10];

        };

        Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ массиву Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒ массив с нСдопустимым индСксом, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ:

        int main ()

        {

        Массив IntArray;

        массив.m_array [16] = 2; // Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ индСкс массива, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ пСрСзаписали ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅ΠΌ

        }

        Однако, Ссли ΠΌΡ‹ сдСлаСм массив Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая сначала провСряСт, Ρ‡Ρ‚ΠΎ индСкс дСйствитСлСн:

        класс IntArray

        {

        частный:

        int m_array [10]; // ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ большС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ

        public:

        void setValue (int index, int value)

        {

        // Если индСкс нСдСйствитСлСн, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ

        if (index <0 | | index> = 10)

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

        m_array [индСкс] = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

        }

        };

        Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ Π·Π°Ρ‰ΠΈΡ‚ΠΈΠ»ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Π’ качСствС примСчания, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ at () std :: array ΠΈ std :: vector Π΄Π΅Π»Π°ΡŽΡ‚ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅!

        ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ: инкапсулированныС классы Π»Π΅Π³Ρ‡Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ

        Рассмотрим этот простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

        #include

        class Something

        {

        public:

        int m_value1;

        int m_value2;

        int m_value3;

        };

        int main ()

        {

        Π§Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ;

        Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ.m_value1 = 5;

        std :: cout << something.m_value1 << '\ n';

        }

        Π₯отя эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ m_value1 ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ? ΠœΡ‹ сломаСм Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½ΠΎ, вСроятно, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ class Something!

        Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ способ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классов, Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Ρƒ всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

        Π’ΠΎΡ‚ инкапсулированная вСрсия этого класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для доступа ΠΊ m_value1:

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        13

        140002

        14

        18

        19

        20

        #include

        class Something

        {

        private:

        int m_value1;

        int m_value2;

        int m_value3;

        общСдоступный:

        void setValue1 (int value) {m_value1 = value; }

        int getValue1 () {return m_value1; }

        };

        int main ()

        {

        Π§Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ;

        Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ.setValue1 (5);

        std :: cout << something.getValue1 () << '\ n';

        }

        Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ класса:

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        13

        140002

        14

        18

        19

        20

        #include

        class Something

        {

        private:

        int m_value [3]; // ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этого класса!

        public:

        // ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ

        void setValue1 (int value) {m_value [0] = value; }

        int getValue1 () {return m_value [0]; }

        };

        int main ()

        {

        // Но наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ!

        Π§Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ;

        Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ.setValue1 (5);

        std :: cout << something.getValue1 () << '\ n';

        }

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

        Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, Ссли Π±Ρ‹ Π³Π½ΠΎΠΌΡ‹ ΠΏΡ€ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² ваш Π΄ΠΎΠΌ Π½ΠΎΡ‡ΡŒΡŽ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ внутрСнности вашСго Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡƒΠ»ΡŒΡ‚Π° Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ (Π½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΡƒΡŽ) Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, Π²Ρ‹, вСроятно, Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π±Ρ‹!

        ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ: инкапсулированныС классы Π»Π΅Π³Ρ‡Π΅ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ

        И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, инкапсуляция ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Π°ΠΌ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ.Часто, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, это происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ (это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой ΠΈΠ· Π½ΠΈΡ…, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ останова Π½Π° всСх, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…). Однако, Ссли всС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠ±Ρ‰Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для измСнСния значСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ останова для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ мСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ° Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Π³Π΄Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ.

        Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа

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

        Ѐункция доступа — это короткая общСдоступная функция, Π·Π°Π΄Π°Ρ‡Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ — ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ частной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½Π°. НапримСр, Π² классС String Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

        класс MyString

        {

        частный:

        char * m_string; // ΠΌΡ‹ динамичСски размСстим здСсь Π½Π°ΡˆΡƒ строку

        int m_length; // Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки

        public:

        int getLength () {return m_length; } // функция доступа для получСния значСния m_length

        };

        getLength () — это функция доступа, которая просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ m_length.

        Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ²: Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры. Π“Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ (Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ доступа ) — это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ частной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½Π°. Π‘Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ (Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ) — это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ частной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½Π°.

        Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ класса, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры для всСх Π΅Π³ΠΎ Ρ‡Π»Π΅Π½ΠΎΠ²:

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        13

        140002

        14

        класс Π”Π°Ρ‚Π°

        {

        частный:

        int m_month;

        int m_day;

        int m_year;

        общСдоступный:

        int getMonth () {return m_month; } // ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ для мСсяца

        void setMonth (int month) {m_month = month; } // установщик мСсяца

        int getDay () {return m_day; } // Π³Π΅Ρ‚Ρ‚Π΅Ρ€ для дня

        void setDay (int day) {m_day = day; } // установщик дня

        int getYear () {return m_year; } // ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ для Π³ΠΎΠ΄Π°

        void setYear (int year) {m_year = year; } // установщик для Π³ΠΎΠ΄Π°

        };

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

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

        Π“Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹

        Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния».ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ рСкомСндуСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ константной ссылкС (Π° Π½Π΅ ΠΏΠΎ нСконстантной ссылкС). ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ ссылку, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (ΠΈ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ).

        Π“Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ константной ссылкС.

        Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа

        БущСствуСт Π½Π΅ΠΌΠ°Π»ΠΎ дискуссий ΠΎ Ρ‚ΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΈΡ… случаях слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа ΠΈΠ»ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΈΡ….Π₯отя ΠΎΠ½ΠΈ ΠΈ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ доступа Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ классов ООП (Ρ‚Π΅ΠΌΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всю ΠΊΠ½ΠΈΠ³Ρƒ).

        А ΠΏΠΎΠΊΠ° ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. ΠŸΡ€ΠΈ создании классов ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

        • Если Π½ΠΈΠΊΠΎΠΌΡƒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ вашСго класса Π½Π΅ трСбуСтся доступ ΠΊ Ρ‡Π»Π΅Π½Ρƒ, Π½Π΅ прСдоставляйтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа для этого Ρ‡Π»Π΅Π½Π°.
        • Если ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ вашСго класса Π½ΡƒΠΆΠ΅Π½ доступ ΠΊ Ρ‡Π»Π΅Π½Ρƒ, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ вмСсто этого Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ дСйствиС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Π³. вмСсто setAlive (bool) setter Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ kill ()).
        • Если Π½Π΅Ρ‚, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π΅Ρ‚Ρ‚Π΅Ρ€.

        Π‘Π²ΠΎΠ΄ΠΊΠ°

        Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, инкапсуляция Π΄Π°Π΅Ρ‚ мноТСство прСимущСств ΠΏΡ€ΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилиях. ОсновноС прСимущСство Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ инкапсуляция позволяСт Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс, Π½Π΅ зная, ΠΊΠ°ΠΊ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ использованиС классов, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹.

        .

        Абстракция ΠΏΡ€ΠΎΡ‚ΠΈΠ² инкапсуляции Π² OOPS с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

        Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ часто обсуТдаСмая ΠΈ обсуТдаСмая Ρ‚Π΅ΠΌΠ° «Абстракция ΠΏΡ€ΠΎΡ‚ΠΈΠ² инкапсуляции» Π² контСкстС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² OOPS (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования).

        Π‘Π»ΡƒΡˆΠ°ΠΉΡ‚Π΅ Π½Π° ходу… АудиовСрсия сообщСния Π² Π±Π»ΠΎΠ³Π΅

        Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ абстракция
        Абстракция относится ΠΊ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ сокрытия слоТностСй систСмы ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ этой систСмы.

        ΠŸΡ€ΠΈΠΌΠ΅Ρ€ абстракции. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ мобильноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для получСния послСднСй ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π°ΠΊΡ†ΠΈΠΉ.Для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ это Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ ввСсти Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ Π°ΠΊΡ†ΠΈΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΒ». Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ / Wi-Fi, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ² RESTful API Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ сСрвСрС. Π­Ρ‚ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ сСрвСр обратится ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ сдСлаСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ² Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ поставщику услуг ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ Π°ΠΊΡ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π°ΠΊΡ†ΠΈΠΉ. ЀактичСская ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π°ΠΊΡ†ΠΈΠΉ Π·Π°Ρ‚Π΅ΠΌ пСрСмСщаСтся Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΈ отобраТаСтся Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

        Для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ прилоТСния всСго 2 простых шага: ввСсти ΠΊΠΎΠ΄ Π°ΠΊΡ†ΠΈΠΉ ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ вся Ρ€Π°Π±ΠΎΡ‚Π°, ΠΊΠ°ΠΊ объяснСно Π²Ρ‹ΡˆΠ΅, абстрагируСтся ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

        Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ инкапсуляция
        Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ — это языковая конструкция, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ доступ ΠΊ этим Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ повСдСнию вмСстС.

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

        Π“Π΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π°
        ИдСя, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² путаСтся ΠΌΠ΅ΠΆΠ΄Ρƒ абстракциСй ΠΈ инкапсуляциСй, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΈΡ… со скрытиСм Π΄Π°Π½Π½Ρ‹Ρ….

        Абстракция Ρ‚Π°ΠΊΠΆΠ΅ скрываСт, Π½ΠΎ, ΠΊΠ°ΠΊ объяснялось Π²Ρ‹ΡˆΠ΅, абстракция скрываСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ . Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, инкапсуляция сохраняСт Π΄Π°Π½Π½Ρ‹Π΅ / ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° инкапсулируСт, вмСстС ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΊ Π½ΠΈΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, инкапсуляция скрываСт конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° инкапсулируСт .

        Подводя ΠΈΡ‚ΠΎΠ³: абстракция скрываСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ систСмы, прСдставляя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ интСрфСйс. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ инкапсуляция — это объСдинСниС связанных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ повСдСния вмСстС ΠΏΡ€ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ / ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ доступа ΠΊ Π½ΠΈΠΌ ΠΈ частичном ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ сокрытии этих Ρ‡Π»Π΅Π½ΠΎΠ² Π² процСссС.

        АвторскиС ΠΏΡ€Π°Π²Π° Β© 2014-2020 JavaBrahman.com, всС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹. .

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

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