Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ solid ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹: SOLID β€” ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ SOLID Π² ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°Ρ… / Π₯Π°Π±Ρ€

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

Π’ Π‘Π΅Ρ‚ΠΈ мноТСство ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… статСй, Π³Π΄Π΅ рассказываСтся ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… SOLID, Π½ΠΎ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… срСди Π½ΠΈΡ… ΠΌΠ½Π΅ практичСски Π½Π΅ попадалось. Из-Π·Π° этого Ρ‚Π°ΠΊΠΈΠΌ людям со ΡΠΊΠ»ΠΎΠ½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π²ΠΎΡΠΏΡ€ΠΈΡΡ‚ΠΈΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ – Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ я – Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно ΡΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΡƒΡ‚ΡŒ ΠΈ Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ.

Основная Ρ†Π΅Π»ΡŒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ – Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ SOLID Ρ‡Π΅Ρ€Π΅Π· отрисовку ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² каТутся ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ, Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΡΠ»Π΅Π΄ΡƒΠ΅ΡˆΡŒ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈ этом Π½Π°Ρ€ΡƒΡˆΠ°Π΅ΡˆΡŒ, хотя с Π²ΠΈΠ΄Ρƒ особой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π½Π΅Ρ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‰Π΅ Ρ‡ΠΈΡ‚Π°Π»ΠΎΡΡŒ, я ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽ здСсь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классы, ΠΎΠ΄Π½Π°ΠΊΠΎ всё сказанноС Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊ функциям, ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ модулям, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ это Π² Π²ΠΈΠ΄Ρƒ.

Ну, приступим.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ SOLID

S – Single Responsibility (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнной отвСтствСнности)

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ.

Если класс ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сразу, Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния Π±Π°Π³ΠΎΠ² возрастаСт – внося измСнСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Ρ‹, сами Ρ‚ΠΎΠ³ΠΎ Π½Π΅ подозрСвая, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

НазначСниС

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ слуТит для раздСлСния Ρ‚ΠΈΠΏΠΎΠ² повСдСния, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ошибки, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ модификациями Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ, Π½Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΠ»ΠΈΡΡŒ Π½Π° ΠΏΡ€ΠΎΡ‡ΠΈΠ΅, Π½Π΅ связанныС с Π½ΠΈΠΌ Ρ‚ΠΈΠΏΡ‹.

O β€” Open-Closed (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ открытости-закрытости)

ΠšΠ»Π°ΡΡΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹β€― Π±Ρ‹Ρ‚ΡŒ β€―ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹β€―Π΄Π»Ρβ€―Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, но закрыты для модификации.

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

НазначСниС

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ слуТит для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ класса Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ, Π½Π΅ вмСшиваясь Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ выполняСт. Благодаря этому Π²Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚Π΅ ошибок Π² Ρ‚Π΅Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ задСйствован этот класс.

L β€” Liskov Substitution (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Π‘Π°Ρ€Π±Π°Ρ€Ρ‹ Лисков)

Если П являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ Π’, Ρ‚ΠΎ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Π’, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° П Π±Π΅Π· Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… послСдствий для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.


Π’ случаях, ΠΊΠΎΠ³Π΄Π° класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Π½Π΅ способСн Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ дСйствия, Ρ‡Ρ‚ΠΎ ΠΈ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ риск появлСния ошибок.

Если Ρƒ вас имССтся класс ΠΈ Π²Ρ‹ создаСтС Π½Π° Π΅Π³ΠΎ Π±Π°Π·Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс, исходный класс становится Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ, Π° Π½ΠΎΠ²Ρ‹ΠΉ – Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ. Класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ. Π­Ρ‚ΠΎ называСтся Π½Π°ΡΠ»Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ.

