10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

Π‘Ρ€Π΅Ρ‰Π°ΠΌ доста чСсто Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Ρ‡ΡƒΠ²Π°Π»ΠΈ Π·Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ SOLID (Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ смС Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π·Π° тях Ρ‚ΡƒΠΊ. β€” ΠŸΡ€Π΅Π².) ΠΈΠ»ΠΈ Π·Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ (ООП), ΠΈΠ»ΠΈ са Ρ‡ΡƒΠ²Π°Π»ΠΈ, Π½ΠΎ Π½Π΅ Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π’ Ρ‚Π°Π·ΠΈ статия сС описват прСдимствата Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ Π½Π° ООП, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π² Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Π°Ρ‚Π° ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°. Някои ΠΎΡ‚ тях са Π΄ΠΎΠ±Ρ€Π΅ извСстни, Π΄Ρ€ΡƒΠ³ΠΈ – Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ статията Ρ‰Π΅ бъдС ΠΏΠΎΠ»Π΅Π·Π½Π° Π·Π° Π½ΠΎΠ²ΠΈΡ†ΠΈ ΠΈ Π·Π° ΠΎΠΏΠΈΡ‚Π½ΠΈ програмисти.

НапомнямС: Π·Π° всички Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Β«Π₯Π°Π±Ρ€Π°Β» β€” ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° ΠΎΡ‚ 10 000 Ρ€ΡƒΠ±Π»ΠΈ ΠΏΡ€ΠΈ записванС Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅ курс Skillbox с ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄ Β«Π₯Π°Π±Ρ€Β».

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°: ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅Π½ ΠΎΠ½Π»Π°ΠΉΠ½ курс Β«Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΒ».

DRY (Don’t Repeat Yourself)

Доста прост ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, чиято ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ ясна ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ: «НС сС повтаряй». Π—Π° програмиста Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° нСобходимостта Π΄Π° сС избягва дублиращия ΠΊΠΎΠ΄, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° абстракция Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°.

Ако Π² ΠΊΠΎΠ΄Π° ΠΈΠΌΠ° Π΄Π²Π° повтарящи сС ΡƒΡ‡Π°ΡΡ‚ΡŠΠΊΠ°, Ρ‚Π΅ трябва Π΄Π° сС обСдинят Π² Π΅Π΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄. Ако ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ трябва Π΄Π° сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π° константа.

Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° сС опрости ΠΊΠΎΠ΄ΡŠΡ‚ ΠΈ Π΄Π° сС улСсни ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° ΠΌΡƒ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ основната Π·Π°Π΄Π°Ρ‡Π° Π½Π° ООП. НС трябва Π΄Π° сС злоупотрСбява с обСдинСнията, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΊΠΎΠ΄ няма Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ с OrderId, ΠΈ с SSN.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ постоянно сС Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π² ΠΊΠΎΠ΄Π° трябва Π΄Π° сС правят ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° улСснитС ΠΆΠΈΠ²ΠΎΡ‚Π° си Ρ‡Ρ€Π΅Π· инкапсулация. Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ тСстванС ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π°Ρ‚Π° Π±Π°Π·Π° ΠΊΠΎΠ΄. Π•Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅.

Ако ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° Java, Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π°Π΄Π°Π²Π°ΠΉΡ‚Π΅ private Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° откритостта/затворСността

Π’ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° бъдС Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΠΊΠΈ слСдното Ρ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈΠ΅: Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈΡ‚Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈ (класовС, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚.Π½.) трябва Π΄Π° са ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π½ΠΎ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π·Π° измСнСния». На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° позволят промяна Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ си Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π° изходния ΠΊΠΎΠ΄.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π΅ Π²Π°ΠΆΠ΅Π½, ΠΊΠΎΠ³Π°Ρ‚ΠΎ измСнСнията Π² изходния ΠΊΠΎΠ΄ изискват рСвизия, ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΎ тСстванС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ. ΠšΠΎΠ΄ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ слСдва ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° откритостта/закритостта, Π½Π΅ сС промСня ΠΏΡ€ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, слСдоватСлно с Π½Π΅Π³ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Π•Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π²Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ.

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

Ако Π² Π½Π΅Π³ΠΎ трябва Π½Π΅Ρ‰ΠΎ Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΎΡ‚Π½Π΅ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ трябва Π΄Π° сС промСнят всички ΡƒΡ‡Π°ΡΡ‚ΡŠΡ†ΠΈ ΠΎΡ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ Π²Ρ€ΡŠΠ·ΠΊΠ° с нСобходимия Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚.

ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, откритостта ΠΈ затворСността Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ Π½Π° SOLID.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° СдинствСната отговорност (SRP)

