ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ содСрТимому
ΠœΠ°ΠΊΡΠΈΠΌΠ΅Ρ‚Π΅Ρ€

πŸ› οΈ SOLID: ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹?

πŸ› οΈ SOLID: ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹? БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ SOLID – пяти ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ понятным, Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. Если Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ трСснСт ΠΏΠΎ швам Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρƒ мСсяцСв, эти ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ β€” Ρ‚Π²ΠΎΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ Π΄Ρ€ΡƒΠ·ΡŒΡ. 1. Single Responsibility Principle (SRP) Одна ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ – ΠΎΠ΄ΠΈΠ½ класс. Если Ρƒ класса большС ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ SRP. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ слоТно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ случайно ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ. βœ… ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ: class ReportGenerator { void generateReport() { /* Π›ΠΎΠ³ΠΈΠΊΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° */ } } class ReportSaver { void saveReport() { /* Π›ΠΎΠ³ΠΈΠΊΠ° сохранСния ΠΎΡ‚Ρ‡Π΅Ρ‚Π° */ } } ❌ ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ (всё Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС): class ReportService { void generateAndSaveReport() { /* ГСнСрация + сохранСниС ΠΎΡ‚Ρ‡Π΅Ρ‚Π° */ } } 2. Open/Closed Principle (OCP) Код ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Когда Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, Π° Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ. βœ… ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с интСрфСйсом: interface Payment { void process(); } class CreditCardPayment implements Payment { public void process() { /* Π›ΠΎΠ³ΠΈΠΊΠ° ΠΎΠΏΠ»Π°Ρ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ */ } } class PayPalPayment implements Payment { public void process() { /* Π›ΠΎΠ³ΠΈΠΊΠ° ΠΎΠΏΠ»Π°Ρ‚Ρ‹ PayPal */ } } Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ способ ΠΎΠΏΠ»Π°Ρ‚Ρ‹, просто создав Π½ΠΎΠ²Ρ‹ΠΉ класс. 3. Liskov Substitution Principle (LSP) Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ классы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅. Если Π³Π΄Π΅-Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. ❌ ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ LSP: class Bird { void fly() { /* Π›Π΅Ρ‚Π°Π΅Ρ‚ */ } } class Penguin extends Bird { void fly() { throw new UnsupportedOperationException("ΠŸΠΈΠ½Π³Π²ΠΈΠ½Ρ‹ Π½Π΅ Π»Π΅Ρ‚Π°ΡŽΡ‚!"); } } ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Penguin Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ родитСля. βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ интСрфСйсы: interface Bird { } interface FlyingBird extends Bird { void fly(); } class Sparrow implements FlyingBird { public void fly() { /* Π›Π΅Ρ‚Π°Π΅Ρ‚ */ } } class Penguin implements Bird { // Пингвин Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° fly() } 4. Interface Segregation Principle (ISP) Π›ΡƒΡ‡ΡˆΠ΅ нСсколько ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… интСрфСйсов, Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ большой. ❌ ΠŸΠ»ΠΎΡ…ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: interface Worker { void work(); void eat(); } class Robot implements Worker { public void work() { /* Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ */ } public void eat() { throw new UnsupportedOperationException("Π ΠΎΠ±ΠΎΡ‚Ρ‹ Π½Π΅ Сдят!"); } } βœ… РаздСляСм интСрфСйсы: interface Workable { void work(); } interface Eatable { void eat(); } class Robot implements Workable { public void work() { /* Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ */ } } 5. Dependency Inversion Principle (DIP) ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня. Оба Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций. ❌ Жёсткая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ: class Lamp { void turnOn() { /* Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ */ } } class Switch { private Lamp lamp; Switch(Lamp lamp) { this.lamp = lamp; } void press() { lamp.turnOn(); } } βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ абстракции: interface Switchable { void turnOn(); } class Lamp implements Switchable { public void turnOn() { /* Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ */ } } class Switch { private Switchable device; Switch(Switchable device) { this.device = device; } void press() { device.turnOn(); } } πŸ“Œ Π˜Ρ‚ΠΎΠ³ ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ SOLID ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΈΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄. Если ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ этим ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ, ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ. πŸ‘‰ @BookJava

982 просмотров

Канал Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠœΠ°ΠΊΡΠΈΠΌΠ΅Ρ‚Π΅Ρ€Π°

1Β 605 подписчиков Β· Наука

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°

Π•Ρ‰Ρ‘ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ «Наука»

Π§ΠΈΡ‚Π°Ρ‚ΡŒ дальшС

Π”Π²Π° Ρ€Π°Π·Π° Π² нСдСлю свСТиС посты этого ΠΊΠ°Π½Π°Π»Π° β€” Π½Π° ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈ Π² Π»ΠΈΡ‡Π½ΡƒΡŽ Π»Π΅Π½Ρ‚Ρƒ. Π‘Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ поиска ΠΊΠ°Π½Π°Π»Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.