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

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

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

НапомнямС Π²ΠΈ: Π·Π° всички Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π½Π° "Habr" - ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° ΠΎΡ‚ 10 000 Ρ€ΡƒΠ±Π»ΠΈ ΠΏΡ€ΠΈ записванС във всСки курс Skillbox, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ промоционалния ΠΊΠΎΠ΄ Π½Π° "Habr".

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

Π‘Π£Π₯О (Π½Π΅ сС повтаряй)

Доста прост ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, чиято ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ ясна ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ: β€žΠΠ΅ сС ΠΏΠΎΠ²Ρ‚Π°Ρ€ΡΠΉΡ‚Π΅β€œ. Π—Π° програмист Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° нСобходимостта ΠΎΡ‚ избягванС Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ способността Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° абстракция Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°.

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

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

ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° капсулиранСто

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

Ако ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° Java Ρ‚ΠΎΠ³Π°Π²Π° присвоява частни Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

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

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

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

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

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

Ако трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ Π² Π½Π΅Π³ΠΎ, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΎΡ‚Π½Π΅ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ всички части Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ Π²Ρ€ΡŠΠ·ΠΊΠ° с ТСлания Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚.

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° отговорност (SRP)

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

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

Бтойността Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅, Ρ‡Π΅ Ρ€Π°Π·Ρ…Π»Π°Π±Π²Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚Π΄Π΅Π»Π½Π° част ΠΎΡ‚ софтуСра ΠΈ ΠΊΠΎΠ΄Π°. ДобавянСто Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΅Π΄Π½Π° функционалност към клас въвСТда Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π°ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ тях, ΠΈΠΌΠ° голям шанс Π΄Π° Ρ€Π°Π·Π²Π°Π»ΠΈΡ‚Π΅ втория, ΡΠ²ΡŠΡ€Π·Π°Π½ с ΠΏΡŠΡ€Π²ΠΈΡ. А Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ†ΠΈΠΊΠ»ΠΈΡ‚Π΅ Π½Π° тСстванС, Π·Π° Π΄Π° сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚ всички ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° раздСлянС Π½Π° интСрфСйса (ISP)

ΠžΡ‰Π΅ Π΅Π΄ΠΈΠ½ Π‘ΠžΠ›Π˜Π”Π•Π ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ. Π‘ΠΏΠΎΡ€Π΅Π΄ Π½Π΅Π³ΠΎ интСрфСйс, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π½Π΅ трябва Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π°. Π‘Π»Π΅Π΄Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° систСмата Π΄Π° останС гъвкава ΠΈ ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚Π²Π°Π΅ΠΌΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°.

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

Въй ΠΊΠ°Ρ‚ΠΎ писанСто Π½Π° интСрфСйс Π΅ слоТна Π·Π°Π΄Π°Ρ‡Π°, слСд ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ, промяната ΠΌΡƒ Π±Π΅Π· Π΄Π° сС счупи Π½Π΅Ρ‰ΠΎ Ρ‰Π΅ бъдС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

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

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

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

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

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

ВоСст:

Бписък с Π½ΠΎΠΌΠ΅Ρ€Π°= getNumbers();

Но нС:

ArrayList numbers = getNumbers();

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

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

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

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

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

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

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

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€