ΠžΡ‰Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΡ‚ Π½Π°Π±ΠΎΡ€Π° SOLID. Π’ΠΎΠΉ гласи, Ρ‡Π΅ "ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° само Π΅Π΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, която Π²ΠΎΠ΄ΠΈ Π΄ΠΎ промяна Π½Π° класа". ΠšΠ»Π°ΡΡŠΡ‚ Ρ€Π΅ΡˆΠ°Π²Π° само Π΅Π΄Π½Π° Π·Π°Π΄Π°Ρ‡Π°. Π’ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° няколко ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π½ΠΎ всСки ΠΎΡ‚ тях сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ‰Π° Π·Π°Π΄Π°Ρ‡Π°. Всички ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ свойства трябва Π΄Π° слуТат само Π½Π° Ρ‚ΠΎΠ²Π°.

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

ЦСнността Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅, Ρ‡Π΅ Ρ‚ΠΎΠΉ отслабва Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ отдСлния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° софтуСра ΠΈ ΠΊΠΎΠ΄Π°. Ако Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΅Π΄Π½Π° функционалност Π² клас, Ρ‚ΠΎΠ²Π° въвСТда Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠ°, Π°ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Π΄Π½Π°Ρ‚Π° ΠΎΡ‚ тях, Π΅ ΠΌΠ½ΠΎΠ³ΠΎ вСроятно Π΄Π° ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π°, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с ΠΏΡŠΡ€Π²Π°Ρ‚Π°. А Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ†ΠΈΠΊΠ»ΠΈ Π·Π° тСстванС, Π·Π° Π΄Π° сС открият всички ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° инвСрсия Π½Π° зависимоститС (DIP)

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

По-Π³ΠΎΡ€Π΅ Π΅ Π΄Π°Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΊΠΎΠ΄, Π² ΠΊΠΎΠΉΡ‚ΠΎ AppManager зависи ΠΎΡ‚ EventLogWriter, ΠΊΠΎΠΉΡ‚ΠΎ, ΠΎΡ‚ своя страна, Π΅ тясно ΡΠ²ΡŠΡ€Π·Π°Π½ с AppManager. Ако Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, Π±ΠΈΠ»ΠΎ Ρ‚ΠΎ ΠΏΡƒΡˆ, SMS ΠΈΠ»ΠΈ ΠΈΠΌΠ΅ΠΉΠ», Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ класа AppManager.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅ΡˆΠ΅Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° DIP. ВмСсто AppManager, Π½ΠΈΠ΅ заявявамС EventLogWriter, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС Π²Π½Π΅Π΄Ρ€Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΡƒΡŠΡ€ΠΊΠ°.

DIP позволява Π±Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ замСстванС Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈ, промСняйки ΠΌΠΎΠ΄ΡƒΠ»Π° Π½Π° зависимостта. Π’ΠΎΠ²Π° Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС промСня Π΅Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ», Π±Π΅Π· Π΄Π° сС влияС Π½Π° останалитС.

ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ вмСсто наслСдяванС

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅ΠžΡΠ½ΠΎΠ²Π½ΠΈΡ‚Π΅ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ са Π΄Π²Π° β€” наслСдяванС ΠΈ композиция, ΠΊΠ°Ρ‚ΠΎ всСки ΠΎΡ‚ тях ΠΈΠΌΠ° свои прСдимства ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ. ОбикновСно ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ сС Π΄Π°Π²Π° Π½Π° втория, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΉ Π΅ ΠΏΠΎ-гъвкав.

ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡΡ‚Π° Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° промяна Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° класа ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Ρ‡Ρ€Π΅Π· Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ свойства. ΠŸΡ€ΠΈ рСализацията Π½Π° интСрфСйситС сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ осигурява ΠΏΠΎ-гъвкава рСализация.

Π”ΠΎΡ€ΠΈ β€žEffective Java” Π½Π° Π”ΠΆΠΎΡˆΡƒΠ° Π‘Π»ΠΎΡ… ΡΡŠΠ²Π΅Ρ‚Π²Π° Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π° композицията, Π° Π½Π΅ наслСдяванСто.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° замСстванС Π½Π° Π‘Π°Ρ€Π±Π°Ρ€Π° Лисков (LSP)

ΠžΡ‰Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΡ‚ инструмСнта SOLID. Π’ΠΎΠΉ гласи, Ρ‡Π΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ трябва Π΄Π° са замСняСми с супСртиловСтС. ВоСст ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ работят с супСрклас, трябва Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΄Π° работят ΠΈ с Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ подкласовС.

