--- aliases: - ISP tags: - maturity/π± date: 2024-09-27 --- ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² (Interface Segregation Principle, ISP) Π³Π»Π°ΡΠΈΡ: ==Π»ΡΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ,== ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½Π΅ ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. ΠΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΊΠΎΠ΄Π°. **ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ISP ΡΠ»Π΅Π΄ΡΠ΅Ρ:** - Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ·ΠΊΠΎΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ Π·Π°Π΄Π°ΡΠ°ΠΌ. - ΠΠ·Π±Π΅Π³Π°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ. - ΠΠ΅Π»ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π³ΡΡΠΏΠΏΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². **ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ISP** 1. **Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ:** Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π²ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ. 2. **ΠΠΎΠ²ΡΡΠ΅Π½Π½Π°Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ:** ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π±Π΅Π· Π²Π»ΠΈΡΠ½ΠΈΡ Π½Π° ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ Π½ΡΠΆΠ½Ρ. 3. **Π£ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:** Π’Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ·ΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΡΠΎΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π». 4. **Π£Π»ΡΡΡΠ΅Π½Π½Π°Ρ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ:** ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. ## ΠΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ ISP Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ `Worker`, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡ, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΈΠ΅ΠΌ ΠΏΠΈΡΠΈ: ```java public interface Worker { void work(); void eat(); } public class RobotWorker implements Worker { @Override public void work() { // Π ΠΎΠ±ΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ } @Override public void eat() { // Π ΠΎΠ±ΠΎΡ Π½Π΅ Π΅ΡΡ β Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ISP throw new UnsupportedOperationException("Robots do not eat"); } } ``` ΠΠ»Π°ΡΡ `RobotWorker` Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ `eat`, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΠΌΡ Π½Π΅ Π½ΡΠΆΠ΅Π½. ΠΡΠΎ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ISP, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠ΅ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ. Π Π°Π·Π΄Π΅Π»ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Π΄Π²Π° Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ : ```java public interface Worker { void work(); } public interface Eater { void eat(); } ``` Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΠΌΡ Π½ΡΠΆΠ½Ρ: ```java public class HumanWorker implements Worker, Eater { @Override public void work() { // Π§Π΅Π»ΠΎΠ²Π΅ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ } @Override public void eat() { // Π§Π΅Π»ΠΎΠ²Π΅ΠΊ Π΅ΡΡ } } public class RobotWorker implements Worker { @Override public void work() { // Π ΠΎΠ±ΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ } } ``` *** ## ΠΠ΅ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ **ΠΠ±Π»Π°ΡΡΡ**:: [[../../meta/zero/00 ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΠ|00 ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΠ]] **Π ΠΎΠ΄ΠΈΡΠ΅Π»Ρ**:: [[SOLID]] **ΠΡΡΠΎΡΠ½ΠΈΠΊ**:: **Π‘ΠΎΠ·Π΄Π°Π½Π°**:: [[2024-09-27]] **ΠΠ²ΡΠΎΡ**:: ### ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ - ### ΠΠΎΡΠ΅ΡΠ½ΠΈΠ΅ Π·Π°ΠΌΠ΅ΡΠΊΠΈ <!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Π ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, this.file.link) or contains(parents, this.file.link) -->