НСобходимо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Π±Ρ‹Π» способСн ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ запросы, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, ΠΈ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Или ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ‚ΠΈΠΏΡƒ. На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ‚Π°ΠΊ: класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ΄Π°Ρ‘Ρ‚ ΠΊΠΎΡ„Π΅ (Π² Π»ΡŽΠ±Ρ‹Ρ… Π²ΠΈΠ΄Π°Ρ…), Π·Π½Π°Ρ‡ΠΈΡ‚, для класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΏΡƒΡ‡ΠΈΠ½ΠΎ (Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ„Π΅), Π½ΠΎ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΎΠ΄Ρƒ.

Если класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Π½Π΅ удовлСтворяСт этим трСбованиям, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ слишком сильно отличаСтся ΠΎΡ‚ родитСля ΠΈ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ.

НазначСниС

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ слуТит для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ постоянство: класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±Π΅Π· Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

I β€” Interface Segregation (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйсов)

НС слСдуСт ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

Когда классу приходится ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ дСйствия, Π½Π΅ нСсущиС Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·Ρ‹, это выливаСтся Π² ΠΏΡƒΡΡ‚ΡƒΡŽ Ρ‚Ρ€Π°Ρ‚Ρƒ рСсурса, Π° Π² случаС, Ссли класс Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти дСйствия Π½Π΅ способСн, Π²Π΅Π΄Ρ‘Ρ‚ ΠΊ возникновСнию Π±Π°Π³ΠΎΠ².

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

НазначСниС

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ слуТит для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ дСйствий Π½Π° ряд Π½Π°Π±ΠΎΡ€ΠΎΠ² помСньшС – Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ трСбуСтся, ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ большС.

D β€” Dependency Inversion (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй)

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня. И Ρ‚Π΅, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций. Абстракции Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Π”Π΅Ρ‚Π°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций.


Для Π½Π°Ρ‡Π°Π»Π° объясню Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ здСсь ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, простыми словами.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ (ΠΈΠ»ΠΈ классы) вСрхнСго уровня = классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструмСнта

ΠœΠΎΠ΄ΡƒΠ»ΠΈ (ΠΈΠ»ΠΈ классы) ниТнСго уровня = инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

Абстракции – ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ интСрфСйс, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΉ Π΄Π²Π° класса

Π”Π΅Ρ‚Π°Π»ΠΈ = спСцифичСскиС характСристики Ρ€Π°Π±ΠΎΡ‚Ρ‹ инструмСнта

Богласно Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ, класс Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ с инструмСнтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСт для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ВмСсто этого ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ соСдинён с интСрфСйсом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ инструмСнтом ΠΈ классом.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ гласит, Ρ‡Ρ‚ΠΎ Π½ΠΈ интСрфСйс, Π½ΠΈ класс, Π½Π΅ обязаны Π²Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² спСцифику Ρ€Π°Π±ΠΎΡ‚Ρ‹ инструмСнта. Напротив, это инструмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ трСбования интСрфСйса.

НазначСниС

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ слуТит для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ классов Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΎΡ‚ классов Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня Π·Π° счёт ввСдСния интСрфСйсов.

ΠžΠ±ΠΎΠ±Ρ‰Π°Ρ сказанноС


ΠœΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ всС ΠΏΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΈ сформулировали для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Всё это ΠΏΡ€ΠΈΠ·Π²Π°Π½ΠΎ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠΎΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Бпасибо, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ; надСюсь, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π΅ мСньшС ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΡ, Ρ‡Π΅ΠΌ я Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΡΡ‚Π°Ρ‚ΡŒΡ‘ΠΉ.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ SOLID, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ | by Nikita | WebbDEV

Π•Ρ‰Π΅ большС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для программистов Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм сайтС.

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

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ Π°ΠΊΡ€ΠΎΠ½ΠΈΠΌ SOLID:

  • S: Single Responsibility Principle (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнной отвСтствСнности).
  • O: Open-Closed Principle (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ открытости-закрытости).
  • L: Liskov Substitution Principle (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Π‘Π°Ρ€Π±Π°Ρ€Ρ‹ Лисков).
  • I: Interface Segregation Principle (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйса).
  • D: Dependency Inversion Principle (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй).

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