LSP Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ ΠΊΠ°ΠΊΡ‚ΠΎ с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° Π΅Π΄ΠΈΠ½Π½Π° отговорност, Ρ‚Π°ΠΊΠ° ΠΈ с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° отговорноститС. Ако Π΅Π΄ΠΈΠ½ клас прСдоставя ΠΏΠΎΠ²Π΅Ρ‡Π΅ функционалност ΠΎΡ‚ подклас, Ρ‚ΠΎ послСдният няма Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° някои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°ΠΉΠΊΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ.

Π•Ρ‚ΠΎ част ΠΎΡ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈ Π½Π° LSP.

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ area(Rectangle r) изчислява ΠΏΠ»ΠΎΡ‰Ρ‚Π° Π½Π° Rectangle. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Ρ‰Π΅ сС сринС слСд ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Square, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Square Π½Π΅ Π΅ Rectangle Π² Ρ‚ΠΎΠ·ΠΈ контСкст. Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° LSP, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ към Π±Π°Π·ΠΎΠ²ΠΈ класовС, трябва Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡ‚Π΅ класовС Π±Π΅Π· Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ инструкции.

Π’ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ спСцифично ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ, Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΡ‚ Π‘Π°Ρ€Π±Π°Ρ€Π° Лисков ΠΏΡ€Π΅Π· 1987 Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° конфСрСнция с основСн Π΄ΠΎΠΊΠ»Π°Π΄ Π½Π° Ρ‚Π΅ΠΌΠ° "Абстракция Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈ йСрархия" β€” ΠΎΡ‚ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΌΡƒ.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° интСрфСйса (ISP)

ΠžΡ‰Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΡ‚ SOLID. Π‘ΠΏΠΎΡ€Π΅Π΄ Π½Π΅Π³ΠΎ интСрфСйс, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π½Π΅ трябва Π΄Π° бъдС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½. Π‘ΠΏΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° систСмата Π΄Π° останС гъвкава ΠΈ подходяща Π·Π° Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°.

Най-чСсто Ρ‚Π°Π·ΠΈ ситуация възниква, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡŠΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° няколко функционалности, Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΡƒ Π΅ Π½ΡƒΠΆΠ½Π° само Π΅Π΄Π½Π° ΠΎΡ‚ тях.

Въй ΠΊΠ°Ρ‚ΠΎ написванСто Π½Π° интСрфСйс Π΅ слоТна Π·Π°Π΄Π°Ρ‡Π°, слСд Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ, измСнСнията ΠΌΡƒ Π±Π΅Π· Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ΠŸΡ€Π΅Π΄ΠΈΠΌΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ISP Π² Java Π΅, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° сС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ всички ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΈ Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΡ‚ класовСтС. Π—Π°Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ позволява намаляванС Π½Π° броя Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅.

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π·Π° интСрфСйс, Π° Π½Π΅ Π·Π° рСализация

Π’ΡƒΠΊ всичко Π΅ Π²ΠΈΠ΄Π½ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ. ΠŸΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° гъвкав ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с всяка Π½ΠΎΠ²Π° рСализация Π½Π° интСрфСйса.

Врябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚ΠΈΠΏΠ° Π½Π° интСрфСйса Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС Π²Ρ€ΡŠΡ‰Π°Ρ‚, ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° SuperClass, Π° Π½Π΅ Π½Π° SubClass.

ВоСст:

List numbers= getNumbers();

А нС:

ArrayList numbers = getNumbers();

Π•Ρ‚ΠΎ практичСска рСализация Π½Π° Ρ‚ΠΎΠ²Π°, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π³ΠΎΠ²ΠΎΡ€ΠΈ ΠΏΠΎ-Π³ΠΎΡ€Π΅.

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΄Π΅Π»Π΅Π³ΠΈΡ€Π°Π½Π΅

РазпространСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ equals() ΠΈ hashCode() Π² Java. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС сравнят Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, Ρ‚ΠΎΠ²Π° дСйствиС сС Π΄Π΅Π»Π΅Π³ΠΈΡ€Π° Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ клас, Π° Π½Π΅ Π½Π° клиСнтския.

ΠŸΡ€Π΅Π΄ΠΈΠΌΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π΅ ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ сравнитСлно лСсната промяна Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. ОсвСн Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Π·Π° Π΄Π΅Π»Π΅Π³ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ.

10 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ трябва Π΄Π° Π·Π½Π°Π΅

Всички Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ позволяват Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΠΎ-гъвкав, красив ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ ΠΊΠΎΠ΄ с висока ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚ ΠΈ ниско сцСплСниС. Π Π°Π·Π±ΠΈΡ€Π° сС, тСорията Π΅ Ρ…ΡƒΠ±Π°Π²Π°, Π½ΠΎ Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ наистина Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ‚ΠΈΡ‚Π΅ знания, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° слСд усвояванСто Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ Π½Π° ООП ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° шаблони Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ‰ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° софтуСр.

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster