πŸ“Œ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ?



πŸ’¬ Π‘ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ Π² 25 % собСсСдований



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



πŸ€” ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°:



1️⃣ ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² (Π°Π΄-Ρ…ΠΎΠΊ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ):



βž• Π­Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ функция ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π’ ООП это достигаСтся Ρ‡Π΅Ρ€Π΅Π· наслСдованиС ΠΈ интСрфСйсы. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – это использованиС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ интСрфСйса, ΠΊΠΎΠ³Π΄Π° конкрСтная рСализация опрСдСляСтся Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… классах. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΌΠ΅Ρ‚ΠΎΠ΄ draw() ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² интСрфСйсС Shape, Π° конкрСтная рСализация этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – Π² классах Circle, Square, Triangle.



2️⃣ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ (ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ):



βž• Π­Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это рСализуСтся Ρ‡Π΅Ρ€Π΅Π· использованиС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (generics). НапримСр, Π² языкС Java ΠΈΠ»ΠΈ C# ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис шаблонов (generics).



3️⃣ ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (динамичСский ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ):



βž• Π­Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выбираСтся Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это достигаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ·Π΄Π½Π΅Π³ΠΎ связывания (late binding). ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° move() Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΌ, Ρ‚Π°ΠΊ ΠΈ самолСтом. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция обСспСчиваСт Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.



πŸ€” Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ:



1️⃣ Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ гибкости:



βž• ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΈ абстрактный ΠΊΠΎΠ΄. ВмСсто Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, программист ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ абстрактными интСрфСйсами ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ классами, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ систСмы ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ΄Π°.



2️⃣ ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ уровня абстракции:



βž• ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ позволяСт программистам Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Π±ΠΎΠ»Π΅Π΅ высокоуровнСвых концСпциях, Π½Π΅ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡΡΡŒ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… классов. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ понятным ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ для восприятия.



3️⃣ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° "открытости/закрытости" (Open/Closed Principle):



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



4️⃣ Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ дублирования ΠΊΠΎΠ΄Π°:



βž• Благодаря ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ дублирования ΠΊΠΎΠ΄Π°, создавая Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΡ… Π² Ρ€Π°Π·Π½Ρ‹Ρ… частях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.



πŸ€” ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚:



ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ – это ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ООП, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· Π΅Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс, обСспСчивая Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.



πŸ”₯ ВОП Π’ΠžΠŸΠ ΠžΠ‘ΠžΠ’ Π‘ Π‘ΠžΠ‘Π•Π‘ΠžΠ’



πŸ”’ Π‘Π°Π·Π° собСсов | πŸ”’ Π‘Π°Π·Π° тСстовыΡ