«Одно ΠΏΠΎΡ€ΡƒΡ‡Π΅Π½ΠΈΠ΅. ВсСго ΠΎΠ΄Π½ΠΎ.Β» β€” Π›ΠΎΠΊΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π‘ΠΊΡƒΡ€Π΄ΠΆΡƒ Π² Ρ„ΠΈΠ»ΡŒΠΌΠ΅ Β«Π’ΠΎΡ€: Π Π°Π³Π½Π°Ρ€Ρ‘ΠΊΒ».
ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ лишь ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ.

Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ отвСтствСнСн лишь Π·Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ. Если класс ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡, Π΅Π³ΠΎ подсистСмы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этих Π·Π°Π΄Π°Ρ‡, ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ связанными Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ИзмСнСния Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠΉ подсистСмС Π²Π΅Π΄ΡƒΡ‚ ΠΊ измСнСниям Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ классам, Π½ΠΎ ΠΈ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смыслС.

НапримСр, рассмотрим этот ΠΊΠΎΠ΄:

Класс Animal, прСдставлСнный здСсь, описываСт ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅. Π­Ρ‚ΠΎΡ‚ класс Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнной отвСтствСнности. Как ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ?

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

Как такая структура класса ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ?

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

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² соотвСтствиС с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ СдинствСнной отвСтствСнности, создадим Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ класс, СдинствСнной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся Ρ€Π°Π±ΠΎΡ‚Π° с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ, Π² частности β€” сохранСниС Π² Π½Ρ‘ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Animal:

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

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° СдинствСнной отвСтствСнности ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ высокой стСпСни связности элСмСнтов Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΅Π³ΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ сущности (классы, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ классом Animal.

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ список ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставлСно ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Animal, ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π²ΡƒΠΊΠΈ ΠΎΠ½ΠΈ ΠΈΠ·Π΄Π°ΡŽΡ‚. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ эту Π·Π°Π΄Π°Ρ‡Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ AnimalSounds:

Бамая главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ функция опрСдСляСт Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Π·Π²ΡƒΠΊ ΠΈΠ·Π΄Π°Ρ‘Ρ‚ Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅, анализируя ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Ѐункция AnimalSound Π½Π΅ соотвСтствуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ открытости-закрытости, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ появлСнии Π½ΠΎΠ²Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…, Π½Π°ΠΌ, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ с Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊΠΈ, ΠΈΠ·Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠΈ, придётся Π΅Ρ‘ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² массив Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт:

ПослС этого Π½Π°ΠΌ придётся ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ AnimalSound:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π² массив Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ придётся Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ это ΠΎΡ‡Π΅Π½ΡŒ простой, Π½ΠΎ Ссли подобная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ придётся постоянно Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ, добавляя Π² Π½Π΅Ρ‘ Π½ΠΎΠ²Ρ‹Π΅ выраТСния if.

Как привСсти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ AnimalSound Π² соотвСтствиС с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ открытости-закрытости? НапримСр β€” Ρ‚Π°ΠΊ:

МоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ класса Animal Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ makeSound. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ классы, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для описания ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…, Ρ€Π°ΡΡˆΠΈΡ€ΡΠ»ΠΈ Π±Ρ‹ класс Animal ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈ Π±Ρ‹ этот ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ собствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ makeSound, Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ массива с ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹ΠΌΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ AnimalSound достаточно Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива.

Если Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΎΠ²ΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ AnimalSound ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ придётся. ΠœΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ Π΅Ρ‘ Π² соотвСтствиС с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ открытости-закрытости.

Рассмотрим Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΌΠ°Π³Π°Π·ΠΈΠ½. ΠœΡ‹ Π΄Π°Ρ‘ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ скидку Π² 20%, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π°ΠΊΠΎΠΉ класс:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹. Π›ΡŽΠ±ΠΈΠΌΡ‹ΠΌ (fav) ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ даётся скидка Π² 20%, Π° VIP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ (vip) β€” удвоСнная скидка, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ β€” 40%. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π»ΠΎΠ³ΠΈΠΊΡƒ, Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ открытости-закрытости. Как Π²ΠΈΠ΄Π½ΠΎ, здСсь, Ссли Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΠ΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΡΠΎΠ±ΡƒΡŽ скидку, приходится Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² класс Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ Π² соотвСтствии с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ открытости-закрытости, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ класс, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ класс Discount. Π’ этом Π½ΠΎΠ²ΠΎΠΌ классС ΠΌΡ‹ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ:

Если Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π°Ρ‚ΡŒ скидку Π² 80% «супСр-VIPΒ» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‚ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ возмоТностСй классов, Π° Π½Π΅ ΠΈΡ… модификация.

НСобходимо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ подклассы ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ для своих супСрклассов.

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

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°, Π²Π΅Ρ€Π½ΡƒΠ²ΡˆΠΈΡΡŒ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ с классом Animal. НапишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ количСствах конСчностСй ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ.

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

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

Π’ΠΎΠΎΡ€ΡƒΠΆΠΈΠ²ΡˆΠΈΡΡŒ этими сообраТСниями ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ AnimalLegCount:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ эта функция Π½Π΅ интСрСсуСтся Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Она просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ LegCount. Всё, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π·Π½Π°Π΅Ρ‚ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ классу Animal ΠΈΠ»ΠΈ Π΅Π³ΠΎ подклассам.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² классС Animal Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ LegCount:

А Π΅Π³ΠΎ подклассам Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ LegCount для экзСмпляра класса Lion производится Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² этом классС, ΠΈ возвращаСтся ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ AnimalLegCount Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ подкласса класса AnimalΠΎΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ свСдСния ΠΎ количСствС конСчностСй Ρƒ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ, прСдставлСнного этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Ѐункция просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ LegCount класса Animal, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ подклассы этого класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто Π½Π΅Π³ΠΎ, Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ узкоспСциализированныС интСрфСйсы, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° устранСниС нСдостатков, связанных с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… интСрфСйсов.

Рассмотрим интСрфСйс Shape:

Он описываСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для рисования ΠΊΡ€ΡƒΠ³ΠΎΠ² (drawCircle), ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² (drawSquare) ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² (drawRectangle). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ этот интСрфСйс ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ гСомСтричСскиС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΠΊΡ€ΡƒΠ³ (Circle), ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ (Square) ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Rectangle), Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ всСх этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Выглядит это Ρ‚Π°ΠΊ:

Π‘Ρ‚Ρ€Π°Π½Π½Ρ‹ΠΉ Ρƒ нас получился ΠΊΠΎΠ΄. НапримСр, класс Rectangle, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (drawCircle ΠΈ drawSquare), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΠΌΡƒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π’ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠ΄Π° Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… классов.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² интСрфСйс Shape Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄, drawTriangle, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для рисования Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²:

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ классам, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ гСомСтричСскиС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, придётся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ drawTriangle. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка.

Как Π²ΠΈΠ΄Π½ΠΎ, ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΡ€ΡƒΠ³Π°, Π½ΠΎ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄Π΅ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Π»Π°ΡΡŒ Π±Ρ‹ ошибка, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйса прСдостСрСгаСт нас ΠΎΡ‚ создания интСрфСйсов, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Shape ΠΈΠ· нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ (Ρƒ нас это классы Circle, Square ΠΈ Rectangle) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ лишь ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ (Π² этом ΠΎΠ½ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ СдинствСнной отвСтствСнности), поэтому всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этой Π·Π°Π΄Π°Ρ‡ΠΈ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ вынСсСно Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ интСрфСйс ΠΈΠ»ΠΈ интСрфСйсы.

Π’ нашСм ΠΆΠ΅ случаС интСрфСйс Shape Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы. БлСдуя этой ΠΈΠ΄Π΅Π΅, ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΠΊΠΎΠ΄, создав ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… узкоспСциализированных Π·Π°Π΄Π°Ρ‡:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ интСрфСйс ICircle ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ лишь для рисования ΠΊΡ€ΡƒΠ³ΠΎΠ², Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ спСциализированныС интСрфСйсы β€” для рисования Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΈΠ³ΡƒΡ€. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Shape ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² качСствС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ интСрфСйса.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ зависимости Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ абстракция, Π° Π½Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅.

  1. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½ΠΈΠΆΠ½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. Оба Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций.
  2. Абстракции Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Π”Π΅Ρ‚Π°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций.

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

Π—Π΄Π΅ΡΡŒ класс Http прСдставляСт собой высокоуровнСвый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π° XMLHttpService β€” Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ. Вакая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡƒΠ½ΠΊΡ‚ A ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй: Β«ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½ΠΈΠΆΠ½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. Оба Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций».

Класс Http Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎ зависит ΠΎΡ‚ класса XMLHttpService. Если ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ классом Http для взаимодСйствия с ΡΠ΅Ρ‚ΡŒΡŽ β€” скаТСм, это Π±ΡƒΠ΄Π΅Ρ‚ Node.js-сСрвис ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСрвис-Π·Π°Π³Π»ΡƒΡˆΠΊΠ°, примСняСмый для Ρ†Π΅Π»Π΅ΠΉ тСстирования, Π½Π°ΠΌ придётся ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС экзСмпляры класса Http, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ открытости-закрытости.

Класс Http Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ сСтСвого соСдинСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ создадим интСрфСйс Connection:

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Connection содСрТит описаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° request ΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ классу Http Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° Connection:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ взаимодСйствия с ΡΠ΅Ρ‚ΡŒΡŽ, класс Http ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ, Π½Π΅ Π·Π°Π±ΠΎΡ‚ΡΡΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ скрываСтся Π·Π° интСрфСйсом Connection.

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ класс XMLHttpService Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π» этот интСрфСйс:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ мноТСство классов, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… интСрфСйс Connection ΠΈ подходящих для использования Π² классС Http для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ сСти:

Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, здСсь высокоуровнСвыС ΠΈ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ зависят ΠΎΡ‚ абстракций. Класс Http (высокоуровнСвый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ) зависит ΠΎΡ‚ интСрфСйса Connection (абстракция). ΠšΠ»Π°ΡΡΡ‹ XMLHttpService, NodeHttpService ΠΈ MockHttpService (Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ) Ρ‚Π°ΠΊΠΆΠ΅ зависят ΠΎΡ‚ интСрфСйса Connection.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ слСдуя ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ инвСрсии зависимостСй, ΠΌΡ‹ соблюдаСм ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Π‘Π°Ρ€Π±Π°Ρ€Ρ‹ Лисков. А ΠΈΠΌΠ΅Π½Π½ΠΎ, оказываСтся, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ XMLHttpService, NodeHttpService ΠΈ MockHttpService ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Connection.

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

Π•Ρ‰Π΅ большС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для программистов Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм сайтС.

Π’Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² проСктирования SOLID β€” BMC Software

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ SOLID Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΌ Π‘. ΠœΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΌ Π² эссС 2000 Π³ΠΎΠ΄Π° Β«ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ проСктирования ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования», хотя Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° Π±Ρ‹Π»Π° ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π° ΠΏΠΎΠ·ΠΆΠ΅ Майклом ЀСзСрсом. Π’ своСм эссС ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΠΏΡ€ΠΈΠ·Π½Π°Π», Ρ‡Ρ‚ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ. По ΠΌΠ΅Ρ€Π΅ Π΅Π³ΠΎ измСнСния ΠΎΠ½ становится всС Π±ΠΎΠ»Π΅Π΅ слоТным. ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±Π΅Π· Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² проСктирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС становится ТСстким, Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌ, Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹ΠΌ ΠΈ вязким. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ SOLID Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ для Π±ΠΎΡ€ΡŒΠ±Ρ‹ с этими ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌΠΈ шаблонами проСктирования.

Широкая Ρ†Π΅Π»ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² SOLID β€” ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство зависимостСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π½Π΅ затрагивая Π΄Ρ€ΡƒΠ³ΠΈΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для облСгчСния понимания, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, использованиС этих ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² проСктирования позволяСт ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ-программистам ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠ΅, эффСктивноС ΠΈ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС.

Π₯отя ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π΄Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств, слСдованиС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ написанию Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΈ слоТного ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π»ΠΈΡ‚ΡŒ процСсс проСктирования ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. Однако это Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΈ усилия Ρ‚ΠΎΠ³ΠΎ стоят, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ обслуТиваниС, тСстированиС ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности β€” ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для создания ΠΊΠΎΠ΄Π°. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ классам, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈ микросСрвисам.

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

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ открытости-закрытости

ИдСя ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° открытости-закрытости состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅, Ρ…ΠΎΡ€ΠΎΡˆΠΎ протСстированныС классы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ классов ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΠΈΠ»ΠΈ ошибкам. ВмСсто измСнСния класса Π²Ρ‹ просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ. ИмСя Π² Π²ΠΈΠ΄Ρƒ эту Ρ†Π΅Π»ΡŒ, ΠœΠ°Ρ€Ρ‚ΠΈΠ½ Ρ€Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΠ΅Ρ‚ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ: Β«Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ класса, Π½Π΅ измСняя Π΅Π³ΠΎΒ».

Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ этому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для написания ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’Π°Ρˆ класс соотвСтствуСт этому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ, Ссли ΠΎΠ½:

  1. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ повСдСния класса; ΠΈ
  2. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ исходный ΠΊΠΎΠ΄ установлСн ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ замСщСния Лисков

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

Π—Π΄Π΅ΡΡŒ трСбуСтся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ свойства подстановки: Ссли для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° O1 Ρ‚ΠΈΠΏΠ° S сущСствуСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ O2 Ρ‚ΠΈΠΏΠ° T Ρ‚Π°ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ для всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ P, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… T, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ P Π½Π΅ мСняСтся, ΠΊΠΎΠ³Π΄Π° O1 замСняСтся Π½Π° O2, Ρ‚ΠΎΠ³Π΄Π° S являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ T.

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

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйсов

ΠžΠ±Ρ‰Π°Ρ идСя ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° раздСлСния интСрфСйсов Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… интСрфСйсов, Ρ‡Π΅ΠΌ нСсколько Π±ΠΎΠ»ΡŒΡˆΠΈΡ…. ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, совСтуя: Β«Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ интСрфСйсы, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ слСдуСт Π·Π°ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚Β».

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ способ раздСлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Β«Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций, Π° Π½Π΅ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠΊΠΈΒ». Π”Π°Π»Π΅Π΅ ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, утвСрТдая, Ρ‡Ρ‚ΠΎ Β«ΠΌΠΎΠ΄ΡƒΠ»ΠΈ высокого уровня Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня. Оба Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций». Π”Π°Π»Π΅Π΅, «абстракции Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Π”Π΅Ρ‚Π°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций».

Одним ΠΈΠ· популярных способов соблюдСния этого ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° являСтся использованиС шаблона инвСрсии зависимостСй, хотя этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ являСтся СдинствСнным. Какой Π±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹ Π½ΠΈ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ, поиск способа использования этого ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° сдСлаСт ваш ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ, Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования.

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

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

Π₯отя Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ этих ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΏΠΎΠ½Π°Ρ‡Π°Π»Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΏΠΎΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, рСгулярная Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌΠΈ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ, ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌ Π½Π΅ соотвСтствуСт, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ процСсс проСктирования ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ эффСктивнСС.

Π­Ρ‚ΠΈ сообщСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΠΈΠΌΠΈ собствСнными ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΈΠ»ΠΈ ΠΌΠ½Π΅Π½ΠΈΠ΅ BMC.

Π’ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ»ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅? ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, сообщитС Π½Π°ΠΌ ΠΎΠ± этом ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ [email protected].

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ SOLID Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ: ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ

Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ написании Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. БущСствуСт Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств использования OOD, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ SOLID для Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ SOLID Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Robert C. Martin , Ρ‚Π°ΠΊΠΆΠ΅ извСстный ΠΊΠ°ΠΊ Uncle Bob , являСтся стандартом кодирования Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ являСтся Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ пяти ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ниТС…

  1. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности (SRP)
  2. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ
  3. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ замСщСния Лискова (LSP)
  4. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйса (ISP)
  5. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй (DIP)

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

1. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности: Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ гласит, Ρ‡Ρ‚ΠΎ Β« класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ для измСнСния Β», Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ΄Π½Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ»ΠΈ ΠΎΠ΄Π½Ρƒ Ρ†Π΅Π»ΡŒ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π—Π°Π΄Π°Ρ‡Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… участников, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ: Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹ интСрфСйса Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ, тСстировщик занимаСтся тСстированиСм, Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ бэкСнда занимаСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ бэкэнда, Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΈΠ»ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ.
Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, ΠΊΠΎΠ³Π΄Π° программистам Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ всС Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ классС, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… ΠΊΠΎΠ΄ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ, слоТным ΠΈ ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ врСмя, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ·ΠΆΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ слоСв Π² своСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Ρ€Π°Π·Π±Π΅ΠΉΡ‚Π΅ классы Π‘ΠΎΠ³Π° Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ классы ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

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

3. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ замСщСния Лисков: ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Π‘Π°Ρ€Π±Π°Ρ€ΠΎΠΉ Лисков Π² 1987 Π³ΠΎΠ΄Ρƒ ΠΈ Π² соотвСтствии с этим ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ Β« ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ классы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ замСняСмыми для своих Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов Β». Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ любой класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ классу, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто своСго родитСля Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ повСдСния.
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ это Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ сын Ρ„Π΅Ρ€ΠΌΠ΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π²Ρ‹ΠΊΠΈ зСмлСдСлия ΠΎΡ‚ своСго ΠΎΡ‚Ρ†Π° ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² состоянии Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ своСго ΠΎΡ‚Ρ†Π°, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Если сын Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Ρ„Π΅Ρ€ΠΌΠ΅Ρ€ΠΎΠΌ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ своСго ΠΎΡ‚Ρ†Π°, Π½ΠΎ Ссли ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ Π² ΠΊΡ€ΠΈΠΊΠ΅Ρ‚, Ρ‚ΠΎ сын ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ своСго ΠΎΡ‚Ρ†Π°, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ сСмСйной ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ.
Одним ΠΈΠ· классичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² примСнСния этого ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° являСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ сторонами. Высота ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π° ΡˆΠΈΡ€ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ – это ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ ΠΈ высотой. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ свойства класса ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π΄ΠΎ класса ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°. Для этого Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ (ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ) класс с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ (ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ) классом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ соотвСтствовал ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ сторонами, Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс Π½Π΅ влияСт Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, поэтому, Ссли Π²Ρ‹ сдСлаСтС Ρ‡Ρ‚ΠΎ это Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Лисков. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ссылку ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ замСщСния Лисков для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания.

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

5. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй: ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ обсудим эту Ρ‚Π΅ΠΌΡƒ, ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ инвСрсия зависимостСй ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй β€” это Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй ΠΏΡƒΡ‚Π°ΡŽΡ‚ΡΡ Π² этом ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Π΄Π²ΡƒΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ… этого ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°:

  • ΠœΠΎΠ΄ΡƒΠ»ΠΈ/классы высокого уровня Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ/классов Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня. Оба Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций.
  • Абстракции Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Π”Π΅Ρ‚Π°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций.

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

This entry was posted in ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΠ΅