SOLID Β«SΒ»: ΠΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ (single responsibility principle, SPR)
ΠΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°. ΠΠ½ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΡ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΡ ΠΈ ΡΡΠ° ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½Π° Π² ΠΊΠ»Π°ΡΡ.
Π’Π΅ΡΠΌΠΈΠ½ Β«SOLIDΒ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΡ ΠΏΡΡΠΈ Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ:
- ΠΡΠΈΠ½ΡΠΈΠΏΠ° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉΒ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ
- ΠΡΠΈΠ½ΡΠΈΠΏΠ° ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ/Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ
- ΠΡΠΈΠ½ΡΠΈΠΏΠ° ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΠ°ΡΠ±Π°ΡΡ ΠΠΈΡΠΊΠΎΠ²
- ΠΡΠΈΠ½ΡΠΈΠΏΠ° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
- ΠΡΠΈΠ½ΡΠΈΠΏΠ° ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
ΠΡΠΈΠΌΠΈ ΠΏΡΡΡΡ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°.
ΠΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΠΏΡΠΈΡΠΈΠ½Ρ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· 5 Π³ΠΈΠ±ΠΊΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² SOLID, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² ΠΊΠ½ΠΈΠ³Π΅ Β«ΠΡΡΡΡΠ°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΡΠΈΠ½ΡΠΈΠΏΡ, ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°Β» Π ΠΎΠ±Π΅ΡΡΠΎΠΌ Π‘. ΠΠ°ΡΡΠΈΠ½ΠΎΠΌ. ΠΠ°ΡΠ΅ΠΌ ΡΡΠ° ΠΊΠ½ΠΈΠ³Π° Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅ΠΈΠ·Π΄Π°Π½Π° Π² Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ C# Β«ΠΡΠΈΠ½ΡΠΈΠΏΡ, ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ Π³ΠΈΠ±ΠΊΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ C#Β». Π’ΠΎ, ΡΡΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΡΠ΅Ρ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π²ΠΏΠΎΠ»Π½Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ ΡΠ°ΠΊ Π»Π΅Π³ΠΊΠΎΒ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
ΠΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠΎ ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ?Β Π ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΈΡΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»Π΅ΡΡ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΡΡΠ΄ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΠ²Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ Π΄Π²ΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ²ΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ C++, C# Java ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ ΡΠ·ΡΠΊΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠ°ΡΡΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ, Π²Π°ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΏΠΎΡΡΠ°ΡΠΈΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΡΠΈΠ»ΠΈΠΉ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΈΡΠΈΠ½ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ - Π°Π½Π°Π»ΠΈΠ· Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, Π±ΡΠ΄ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΠΌΠΈ Π»ΠΈΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°Ρ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ.
- ΠΠΎΠ΄ΡΠ»Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΡΡΠΈ - Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ² Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ² ΠΠ.
- ΠΠΎΠ΄ΡΠ»Ρ ΠΎΡΡΠ΅ΡΠ½ΠΎΡΡΠΈ - Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠ»Π΅ΡΠΊΠΎΠ², Π±ΡΡ Π³Π°Π»ΡΠ΅ΡΠΎΠ² ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½ΠΈΡΡΠΎΠ².
- ΠΠΎΠ΄ΡΠ»Ρ ΡΠ°ΡΡΠ΅ΡΠ° ΠΏΠ»Π°ΡΠ΅ΠΆΠ΅ΠΉ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΡΡΠ΅ΡΠ° Π·Π°ΡΠ°Π±ΠΎΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡ - Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΡΠΈΡΡΠΎΠ², ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠ² ΠΈ Π±ΡΡ Π³Π°Π»ΡΠ΅ΡΠΎΠ².
- ΠΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΠ½ΠΈΠ³ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ - Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ ΠΈ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ.
ΠΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π»ΠΈΡ Ρ ΡΠΎΠ»ΡΠΌΠΈ β Π²Π΅ΡΡΠΌΠ° Π½Π΅ΠΏΡΠΎΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ°. Π Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΈΡΠΌΠ΅ ΠΎΠ΄Π½ΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π»ΠΈΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ³ΡΠ°ΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ»Π΅ΠΉ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π² ΠΊΡΡΠΏΠ½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΡΡΠΈΡ ΡΠΎΠ»ΡΡ . ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ°ΠΌΠΈ ΡΠΎΠ»ΠΈ Π±ΡΠ²Π°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠΎΡΠ°Π·Π΄ΠΎ Π»Π΅Π³ΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ Π°ΠΊΡΡΡΠΎΠ², ΠΈΠ³ΡΠ°ΡΡΠΈΡ ΡΡΠΈ ΡΠΎΠ»ΠΈ ΠΈ ΡΠ²ΡΠ·Π°ΡΡ Π°ΠΊΡΡΡΠΎΠ² ΠΈ Π½Π°ΡΡ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π°ΠΊΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΡΠ²Π΅ΡΡΠΈ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π»ΠΈΡ Π²ΡΠΎΠ΄Π΅ Β«ΠΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΠ° ΠΠΆΠΎΠ½Π°Β» ΠΈΠ»ΠΈ Β«Π‘Π΅ΠΊΡΠ΅ΡΠ°ΡΡ ΠΠ°ΡΠΈΠΈΒ» ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π ΠΎΠ±Π΅ΡΡΡ Π‘. ΠΠ°ΡΡΠΈΠ½Ρ, ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ - ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π²Π·ΡΡΡΠΉ Π°ΠΊΡΡΡ.
Π Π°ΡΡΡΠΆΠ΄Π°Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π°ΠΊΡΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π»Ρ Π½Π°Π±ΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ ΡΠ°ΠΌΠΈΡ Π°ΠΊΡΡΡΠΎΠ². ΠΠ°ΡΡΠ΄Ρ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ Π°ΠΊΡΡΡΠΎΠ², ΡΡΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ ΠΈ ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±ΠΈΡΡΡΡ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ Π°ΠΊΡΠ΅ΡΠΎΠ².
ΠΠΊΡΠ΅Ρ Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ - Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΡΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ. (Π ΠΎΠ±Π΅ΡΡ Π‘. ΠΠ°ΡΡΠΈΠ½)
ΠΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΡΠ²Π°ΡΡ ΡΠ°ΠΌΠΈ ΡΠ΅Π±Ρ
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ Book
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π² ΡΠ΅Π±Π΅
ΠΊΠ½ΠΈΠ³Ρ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ.
<?php
class Book
{
public function getTitle()
{
return "A Great Book";
}
public function getAuthor()
{
return "John Doe";
}
public function turnPage()
{
// pointer to next page
}
public function printCurrentPage()
{
echo "current page content";
}
}
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠΉ ΠΊΠ»Π°ΡΡ. Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ½ΠΈΠ³Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ²ΠΎΠ΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠΈ, Π°Π²ΡΠΎΡΠ΅ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Π° ΠΏΠ΅ΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠ΅ΠΊΡΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΊΠ½ΠΈΠ³Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π°ΠΊΡΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π±ΡΡΡ Π²ΠΎΠ²Π»Π΅ΡΠ΅Π½Ρ Π² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Book. Π‘Ρ ΠΎΠ΄Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ Π΄Π²ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π°ΠΊΡΡΡΠΎΠ²: Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΎΠΉ (ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ) ΠΈ ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΎΡΠΎΠ±, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ - Π½Π° ΡΠΊΡΠ°Π½, Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅, ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ ΠΆΠ΅ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΡΠ²Π°ΡΡ). Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ Π΄Π²ΡΠΌΡ Π°ΠΊΡΠ΅ΡΠ°ΠΌΠΈ.
Π‘ΠΎΠ²ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΌ, Ρ.ΠΊ. ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ (ΠΠΠ). Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅:
<?php
class Book
{
public function getTitle()
{
return "A Great Book";
}
public function getAuthor()
{
return "John Doe";
}
public function turnPage()
{
// pointer to next page
}
public function getCurrentPage()
{
return "current page content";
}
}
interface Printer
{
public function printPage($page);
}
class PlainTextPrinter implements Printer
{
public function printPage($page)
{
echo $page;
}
}
class HtmlPrinter implements Printer
{
public function printPage($page)
{
echo $page;
}
}
ΠΠ°ΠΆΠ΅ ΠΏΠΎ ΡΠ°ΠΊΠΎΠΌΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡ ΠΠΠ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌ ΡΠ΅Π±Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ.
<?php
class Book
{
public function getTitle()
{
return "A Great Book";
}
public function getAuthor()
{
return "John Doe";
}
public function turnPage()
{
// pointer to next page
}
public function getCurrentPage()
{
return "current page content";
}
public function save()
{
$filename = '/documents/'. $this->getTitle(). ' - ' . $this->getAuthor();
file_put_contents($filename, serialize($this));
}
}
ΠΡ ΡΠ½ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΡΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π‘ΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ½ΠΈΠ³ΠΎΠΉ ΠΈ Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΡΡΡ. ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠ΅ΡΠ΅Π»ΠΈΡΡΡΠ²Π°Π½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
<?php
class Book
{
public function getTitle()
{
return "A Great Book";
}
public function getAuthor()
{
return "John Doe";
}
public function turnPage()
{
// pointer to next page
}
public function getCurrentPage()
{
return "current page content";
}
}
class SimpleFilePersistence
{
public function save(Book $book)
{
$filename = '/documents/' . $book->getTitle() . ' - ' . $book->getAuthor();
file_put_contents($filename, serialize($book));
}
}
ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ² ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»Π°ΡΡ, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²Π½ΠΎ
ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌΠΎΡΡΠΈ,
Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΡ Π½Π° ΠΊΠ»Π°ΡΡ Book. Π’Π°ΠΊ, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° DatabasePersistence
Π±ΡΠ΄Π΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌ, ΠΈ Π½Π°ΡΠ° Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ°, Π²ΡΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π²ΠΎΠΊΡΡΠ³
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Ρ ΠΊΠ½ΠΈΠ³ΠΎΠΉ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ.
Π ΡΠ²ΠΎΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΡΠ°ΡΡΡΡ Ρ Π½Π΅ ΡΠ°Π· ΡΠΏΠΎΠΌΠΈΠ½Π°Π» ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π» ΠΠ°ΡΠ΅ΠΌΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡ Π΅ΠΌΡ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π½ΠΈΠΆΠ΅.
ΠΡΠ»ΠΈ ΠΌΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ ΡΡ Π΅ΠΌΡ, ΡΠΎ ΡΡΠ°Π·Ρ ΠΏΠΎΠΉΠΌΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΡΡ ΠΠΠ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΎ Ρ ΠΏΡΠ°Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΡ Π΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Β«Π€Π°Π±ΡΠΈΠΊΒ» (Factories) ΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Main). ΠΠ΄ΠΈΠ½ Π°ΠΊΡΡΡ - ΠΎΠ΄Π½Π° ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ. Π ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΡΡΠΈ (Persistence) ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΠ»ΠΈΡΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΠ² Π΅Π΅ Π²Π½ΠΈΠ·Ρ. ΠΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ. Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, Ρ Π»Π΅Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ, Π² Π²ΠΈΠ΄Π΅ MVC ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΌ ΡΠΈΠΏΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π Π²Π½ΠΎΠ²Ρ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ. ΠΡΠ΅, ΡΡΠΎ Π½Π°ΠΌ ΠΎΡΡΠ°Π΅ΡΡΡ Π²ΡΡΡΠ½ΠΈΡΡ, - ΡΡΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Ρ ΡΠ°ΠΌΠΎΠΉ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ.
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΎΠ±Π΄ΡΠΌΡΠ²Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½Π°ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΠ΅ΠΌΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ Π½Π° Π½Π΅Π³ΠΎ Π²Π»ΠΈΡΠ½ΠΈΠ΅, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΡΠΈ ΠΎΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΠΈΠ³ΡΠ°ΡΡ ΡΠΎΠ»Ρ ΠΊΠ»ΡΡΠ° ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ. ΠΠΏΠΎΠ»Π½Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ Π³ΡΡΠΏΠΏΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, Π²Π»ΠΈΡΡΡΠΈΡ Π½Π° ΡΡ ΠΆΠ΅ Π³ΡΡΠΏΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ΄Π²ΠΈΠ½ΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ»Π°Π½.
ΠΠ»Π°Π²Π½ΠΎΠ΅ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ ΠΠ - ΠΏΡΠΎΡΡΠΎΡΠ° Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ - ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΠ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΊΡΡΠ³ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π²ΡΠΎΡΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΡΠΈΡΠ΅ΡΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΡΠΈΡΠ΅ΡΠΈΡ Π½Π° Π΄ΠΎΠ»ΠΆΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ, ΡΠΎΠ±Π»ΡΠ΄Π°Ρ ΠΠΠ, ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ°ΠΊΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠ°ΡΡΠΈΡΡΡΡ ΠΈ Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΡΠΈΡΠ΅ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΊΡΠΈΡΠ΅ΡΠΈΡ.
- ΠΡΠΎΡΠΎΠΉ ΠΊΡΠΈΡΠ΅ΡΠΈΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
- ΠΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ β ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ Π°ΠΊΡΡΡΠΎΠ².
- ΠΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ Π°ΠΊΡΡΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΈΡ Π°ΠΊΡΡΡΠΎΠ².
- ΠΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Π°ΠΊΡΡΡΠΎΠ², Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π°ΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ:
- ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π°ΠΊΡΡΡΠΎΠ².
- ΠΡΡΠ²ΠΈΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΠΊΡΡΡΠ°.
- Π‘Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ°Π» ΡΠΎΠ»ΡΠΊΠΎ Π·Π° ΡΠ²ΠΎΡ ΡΠ°ΡΡΡ.
<?php
class Book
{
public function getTitle()
{
return "A Great Book";
}
public function getAuthor()
{
return "John Doe";
}
public function turnPage()
{
// pointer to next page
}
public function getCurrentPage()
{
return "current page content";
}
public function getLocation()
{
// returns the position in the library
// ie. shelf number & room number
}
}
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΠΈ ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ. Π£ Π½Π°Ρ Π½Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Π°,
ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΠ»ΡΡ Π±Ρ ΠΊ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
. ΠΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ
ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° turnPage()
ΠΈ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΌΠΈ
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠ½ΠΈΠ³Π΅. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ
Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π§ΡΠΎΠ±Ρ Π΅Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π°ΡΠ΅
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ getLocation()
.
ΠΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° Book
ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π·Π°Π΄ΡΠΌΠ°Π½Π½ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ.
ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ.
ΠΡΠ»ΠΈ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΡΡ ΠΈ Π²ΡΠ΄Π°ΡΡ Π½Π°ΠΌ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ, ΡΠΎ ΠΠΠ ΠΌΠΎΠΆΠ΅Ρ
Π±ΡΡΡ Π½Π°ΡΡΡΠ΅Π½.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ getAuthor()
, getTitle()
ΠΈ
getLocation()
ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π°ΠΊΡΠ΅ΡΠΎΠ².
ΠΠΎΡΠ΅ΡΠΈΡΠ΅Π»ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ
ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΏΠ΅ΡΠ²ΡΡ
Π΅Π΅ ΡΡΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ ΠΈΠΌ ΡΠ΅ΡΠΈΡΡ,
Π½ΡΠΆΠ½Π° Π»ΠΈ ΠΈΠΌ ΡΡΠ° ΠΊΠ½ΠΈΠ³Π° ΠΈΠ»ΠΈ Π½Π΅Ρ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ
Π°ΠΊΡΡΡΠΎΠ² ΠΊΠ°ΠΊ
ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π²ΡΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΡΠΎΠΌΠ΅ getLocation()
,
Ρ.ΠΊ. ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Π½Π΅ Π²ΠΎΠ»Π½ΡΠ΅Ρ, Π³Π΄Π΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Ρ
ΡΠ°Π½ΡΡΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ. ΠΠ½ΠΈΠ³Ρ
Π½Π°ΠΉΠ΄Π΅Ρ ΠΈ ΠΎΡΠ΄Π°ΡΡ Π² ΡΡΠΊΠΈ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅ΠΌ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ.
<?php
class Book
{
public function getTitle()
{
return "A Great Book";
}
public function getAuthor()
{
return "John Doe";
}
public function turnPage()
{
// pointer to next page
}
public function getCurrentPage()
{
return "current page content";
}
}
class BookLocator
{
public function locate(Book $book)
{
// returns the position in the library
// ie. shelf number & room number
$repository->findBookBy($book->getTitle(), $book->getAuthor());
}
}
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π½ΡΠΆΠ½ΡΡ ΠΊΠ½ΠΈΠ³Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ
ΠΊΠ»Π°ΡΡ BookLocator
. ΠΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ ΠΆΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»Π°ΡΡ Book
. ΠΠΎΠ½Π΅ΡΠ½ΠΎ
ΠΆΠ΅, BookLocator
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. Π’Π°ΠΊ,
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π²ΡΠΎΡΠ° ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ·
ΠΎΠ±ΡΠ΅ΠΊΡΠ° Book
. ΠΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΠ°ΠΆΠ½ΠΎ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈ
ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠ½ΠΈΠ³, ΡΠΊΠΎΡΠ΅Π΅
Π²ΡΠ΅Π³ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ, ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΊΠ°ΡΡ ΠΊΠ½ΠΈΠ³ΠΈ Π² Π½ΠΎΠ²ΠΎΠΉ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Book
Π·Π°ΡΡΠΎΠ½ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅, Π΅ΡΠ»ΠΈ
ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ ΡΠΈΡΠ°ΡΠ΅Π»ΡΠΌ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΊΠ½ΠΈΠ³, Π·Π°ΠΊΡΡΠ² Π΄ΠΎΡΡΡΠΏ
ΠΊ ΠΈΡ
ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ β ΠΌΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅ΠΌ Π½ΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ, Π½ΠΈ Π½Π°
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎΠ»ΠΎΠΊ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ
Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ ΠΊΠ½ΠΈΠ³ΠΈ.
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° β ΠΈΡΠΊΠ»ΡΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π² Π½Π°ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΠΠΠ Π±ΡΠ» ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅. Π§ΠΈΡΠ°ΡΠ΅Π»ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΌΠΈ ΡΡΠ°Π½ΡΡ Π²ΡΡΡΡΠΏΠ°ΡΡ Π² ΡΠΎΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ΅ΠΉ, ΠΈ ΠΈΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΠ΄ΡΠΈ ΠΈΡΠΊΠ°ΡΡ ΠΊΠ½ΠΈΠ³ΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ ΡΠ°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ. ΠΠ»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, - ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΡ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π΄ΡΠΌΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΎΡΠ΅Π½Ρ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½cΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ΄. ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΠΠ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ. ΠΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΌΠ΅Π΄Π°Π»Ρ, ΠΠΠ ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ. ΠΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠΈΡΡΠ²Π°Ρ ΠΠΠ, Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΡΠ°Π·Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΠ΅ΡΠΎΠ², ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΊΡΠ°ΠΉΠ½Π΅ ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ΄ΡΠΌΠ°ΡΡ Π²ΡΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π°. ΠΠ·Π»ΠΈΡΠ½Π΅Π΅ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΠΠΠ ΠΌΠΎΠΆΠ΅Ρ Ρ Π»Π΅Π³ΠΊΠΎΡΡΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ΅ΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π° ΡΡΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΠ΅, ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΊΠΎΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ, ΠΏΠΎΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°Π³ΠΈ Π΄Π»Ρ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ΠΠΠ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ΅ΡΠ΄ΡΡΠ²ΠΎΠ²Π°ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·Π»ΠΈΡΠ½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π½Π΅ΡΡΠΈ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ/Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡΡΠΈΡΡ, Π½ΠΎ ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠΎΠΌΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ, Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ.
Π‘ΡΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ (ΠΊΠ»Π°ΡΡΡ, ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ) Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΡΠΊΡΡΡΠ° Π΄Π»Ρ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π·Π°ΠΊΡΡΡΠ° Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ (OCP) Π±ΡΠ» ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π½ ΡΡΠ°Π½ΡΡΠ·ΡΠΊΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌ ΠΠ΅ΡΡΡΠ°Π½ΠΎΠΌ ΠΠ°ΠΉΠ΅ΡΠΎΠΌ ΠΈ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΡΡΠ΅Π» Π² ΠΌΠΈΡ Π² Π΅Π³ΠΎ ΠΊΠ½ΠΈΠ³Π΅ Β«Object-Oriented Software ConstructionΒ» Π² 1988 Π³ΠΎΠ΄Ρ. ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΏΡΠΈΡΠ»Π° Π² Π½Π°ΡΠ°Π»Π΅ 2000-Ρ Π³ΠΎΠ΄ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π²ΠΊΠ»ΡΡΠΈΠ»ΠΈ Π² SOLID.
ΠΠ΄Π΅ΡΡ ΠΆΠ΅ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½ΠΎΠ²ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΌΠ΅Π½ΡΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄. Π Π΅ΡΠ΅Π½ΠΈΠ΅ β Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅Π΄ΠΎΡΠΌΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΈΡΡΡ Π½Π° Java, C, C++ ΠΈΠ»ΠΈ C#, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ. ΠΠΌΠ΅Π΅ΡΡΡ Π² Π²ΠΈΠ΄Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Β«exeΒ» ΠΈ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΡΠ»ΠΈ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π΄Π°Π»ΡΡΠ΅, ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅. Π’Π°ΠΊ, ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ (SRP) Π³Π»Π°ΡΠΈΡ, ΡΡΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π»Π΅ΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΡ. Π‘ΡΠ°Π²Π½ΠΈΠ²Π°Ρ OCP ΠΈ SRP, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΈΡ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΎΡΡΡ, Π²Π·Π°ΠΈΠΌΠΎΠ΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΡΡΡ. ΠΠΎΠ΄, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ Ρ ΡΡΠ΅ΡΠΎΠΌ SRP, Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ ΡΠ°ΠΊΠΎΠΌΡ ΠΆΠ΅ ΠΊΠΎΠ΄Ρ, Π½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡΠ΅ΠΌΡ OCP. ΠΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½Ρ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΡ, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π²ΡΠΎΡΡΡ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΡ, Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΠ²ΠΎΠ΄ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΈΡΡ ΠΎΠ±Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°.
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅, Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ Π² ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½Ρ ΠΎΠ±Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°. ΠΠΎ ΡΡΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ SRP-ΠΏΡΠΈΠ½ΡΠΈΠΏ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ OCP, ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π½ΠΎ Π² ΠΏΡΠ΅ΠΎΠ±Π»Π°Π΄Π°ΡΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², Π΅ΡΠ»ΠΈ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊΠΎΠ΄ ΠΊ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ ΡΠΎΡΡΠ°Π²ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΄Π°.
Π‘ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡ: ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ Π΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΡΠ²ΡΠ·ΠΈ, Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ² Π½Π°ΡΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ OCP.
ΠΠ»Π°ΡΡ User
Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ Logic
. ΠΡΠ»ΠΈ Π²ΡΠΎΡΠΎΠΉ ΠΊΠ»Π°ΡΡ Logic
Π½ΡΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΡΡΠ°ΡΡΠ΅
Π½Π°ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΈ Π½ΠΎΠ²ΡΠ΅, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ Logic
ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ. User
Π½Π°ΠΏΡΡΠΌΡΡ ΡΠ²ΡΠ·Π°Π½ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ Logic
, Π° Π·Π½Π°ΡΠΈΡ, ΡΠΏΠΎΡΠΎΠ±Π°
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΌΠ΅Π½ΡΡΡ ΠΈ User
, ΠΏΠΎΠΏΡΠΎΡΡΡ Π½Π΅
ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ ΡΠ·ΡΠΊΠ°Ρ
ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΡΠΎ ΠΊΠ»Π°ΡΡ
User
, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠΎΠΆΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ.
ΠΠΎΠ³Π΄Π° ΠΆΠ΅ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ
ΡΠ·ΡΠΊΠ°Ρ
, ΡΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ User
ΠΈ
Logic
ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π° ΡΡΠΎ
β ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΡΡ Π΅ΠΌΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»Π°ΡΡ, ΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ Π±ΡΠ΄Π΅Ρ Π½Π°ΡΡΡΠ°ΡΡΡΡ. Π‘ΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠΎ β Π²Π΅ΡΠ½ΠΎ. ΠΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΠΏΡΠ΅Π΄Π΅Π», ΡΡ ΡΠ΅ΡΡΡ, Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ OCP Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΆΠ΅ Π·Π°ΡΡΠ°ΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΡΠ΄ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ.
Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ Π·Π°ΠΊΠ°ΡΠΊΠΈ
ΡΠ°ΠΉΠ»Π° ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΠ΅Π½ΡΠ°Ρ
. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π±ΡΠ΄Π΅Ρ Π΄Π²Π°
ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΊΠ»Π°ΡΡΠ° - Progress
ΠΈ File
.
public function testItCanGetTheProgressOfAFileAsAPercent()
{
$file = new File();
$file->length = 200;
$file->sent = 100;
$progress = new Progress($file);
$this->assertEquals(50, $progress->getAsPercent());
}
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Progress
. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΠ΅Π½ΡΠ°Ρ
, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ°ΠΉΠ»Π°. ΠΠ»Π°ΡΡ
File
Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ°
Progress
. Π£ ΡΠ°ΠΉΠ»Π° Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π΄Π»ΠΈΠ½Π° Π² Π±Π°ΠΉΡΠ°Ρ
ΠΈ ΠΏΠΎΠ»Π΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ
sent
, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ
, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ
Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΡ. Π
Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Π²
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΠΊΠ°Ρ Π²ΠΎΠ»ΡΠ΅Π±Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°,
ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠΎ ΠΈ Π΄Π΅Π»Π°Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ.
<?php
class File
{
public $length;
public $sent;
}
ΠΠ»Π°ΡΡ File
β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π°Π½Π½ΡΡ
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ 2 ΠΏΠΎΠ»Ρ. Π ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ
ΠΆΠΈΠ·Π½ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΡΡΠ³ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅,
Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΏΡΡΡ ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ, Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΡΠΈΠΏ,
ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
<?php
class Progress
{
private $file;
public function __construct(File $file)
{
$this->file = $file;
}
public function getAsPercent()
{
return $this->file->sent * 100 / $this->file->length;
}
}
ΠΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Progress
β ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ File
Π²
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅. ΠΠ»Ρ ΡΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΏ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π² Progress
, ΡΡΠΎ -
getAsPercent()
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π΄Π»ΠΈΠ½Ρ ΠΈΠ· File
ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ Π² ΠΏΡΠΎΡΠ΅Π½ΡΡ. ΠΡΠΎΡΡΠΎ, ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Testing started at 5:39 PM ...
PHPUnit 3.7.28 by Sebastian Bergmann.
.
Time: 15 ms, Memory: 2.50Mb
OK (1 test, 1 assertion)
ΠΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π½ΠΎ ΠΎΠ½ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π°ΡΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ. ΠΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ?
ΠΠΏΠΎΠ»Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΠ»ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅
ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½ΡΠΆΠ΄Π° Π² Π½ΠΎΠ²ΡΡ
ΡΡΠ½ΠΊΡΠΈΡΡ
. ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΎΠ²ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ
Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΊΠ°ΡΠΊΠ° ΠΌΡΠ·ΡΠΊΠΈ, Π½ΠΎ ΠΈ Π΅Π΅
ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΠ΅. ΠΠ»ΠΈΠ½Π° File
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² Π±Π°ΠΉΡΠ°Ρ
, Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
ΠΌΡΠ·ΡΠΊΠΈ β Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
. Π‘Π»ΡΡΠ°ΡΠ΅Π»ΡΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Ρ
ΠΎΡΠΎΡΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ°, Π½ΠΎ Π½Π΅Π»ΡΠ·Ρ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ?
ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, Π½Π΅Ρ, Π½Π΅Π»ΡΠ·Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ ΡΠΆΠ΅ ΡΠ²ΡΠ·Π°Π½ Ρ File
ΠΈ
ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»Ρ. ΠΡΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π΄Π°ΠΆΠ΅ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ
ΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΌΡΠ·ΡΠΊΠΈ. ΠΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ
ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ ΠΌΡΠ·ΡΠΊΠ°Π»ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ², Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Progress
ΠΈΠΌΠ΅Π»
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ Music
ΠΈ ΠΎ File
. ΠΡΠ»ΠΈ Π±Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ
OCP, ΡΠΎ File
ΠΈΠ»ΠΈ Progress
Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΠΌΠ΅Π½ΡΡΡ, Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ
ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π»Π΅Π³ΠΊΠΎ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊ ΠΌΡΠ·ΡΠΊΠ΅.
Π£ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ·ΡΠΊΠΎΠ² Π΅ΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ: ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ
ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΡ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Progress
Ρ Π²ΠΏΠΎΠ»Π½Π΅
ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
<?php
class Progress
{
private $file;
public function __construct($file)
{
$this->file = $file;
}
public function getAsPercent()
{
return $this->file->sent * 100 / $this->file->length;
}
}
Π’Π΅ΠΏΠ΅ΡΡ Π² Progress
ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΡΠ΅, ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ.
<?php
class Music
{
public $length;
public $sent;
public $artist;
public $album;
public $releaseDate;
public function getAlbumCoverFile()
{
return 'Images/Covers/' . $this->artist . '/' . $this->album . '.png';
}
}
Π ΠΊΠ»Π°ΡΡ Music
Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠ»ΠΈΡΠ½ΠΎ. ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ
ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
public function testItCanGetTheProgressOfAMusicStreamAsAPercent()
{
$music = new Music();
$music->length = 200;
$music->sent = 100;
$progress = new Progress($music);
$this->assertEquals(50, $progress->getAsPercent());
}
Π ΠΎΠ±ΡΠ΅ΠΌ, Π»ΡΠ±ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ
Progress
. ΠΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ ΡΡΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π΅Π΅ ΠΈΠΌΡ:
<?php
class Progress
{
private $measurableContent;
public function __construct($measurableContent)
{
$this->measurableContent = $measurableContent;
}
public function getAsPercent()
{
return $this->measurableContent->sent * 100 / $this->measurableContent->length;
}
}
ΠΡΠ΅, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΎΡΠ»ΠΈΡΠ½ΠΎ, Π½ΠΎ Π² ΡΡΠΎΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅ Π΅ΡΡΡ ΠΎΠ΄Π½Π° Π³ΡΠΎΠΌΠ°Π΄Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΠΎΠ³Π΄Π° File
Π±ΡΠ» ΡΠΊΠ°Π·Π°Π½ Π² ΡΠΎΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΡΠΈΠΏΠ°, ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ
ΠΊΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΡΠ΅ΠΏΡΠ°Π»Π°. ΠΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ,
Π° ΠΎ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ Π½Π΅ΡΠΎΡΠ½ΠΎΡΡΡΡ
ΠΌΠΎΠ³Π»Π° Π±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΏΡΠΎΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°.
Argument 1 passed to Progress::__construct()
must be an instance of File,
instance of Music given.
ΠΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ» Π±Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π² ΠΎΠ±ΠΎΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
, Π½ΠΎ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΌΡ
ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π±Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ°Π²Π΄Π°, ΠΎΡΠ΅Π½Ρ Π½Π΅ΡΡΠ½ΠΎΠ΅. ΠΠ΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ - ΡΡΡΠΎΠΊΠ°) Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²
ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Ρ. ΠΡΠ»Π°Π΄ΠΊΠ° ΠΈ Π΄Π΅Π±Π°Π³ΠΈΠ½Π³ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅
ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ Progress
ΠΈ
ΠΏΠ΅ΡΠ΅ΡΠΈΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΈ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ
ΡΡΠΎΡΠ½ΠΈΡΡ ΠΏΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Progress
, Π° Π΅ΡΠ»ΠΈ ΡΠΎΡΠ½Π΅Π΅, ΡΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π΄ΠΎΡΡΡΠΏΡ ΠΊ
ΠΏΠΎΠ»ΡΠΌ sent
ΠΈ length
Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ getAsPercent()
. ΠΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π²ΡΠ΅
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π΅Π»ΡΠ·Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ Π·Π°ΡΡΠ°ΡΠ°ΠΌΠΈ (ΡΡΡΠ΄Π½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠΏΡΠ°Π²Π΄Π°ΡΡ ΡΡΠΈΠ»ΠΈΠΉ).
ΠΡΠΎ β Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠ΅ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ OCP, ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄.
Π¨Π°Π±Π»ΠΎΠ½ Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ β ΡΡΠΎ ΠΎΡΠΎΠ±ΡΠΉ ΡΠΈΠΏ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ±Π° ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄ΡΡ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ.
<?php
interface Measurable
{
public function getLength();
public function getSent();
}
Π ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΌΠ΅ΡΡΠΎ
ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎ
ΡΠ΅ΡΡΠ΅ΡΠ°Ρ
ΠΈ Π³Π΅ΡΡΠ΅ΡΠ°Ρ
. Π Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ, Π²Π΅Π΄Ρ ΠΎΠ±
ΡΡΠΎΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡ IDE
.
public function testItCanGetTheProgressOfAFileAsAPercent()
{
$file = new File();
$file->setLength(200);
$file->setSent(100);
$progress = new Progress($file);
$this->assertEquals(50, $progress->getAsPercent());
}
ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠΉΠ΄ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π³Π΄Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΡΡΠ΅ΡΠ°ΠΌΠΈ
Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΡΠ°ΡΠΈ, ΡΠ΅ΡΡΠ΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² Π½Π°ΡΠ΅ΠΌ
ΠΈΠ·ΠΌΠ΅ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ (Measurable), Π½ΠΎ Π±ΡΠ΄ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ
Π²Ρ ΡΡΠ΄Π° ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ
ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ Progress
ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ File
ΠΈ
Music
.
ΠΡΠΆΠ½ΠΎ Π»ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Progress
? ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅Ρ. ΠΡΡΠ΄ Π»ΠΈ Π²Π°ΠΌ
ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ΅ΡΡΠ΅ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΠ΅ ΠΆΠ΅ ΡΠ΅ΡΠΈΡΠ΅ ΡΡΠΎ
ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΠ΅ Π²ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ΅ΡΡΠ΅ΡΠ°ΠΌΠΈ. ΠΠ΄Π½ΠΈΠΌ
ΠΈΠ· Π½ΠΈΡ
Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡ ΡΠ΅ΡΡΠ΅ΡΡ, Π½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ³ΡΡ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ
Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎ. Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Progress
ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π» ΡΠ΅ΠΌΠΏΠ΅ΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠΈ? ΠΠ»Π°ΡΡ OvenTemperature
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ
ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ
ΠΊΠ»Π°ΡΡΠ°. ΠΠΎ ΠΈΠΌΠ΅ΡΡ Π·Π΄Π΅ΡΡ ΡΠ΅ΡΡΠ΅ΡΡ β ΡΡΠΎ ΡΡΡΠ°Π½Π½ΠΎ.
<?php
class File implements Measurable
{
private $length;
private $sent;
public $filename;
public $owner;
public function setLength($length)
{
$this->length = $length;
}
public function getLength()
{
return $this->length;
}
public function setSent($sent)
{
$this->sent = $sent;
}
public function getSent()
{
return $this->sent;
}
public function getRelativePath()
{
return dirname($this->filename);
}
public function getFullPath()
{
return realpath($this->getRelativePath());
}
}
ΠΠ»Π°ΡΡ File
Π±ΡΠ» ΡΠ»Π΅Π³ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ
ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ Π²ΡΡΠ΅, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Measurable
; Π² Π½Π΅ΠΌ Π΅ΡΡΡ
ΡΠ΅ΡΡΠ΅ΡΡ ΠΈ Π³Π΅ΡΡΠ΅ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ. Π ΠΊΠ»Π°ΡΡ Music
Π½Π° Π½Π΅Π³ΠΎ
ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆ.
<?php
class Progress
{
private $measurableContent;
public function __construct(Measurable $measurableContent)
{
$this->measurableContent = $measurableContent;
}
public function getAsPercent()
{
return $this->measurableContent->getSent() * 100 / $this->measurableContent->getLength();
}
}
ΠΠ»Π°ΡΡ Progress
ΡΠΎΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ, ΡΠΊΠ°Π·Π°Π² Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΡΠΈΠΏ.
ΠΠ°Ρ ΡΠΈΠΏ β ΡΡΠΎ Measurable
(ΠΈΠ·ΠΌΠ΅ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Ρ Π½Π°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ
ΡΠ²Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ. Π Progress
Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ° β ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ
ΠΈΡ
Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠ»Π°ΡΡΡ File
ΠΈ Music
Π²ΡΠ΅Π³Π΄Π° ΡΠΌΠΎΠ³ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ
Π²ΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΊΠ»Π°ΡΡΡ Progress
, ΠΏΡΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°: ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΡΠ΄ΠΈ ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡΠΊΠ²Ρ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ»ΠΎΠ²ΠΎ
Β«InterfaceΒ» Π² ΠΊΠΎΠ½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, IFile
ΠΈΠ»ΠΈ FileInterface
. ΠΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·ΡΠ° ΠΈ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΎΠ½ΠΎ ΡΠΎ ΡΡΠ°ΡΡΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌΠΈ. ΠΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ΅ΡΠΊΠΎ ΠΈ ΡΡΠ½ΠΎ Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ½ΡΡΡ ΡΡΡΡ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ. IDE
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡΡ Π² Π΄ΠΎΠ»Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ
Π½Π°ΠΌ ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠ΅.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΈΡ
ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Ρ
ΠΎΠ΄ΠΈΠΌ Π΄Π°ΡΡ ΠΈΠΌΡ
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°Π±ΡΡΡ ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄ΡΠΌΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ
ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅. ΠΠΎΠ³Π΄Π° ΠΌΡ Π½Π°Π·Π²Π°Π»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΡΠΌ (Measurable), ΡΠΎ Π΄ΡΠΌΠ°Π»ΠΈ ΠΎ
Progress
. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ,
ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π² ΠΏΡΠΎΡΠ΅Π½ΡΡ? ΠΡΠ²Π΅Ρ Π±ΠΎΠ»Π΅Π΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡ: ΡΡΠΎ-ΡΠΎ,
ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΠ»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Measurable
.
ΠΠ΅ ΡΡΠΎΠΈΡ Π·Π°Π±ΡΠ²Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎ β ΠΌΡΠ·ΡΠΊΠ° ΠΈ ΡΠ°ΠΉΠ»Ρ. ΠΠΎ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ ΠΌΡ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π³ΠΎΠ½ΠΎΡΠ½ΠΎΠΌ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅, ΠΈ ΡΠΎΠ³Π΄Π° Π½Π°ΡΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΠΌΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΡΡΠ°Π½ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΏΠ»ΠΈΠ²Π° ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Π¨Π°Π±Π»ΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡΠ΅Π½Ρ ΡΠΌΠ°Ρ ΠΈΠ²Π°Π΅Ρ Π½Π° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ, Π½ΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ: Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ. Π¨Π°Π±Π»ΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ, Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΠ±ΡΠ΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΆΠ΅ Π²ΡΠ΅ ΡΡΠΎ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π½Π°ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ?Β
ΠΡΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΏΡΡΡΡ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ (ΡΠΈΠ½ΠΈΠΉ ΡΠ²Π΅Ρ) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° Π²ΡΡ ΡΠ°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ (ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ).
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠΈΡΡΠ΅ΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΠΊΠΎΠ΄ ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ Π½ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠ·ΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π½Π΅ ΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΡΠ΄Π΅ΡΠΆΠ°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Π½ΠΈΠΌ ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅, ΠΈΠ½Π°ΡΠ΅ Π²Ρ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π’Π°ΠΊΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΡΠΆΠ΅Π»ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π½Π΅Ρ ΡΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π±ΡΠ΄ΡΡ Π»ΠΈ Π·Π΄Π΅ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ.
Π ΠΎΠ±ΡΠ΅ΠΌ-ΡΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π½Π°ΠΉΡΠΈ Π΅Π΅ Π² Π»ΠΎΠ³Π°Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π°. ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ β ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅ ΡΡΡ ΡΠ°ΡΡΡ. ΠΡΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π²Ρ, Π½ΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
ΠΡΠ»ΠΈ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π²ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΌΡΠ²Π°ΡΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΡΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΠΌΠ°Π»ΠΎ, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π±ΡΡΡΡΡΠΌΠΈ ΠΈ Π»Π΅Π³ΠΊΠΈΠΌΠΈ. ΠΠΎΠΌΠ½ΠΈΡΠ΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ΄ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΠ½ΠΎΠ²Π° ΠΈ Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΠΏΠΎΠΌΠΎΡΡ.
SOLID Β«LΒ»: ΠΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΠ°ΡΠ±Π°ΡΡ ΠΠΈΡΠΊΠΎΠ² (Liskov substitution principle, LSP)
ΠΠΎΠ΄ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±ΡΠ»Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΠΠ°ΡΠ±Π°ΡΠΎΠΉ ΠΠΈΡΠΊΠΎΠ² Π² Π΅Π΅ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ 1987 Π³ΠΎΠ΄Π°, Π° ΡΠΏΡΡΡΡ 7 Π»Π΅Ρ β ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² ΡΠΎΠ°Π²ΡΠΎΡΡΡΠ²Π΅ Ρ ΠΠΆΠ°Π½Π½Π΅Ρ ΠΠΈΠ½. ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΠ°ΡΠ±Π°ΡΠΎΠΉ, ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
Β«Π ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ q(x) β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, Π²Π΅ΡΠ½ΠΎΠ΅ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Ρ Π½Π΅ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° T, ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ q(y) ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΠ½ΡΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² y, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠΈΠΏΡ S, ΠΏΡΠΈ ΡΡΠΎΠΌ S β ΠΏΠΎΠ΄ΡΠΈΠΏ Π½Π΅ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° T.Β»
ΠΠ΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠΏΡΡΡΡ, ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π ΠΎΠ±Π΅ΡΡΠΎΠΌ Π‘. ΠΠ°ΡΡΠΈΠ½ΠΎΠΌ Π²ΡΠ΅ΠΉ ΠΏΡΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² SOLID Π² ΠΊΠ½ΠΈΠ³Π΅ ΠΎ Π±ΡΡΡΡΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π° Π·Π°ΡΠ΅ΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎ Π±ΡΡΡΡΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ C#, ΠΏΡΠΈΠ½ΡΠΈΠΏΒ ΡΡΠ°Π» Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΠ°ΡΠ±Π°ΡΡ ΠΠΈΡΠΊΠΎΠ².
ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π½Π°Ρ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π°Π» ΡΠ°ΠΌ Π ΠΎΠ±Π΅ΡΡ Π‘. ΠΠ°ΡΡΠΈΠ½:
ΠΠΎΠ΄ΡΠΈΠΏΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ.
ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°Π·ΡΡΡΠ½ΠΈΡΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½Π΅ Π½Π°ΡΡΡΠ°Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
ΠΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ Vehicle
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ Π² ΡΠΎΠΌ
ΡΠΈΡΠ»Π΅, ΠΈ Π΄Π²Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
<?php
class Vehicle
{
public function startEngine()
{
// Default engine start public functionality
}
public function accelerate()
{
// Default acceleration public functionality
}
}
class Car extends Vehicle
{
public function startEngine()
{
$this->engageIgnition();
parent::startEngine();
}
private function engageIgnition()
{
// Ignition procedure
}
}
class ElectricBus extends Vehicle
{
public function accelerate()
{
$this->increaseVoltage();
$this->connectIndividualEngines();
}
private function increaseVoltage()
{
// Electric logic
}
private function connectIndividualEngines()
{
// Connection logic
}
}
ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ
,
Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Vehicle
.
<?php
class Driver
{
public function go(Vehicle $v)
{
$v->startEngine();
$v->accelerate();
}
}
Π ΡΡΠΎ ΡΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π½Π°Ρ ΠΊ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΠΈ Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ.
ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΎΠΏΡΡΠ΅ Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΠ°ΡΠ±Π°ΡΡ ΠΠΈΡΠΊΠΎΠ² ΡΠΈΠ»ΡΠ½ΠΎ Ρ Π½ΠΈΠΌ ΡΠ²ΡΠ·Π°Π½. Π Π² ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π» Π ΠΎΠ±Π΅ΡΡ ΠΠ°ΡΡΠΈΠ½, Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° LSP β ΡΡΠΎ ΡΠΊΡΡΡΠΎΠ΅ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° OCP. Π¨Π°Π±Π»ΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ OCP.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½Π΅Π΅ ΠΈ Π½Π°Π³Π»ΡΠ΄Π½Π΅Π΅, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
<?php
class Rectangle
{
private $topLeft;
private $width;
private $height;
public function setHeight($height)
{
$this->height = $height;
}
public function getHeight()
{
return $this->height;
}
public function setWidth($width)
{
$this->width = $width;
}
public function getWidth()
{
return $this->width;
}
}
ΠΡ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΌΡ β ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° (Rectangle). ΠΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ΅ΡΡΠ΅ΡΠ°ΠΌΠΈ ΠΈ Π³Π΅ΡΡΠ΅ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠΈΡΠΈΠ½Ρ (width) ΠΈ Π²ΡΡΠΎΡΡ (height). ΠΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΡΠΈΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°Ρ, ΡΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, Π² Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ, ΠΊΠ²Π°Π΄ΡΠ°Ρ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠΎΡΠΌ
ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. ΠΠΎΡΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ Square
,
ΡΠ°ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ Rectangle
. ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ β
ΡΡΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ, Π° ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π΅ Π½Π°ΡΡΡΠ°Π΅ΡΡΡ.
ΠΠΎ Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΊΠ²Π°Π΄ΡΠ°Ρ Square
ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠΌ Rectangle
ΡΠΆΠ΅ Π²
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ?
<?php
class Square extends Rectangle
{
public public function setHeight($value)
{
$this->width = $value;
$this->height = $value;
}
public public function setWidth($value)
{
$this->width = $value;
$this->height = $value;
}
}
ΠΠ²Π°Π΄ΡΠ°Ρ β ΡΡΠΎ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΈ Π²ΡΡΠΎΡΠΎΠΉ, Π° Π·Π½Π°ΡΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ Π±ΡΠ»Π° Π±Ρ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ. ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΡΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΈΡΠΈΠ½Π° ΠΈ Π²ΡΡΠΎΡΡ. ΠΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ΄?
<?php
class Client
{
public function areaVerifier(Rectangle $rect)
{
$rect->setWidth(5);
$rect->setHeight(4);
if($rect->area() != 20) {
throw new Exception('Bad area!');
}
return true;
}
}
Π Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠ»ΠΎΡΠ°Π΄Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΠΈ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ, Π΅ΡΠ»ΠΈ Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ.
public function area()
{
return $this->width * $this->height;
}
ΠΡ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° Rectangle
.
<?php
class LspTest extends PHPUnit_Framework_TestCase
{
public function testRectangleArea()
{
$rect = new Rectangle();
$client = new Client();
$this->assertTrue($client->areaVerifier($rect));
}
}
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ: ΠΎΡΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΡΡΠΎΠΉ
ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΏΠ»ΠΎΡΠ°Π΄ΠΈ. Π Π°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠ»ΠΈ Π½Π°Ρ
ΠΊΠ»Π°ΡΡ Square
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΡΠΎ Π΅Π³ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ
areaVerifier()
Π½Π΅ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Π²
ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ Square
β ΡΡΠΎ Π²ΡΠ΅ ΡΠΎΡ ΠΆΠ΅ Rectangle
. ΠΠΎ Π½Π°Ρ Π»ΠΈ
ΡΡΠΎ ΠΊΠ»Π°ΡΡ?
public function testSquareArea()
{
$rect = new Square();
$client = new Client();
$this->assertTrue($client->areaVerifier($rect));
}
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π»Π΅Π³ΠΊΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ. Π ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΡΠ° Π²ΡΡΠ΅.
PHPUnit 3.7.28 by Sebastian Bergmann.
Exception : Bad area!
#0 /paht/: /.../.../LspTest.php(18): Client->areaVerifier(Object(Square))
#1 [internal public function]: LspTest->testSquareArea()
ΠΡΠ°ΠΊ, Π² Π½Π°ΡΠ΅ΠΌ Β«ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌΒ» ΡΠΌΡΡΠ»Π΅ Square
ΠΊΠ»Π°ΡΡ - ΡΡΠΎ Π½Π΅ Rectangle
,
ΠΈΠ½Π°ΡΠ΅ Π±Ρ Π·Π°ΠΊΠΎΠ½Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ ΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΠ°ΡΠ±Π°ΡΡ ΠΠΈΡΠΊΠΎΠ²
Π½Π°ΡΡΡΠ°Π»ΠΈΡΡ.
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ ΠΎΡΠΎΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΈ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ LSP, ΠΈ ΡΠΎ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π΄Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠ΅ΠΉ Π½Π°Π΄ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ. Π Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎ Ρ Π½Π°Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ.
SOLID Β«IΒ»: ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (interface segregation principle, ISP)
Π‘ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° β Π² Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌ
ΠΎΠ±ΡΠ΅Π½ΠΈΠΈ. ΠΠΎ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΌ
ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ,
ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΉ Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠΎΠ΄Π΅ Facades
. ΠΠ΅ Π²Π°ΠΆΠ½ΠΎ,
ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. Π‘ΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠΎΠΉ ΠΆΠ΅: ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ
ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌΡ ΠΊΠΎΠ΄Ρ ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΌΠΎΠ³ΡΡ
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΠΈΠ»ΠΈ
ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠΎΡΠΎΠ½Π½Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ»ΡΠΆΠ°ΡΠ΅ΠΉ Π΄Π»Ρ
ΠΏΠΎΠ΄Π°ΡΠΈ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π₯ΠΎΡΠΎΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π° ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π½Π°ΡΠ°Π»ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ:
- Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡ
Car
ΠΈΠ»ΠΈBus
ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Vehicle
. ΠΠ΄Π½ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΡΠ΅Π½ΠΎΠΉ; - ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π²ΡΠΎΠ΄Π΅
LightsControl
,SpeedControl
ΠΈΠ»ΠΈRadioCD
ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π²Π΅ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΡ ΠΈΠΌΠΈ ΡΠ°ΡΡΠ΅ΠΉ;
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π°ΡΠ΅ΠΉ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ.
ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄: ΡΠ°Π·Π±ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° ΠΊΡΡΠΊΠΈ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΉΠΌΠ΅ΡΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΠ»Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² β ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ. ΠΠ±ΡΠ΅ΠΊΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΏ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ°ΡΠΈΠ½Ρ (car) Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π²ΡΡΠ΅.
ΠΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°ΡΠ΅ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΠ΅ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Car
ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. Π ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΒ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΆΠ΅ ΡΠ΅ΡΠ΅Π½Π°, Π° Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ° β
ΡΡΠ°Π±ΠΈΠ»ΡΠ½Π°. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΈ ΠΏΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ BusStation
, HighWay
, Driver
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²ΡΠ΅,
ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π·Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² (ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΡΡ Π² ΡΡΠ°ΡΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
).
ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ, ΡΡΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
ΠΠΎ Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π²ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π²ΡΠ΅Ρ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π Π°Π·Π²Π΅
BusStation
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΠ°Π΄ΠΈΠΎΡΡΠ°Π½ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ±ΡΠ°Π» Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΈΠ»ΠΈ
ΠΎΡ ΡΠ°Ρ Π°Π²ΡΠΎΠ±ΡΡΠ°? ΠΠ΅Ρ. ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊ ΠΎΠ½ΠΎ ΠΈ Π±ΡΠ΄Π΅Ρ? ΠΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ
ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ. ΠΡΠ»ΠΈ BusStation
Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ
(ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
), ΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π΅ΡΠ»ΠΈ
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ. Π’Π°ΠΊΠΎΠ³ΠΎ Π±ΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ, Π° Π½Π΅ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡ Π½ΡΠΆΠ½ΠΎ Π² Π»ΡΡΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·Π±ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½Π° ΠΊΡΡΠΎΡΠΊΠΈ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π»ΡΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π΄ΡΠ±Π»ΡΠΆΠΈ, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ β ΡΡΠΎ ΠΏΡΠΎΡΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° Π² Π½ΠΈΡ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ, Π° Π·Π½Π°ΡΠΈΡ, ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
ΠΠ΄Π΅ΡΡ Π΅ΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΈΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ , ΠΈ ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π²ΠΈΡΡΡ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΡΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π½Π°ΡΠ΅ΠΉ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², Π΅ΡΠ»ΠΈ Π΅ΠΌΡ ΡΡΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ. Π’Π°ΠΊ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΅Π΄ΠΈΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ Π½Π°Ρ Π΄ΡΠΌΠ°ΡΡ ΠΎ Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π±ΠΎΠ»ΡΡΠ΅ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΡΡΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π½Π°Ρ ΠΊ ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π’Π°ΠΊ ΡΡΠΎ ΠΌΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π½Π°Ρ ΠΊΠΎΠ΄ Π»ΡΡΡΠ΅ Π΄Π»Ρ Π½Π°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ Π΄Π»Ρ ΡΠ΅Π±Ρ, ΡΡΠΎΠ±Ρ Π»Π΅Π³ΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ.
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΠ°ΡΠ±Π°ΡΡ ΠΠΈΡΠΊΠΎΠ²Β Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅Π»ΡΠ·Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΡΡΠΈΡ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ± ΠΏΠΎΠ΄ΡΠΈΠΏΡ Ρ ΠΎΡΠΎΡΠΎ ΡΠΆΠΈΠ²Π°Π»ΠΈΡΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ SOLID ΠΈ ΠΏΡΠΎΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΡΠΈΡ Π½Π°Ρ ΡΠ²Π°ΠΆΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π΅ΡΠ΅ ΡΠΈΠ»ΡΠ½Π΅Π΅, ΡΠ΅ΠΌ ΠΌΡ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΈ ΡΠ°Π½ΡΡΠ΅. ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ ΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π°Ρ ΠΊΠΎΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅, Π° Π½Π°ΡΡ ΡΠ°Π±ΠΎΡΡ β ΠΏΡΠΎΡΠ΅ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅.
SOLID Β«DΒ»: ΠΡΠΈΠ½ΡΠΈΠΏ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (dependency inversion principle, DIP)
ΠΡΠΈΠ½ΡΠΈΠΏΒ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ,Β ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ,Β ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ,Β ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²Β ΠΈ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ β ΠΏΡΡΠ΅ΡΠΊΠ° ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°.
Π₯ΠΎΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΏΡΠ΅ΠΎΠ±Π»Π°Π΄Π°ΡΡΠ΅ΠΉ Π²Π°ΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² Π±ΡΠ΄Π΅Ρ Π½Π΅ Π²Π΅ΡΠ½ΠΎ, Π½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π½Π° ΠΊΠΎΠ΄ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΡΡΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠ½ΠΈΡΠ΅ Ρ ΡΡΠΎΠ³ΠΎ, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠΉΡΠ΅ ΡΠΆΠ΅ ΠΊ ΠΊΠΎΠ΄Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ DIP
- ΠΠΎΠ΄ΡΠ»ΠΈ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ±Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ.
- ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ. ΠΠ΅ΡΠ°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ.
ΠΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π²ΡΠ΄Π΅Π»ΠΈΠ» Π ΠΎΠ±Π΅ΡΡ Π‘. ΠΠ°ΡΡΠΈΠ½ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΎ Π±ΡΡΡΡΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΈΠ·Π΄Π°Π» Π² Π²Π΅ΡΡΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° C#. ΠΡΠΈΠ½ΡΠΈΠΏ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ - ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΈΠ· ΠΏΡΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² SOLID.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΡΠ΅ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ, Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π½Π΅ ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΠ΅ ΡΡΠ΄ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² SOLID, Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ Π²Π°ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΠΉΡΠΈ Π²ΡΠ΅ 7 ΠΊΡΡΠ³ΠΎΠ² Π°Π΄Π°, ΠΎΡΡΡΠΈΡΡ Π²ΡΠ΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΎΠΏΡΡΠ΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΡΡΠ°Π½Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΈΠΌ.
ΠΡΠΈΠ½ΡΠΈΠΏΡ SOLID - ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π ΠΎΠ±Π΅ΡΡΠ° Π‘. ΠΠ°ΡΡΠΈΠ½Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ³ΡΡ, Π²Π΅ΡΡ Ρ ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΠΌ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ DIP, ΠΈ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΠΏΠΎΠ²Π»ΠΈΡΠ»ΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²Π΅Π±-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: HTML
,
PHP
ΠΈ SQL
. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΡ
Π³ΠΎΠ²ΠΎΡΠΈΠΌ, ΠΈΠ»ΠΈ ΡΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ SQL
Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ β Π²ΡΠ΅ ΡΡΠΎ Π½Π΅
ΠΈΠΌΠ΅Π΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ
ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· HTML
ΡΠΎΡΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
. ΠΡΡΠ°Π»ΡΠ½ΠΎΠ΅
ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡ Π ΠΠ
.
ΠΠ· ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΡΠ½ΠΈΡΡ ΠΎΠ΄Π½Ρ Π²Π°ΠΆΠ½ΡΡ Π²Π΅ΡΡ - Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ±, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΈ ΡΡΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΡ ΡΠ»ΠΎΡ:
- ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ,
- Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ,
- Π΄ΠΎΠ»Π³ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ .
Π‘ΠΊΠΎΡΠΎ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΡΡΠΈΡ ΡΠ»ΠΎΡΡ . Π ΡΠ΅ΠΉΡΠ°Ρ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ°Π½Π½ΡΡ , Π½ΠΎ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΠΈΡ ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡΡ , ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅.
ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ SQL
ΠΊΠΎΠ΄ Π² ΡΠ΅Π³Π°Ρ
PHP
Π²Π½ΡΡΡΠΈ
HTML
-ΡΠ°ΠΉΠ»Π°. ΠΠ»ΠΈ PHP
-ΠΊΠΎΠ΄ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΠΈ ΡΡΡΠ°Π½ΠΈΡΡ HTML
, ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ
ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ $_GET
ΠΈΠ»ΠΈ $_POST
. ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ,
Π²ΡΠ΅ Ρ
ΠΎΡΠΎΡΠΎ. ΠΠΎ Π²Β ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΎΠ³Π΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°?
ΠΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π²ΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ ΠΎΠΏΠΈΡΡΠ²Π°Π»ΠΈ Π²
ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ Π°Π±Π·Π°ΡΠ΅. Π‘ΡΡΠ΅Π»ΠΊΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΈ ΠΌΡ
ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ Π²ΡΠ΅ Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° Π²ΡΠ΅ΠΌ, Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²ΡΠ΅Π³ΠΎ.
ΠΡΠ»ΠΈ Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ
ΠΈΡΠΎΠ³Π΅, ΠΌΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ HTML
-ΡΠ°ΠΉΠ»Π°. ΠΠ»ΠΈ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅
Π² HTML
, ΡΠΎ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠ»Π±ΡΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ SQL
. ΠΠ»ΠΈ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ
ΠΈΠ· Π²ΡΠΎΡΠΎΠΉ ΡΡ
Π΅ΠΌΡ, Π½Π°ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°Ρ PHP
,
Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ HTML
. Π Π² Ρ
ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π²Π΅ΡΡ
HTML
-ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΈΠ· PHP
-ΡΠ°ΠΉΠ»Π°, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΡ PHP
, ΡΡΠΎΠ±Ρ
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ HTML
-ΠΊΠΎΠ½ΡΠ΅Π½Ρ. ΠΠΎΡΡΠΎΠΌΡ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΡΠΎΠΌΠ½Π΅Π½ΠΈΠΉ Π² ΡΠΎΠΌ, ΡΡΠΎ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΠΎ Π»Π°Π²ΠΈΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°ΡΠΈΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ. ΠΠΎ Π½Π° ΡΡΠΎΠΌ
Π²ΡΠ΅ Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ Π½Π° PHP
Π²
ΡΠ°Π±Π»ΠΈΡΠ°Ρ
SQL
.
ΠΠ° ΡΡ
Π΅ΠΌΠ΅ Π²ΡΡΠ΅ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π·Π°ΠΏΡΠΎΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
SQL
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ PHP
-ΠΊΠΎΠ΄,
ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡ. ΠΡΠΈ PHP
-Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΡ
ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ SQL
-Π·Π°ΠΏΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΆΠ΅ Π΄ΡΡΠ³ΠΎΠΉ PHP
-ΠΊΠΎΠ΄. ΠΡΠΎΡ
ΡΠΈΠΊΠ» Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ
ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π°, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
ΠΠ½ΠΎΠ³ΠΈΠΌ ΡΡΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΡΡΡΡ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΠΎ ΡΡΠΎΠΌΡ ΡΡΠ΅Π½Π°ΡΠΈΡ, ΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Ρ ΡΡΠΈΠΌ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π±ΡΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌΠΈ ΡΡΠ°ΡΠΎΠΉ Π·Π°ΠΊΠ°Π»ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ»ΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π»ΡΡΡΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΠΉΡΠ°Ρ ΡΠΈΡΠ°Π΅ΡΠ΅ ΡΡΠΎΡ ΠΌΠ°Π½ΡΠ°Π» ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π·Π½Π°ΡΠΈΡ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π²Ρ ΡΠ²Π°ΠΆΠ°Π΅ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ ΡΠ²Π°ΠΆΠ°ΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡ, Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΡΠ²ΠΎΠ΅ ΡΠ΅ΠΌΠ΅ΡΠ»ΠΎ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π»ΡΡΡΠ΅.
ΠΡΠ΅ ΠΎΠ΄Π½Π° Π²Π΅ΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π½Π°ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , ΡΠ΄Π΅Π»Π°Π½Π½ΡΡ Π½Π°ΡΠΈΠΌΠΈ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠ°ΠΌΠΈ, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌΠΈ ΠΎΡ Π½ΠΈΡ . Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ, Π² ΠΈΡΠΎΠ³Π΅, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ·-Π·Π° ΠΈΡ ΡΡΠ°ΡΠΎΠΉ ΠΈ ΠΊΡΠΎΡΡ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. Π ΠΈΡΠΎΠ³Π΅, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π°Π²ΡΠ΅Π³Π΄Π°, ΠΈ ΡΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ½ΠΎΠ²Π°. ΠΠΎΡΡΠΎΠΌΡ ΡΡΡΠ΅ΠΌΠΈΡΠ΅ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠΈΡΡΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌ SOLID, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π° Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
Π ΡΡΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ²:
- ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², Π²Π΅Π±-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ
MVC
) ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π°, Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ β ΡΠ°ΠΌΠΎ Π²ΠΎΠΏΠ»ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠΊΠΈ. ΠΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ΄Π½Ρ ΠΈΠ· Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΈ ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅, ΠΎΡΠ΅Π½Ρ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ. ΠΠΈΡΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π½ΠΈΡΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π²Π΅Π±-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°MVC
; - Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅, ΡΠ΄Π΅Π»Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ, Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ
Π΄ΠΎΠ»Π³ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅, Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
, Π½Π°Ρ
MySQL
ΠΈΠ»ΠΈPostgreSQL
Π±Π°Π·ΠΈΡΡΡΡΡΡ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ΅. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΌ. ΠΡΠ»ΠΈ Π·Π°Π²ΡΡΠ° Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡMySQL
Π²ΠΌΠ΅ΡΡΠ΅ ΡPostgreSQL
ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΌΡ Π»Π΅Π³ΠΊΠΎ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠ°ΠΌ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π½ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° Π² Π½Π°ΡΠ΅ΠΉ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ΅; - Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ Π½Π°ΡΠ΅ΠΉ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ, Π²Π½Π΅ Π΅Π΅, Ρ Π½Π°Ρ Π΅ΡΡΡ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΊΠ°ΠΊ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° Π² Π½Π°ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π»ΡΠ΄ΠΈ ΡΠΊΠ»ΠΎΠ½Π½Ρ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΊ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ΅, Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΎΠ½ΠΈ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠ½ΠΈ β ΠΏΡΠΎΡΡΠΎ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ. ΠΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ, Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π½ΠΈΡ . ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ. ΠΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ, ΠΎΠ½ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ.
Π‘ΠΎΠ±Π»ΡΠ΄Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (DIP) Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΠ΅ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ Π²Π½ΡΡΡΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ, Π° ΠΌΠ΅ΡΡΠ°ΠΌΠΈ - Π΄Π°ΠΆΠ΅ Π²Π΅ΡΠ΅Π»ΠΎ. ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΠΊΠ½ΠΈΠ³.
<?php
class Test extends PHPUnit_Framework_TestCase
{
public function testItCanReadAPDFBook()
{
$book = new PDFBook();
$reader = new PDFReader($book);
$this->assertRegExp('/pdf book/', $reader->read());
}
}
class PDFReader
{
private $book;
public function __construct(PDFBook $book)
{
$this->book = $book;
}
public function read()
{
return $this->book->read();
}
}
class PDFBook
{
public function read()
{
return "reading a pdf book.";
}
}
ΠΡ Π½Π°ΡΠ°Π»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΠ°Π»ΠΊΠΈ ΠΊΠ°ΠΊ ΡΠΈΡΠ°Π»ΠΊΠΈ PDF
. ΠΠΎΠΊΠ° Π½Π΅
Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ PDFReader
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
PDFBook
. Π€ΡΠ½ΠΊΡΠΈΡ read()
Π² ΡΠΈΡΠ°Π»ΠΊΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ read()
. Π ΡΡΠΎΠΌ ΠΌΡ
ΡΠ±Π΅Π΄ΠΈΠΌΡΡ ΠΏΡΡΠ΅ΠΌ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ PDFBook's reader().
ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΡ Π½Π΅ ΡΡΠ°Π½Π΅ΠΌ
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΡΠ΅Π½ΠΈΡ PDF
-ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π»ΡΠ±ΡΡ
Π΄ΡΡΠ³ΠΈΡ
ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ°ΡΠΈ ΡΠ΅ΡΡΡ β ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π±Π°Π·ΠΎΠ²ΡΡ
ΡΡΡΠΎΠΊΠ°Ρ
. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΏΠΈΡΠ°Π»ΠΈ
Π½Π°ΡΡΠΎΡΡΠ΅Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ°Π·Π½ΠΈΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π±Ρ Π² ΡΠΏΠΎΡΠΎΠ±Π΅
ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ
ΡΠΎΡΠΌΠ°ΡΠΎΠ². Π‘ΡΡΡΠΊΡΡΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΡΠ»Π° Π±Ρ
ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠ° Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΠ°Π»ΠΊΠΈ ΡΠΎΡΠΌΠ°ΡΠ° PDF
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ½ΠΈΠ³Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅
PDF
, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ Π·Π΄ΡΠ°Π²ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΡΠ΄Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ
ΡΠ»ΡΡΠ°Π΅Π².
ΠΡΠ»ΠΈ Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ°Π»ΠΊΡ
ΡΠΎΡΠΌΠ°ΡΠ° PDF
, ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π·Π°Π΄Π°ΡΠ΅. ΠΠΎ ΠΌΡ
Ρ
ΠΎΡΠ΅Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΠ°Π»ΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° Π±Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ
ΡΠ°Π·Π½ΡΡ
ΡΠΎΡΠΌΠ°ΡΠΎΠ², Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΈ ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ PDF
-Π²Π΅ΡΡΠΈΡ.
ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΠ°Π»ΠΊΠΈ.
<?php
class Test extends PHPUnit_Framework_TestCase
{
public function testItCanReadAPDFBook()
{
$b = new PDFBook();
$r = new EBookReader($b);
$this->assertRegExp('/pdf book/', $r->read());
}
}
class EBookReader
{
private $book;
public function __construct(PDFBook $book)
{
$this->book = $book;
}
public function read()
{
return $this->book->read();
}
}
class PDFBook
{
public function read()
{
return "reading a pdf book.";
}
}
ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π΄Π°Π»ΠΎ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ². Π’Π΅ΡΡ ΠΏΡΠΎΠΉΠ΄Π΅Π½ Π½Π° Β«ΠΎΡΠ»ΠΈΡΠ½ΠΎΒ».
Testing started at 1:04 PM ...
PHPUnit 3.7.28
Time: 13 ms, Memory: 2.50Mb
OK (1 test, 1 assertion)
Process finished with exit code 0
ΠΠ°ΡΠ° ΡΠΈΡΠ°Π»ΠΊΠ° ΡΠΆΠ΅ ΡΡΠ°Π»Π° Π³ΠΎΡΠ°Π·Π΄ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π΅Π΅. ΠΠ°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½Π΅Π΅.
Π‘Π΅ΠΉΡΠ°Ρ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ EBookReader
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ
Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΊΠ½ΠΈΠ³ β PDFBook
. ΠΠ°ΡΠ° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ
Π΄Π΅ΡΠ°Π»Π΅ΠΉ. Π’ΠΎ, ΡΡΠΎ Π½Π°ΡΠ° ΠΊΠ½ΠΈΠ³Π° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ PDF
β Π²ΡΠ΅ Π»ΠΈΡΡ Π΄Π΅ΡΠ°Π»Ρ,
ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Π²ΠΈΡΠ΅ΡΡ.
<?php
class Test extends PHPUnit_Framework_TestCase
{
public function testItCanReadAPDFBook()
{
$book = new PDFBook();
$reader = new EBookReader($book);
$this->assertRegExp('/pdf book/', $reader->read());
}
}
interface EBook
{
public function read();
}
class EBookReader
{
private $book;
public function __construct(EBook $book)
{
$this->book = $book;
}
public function read()
{
return $this->book->read();
}
}
class PDFBook implements EBook
{
public function read()
{
return "reading a pdf book.";
}
}
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ ΠΈ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² ΠΠΠ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡ DIP.
ΠΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΠ°Π»ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·Π²Π°Π»ΠΈ EBookReader
, ΠΈ
ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π²ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ EBook
. ΠΡΠΎ β ΠΏΡΡΠΌΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΈΠ΄Π΅Π΅,
ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°ΠΆΠ°ΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°ΠΆΠ°ΡΡ ΡΠΈΠΏΡ ΠΈ
ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ
ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Ρ
ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠ»Ρ EBookReader
Π²ΠΏΠΎΠ»Π½Π΅
Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ EBook
ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ read()
.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Ρ Π½Π°Ρ ΠΈΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄Π²Π΅.
- ΠΠ΅ΡΠ²Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΡ
EBookReader
ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡEBook
ΠΈ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΏ.EBookReader
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡEBook
. - ΠΡΠΎΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΎΠ΄Π°. ΠΠ½Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΡ
PDFBook
ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡEBook
, Π½ΠΎ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΏ.PDFBook
β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΎΠ±Π°Ρ ΡΠΎΡΠΌΠ°EBook
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².
ΠΠ΅ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π²Π΅Π΄Ρ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π² Π½Π°ΡΠ΅ΠΉ
ΡΠΈΡΠ°Π»ΠΊΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ
ΠΊΠ½ΠΈΠ³. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΡΠΈΡ
ΠΊΠ½ΠΈΠ³ β ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ EBook
ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ
Π΅Π³ΠΎ.
<?php
class Test extends PHPUnit_Framework_TestCase
{
public function testItCanReadAPDFBook()
{
$book = new PDFBook();
$reader = new EBookReader($book);
$this->assertRegExp('/pdf book/', $reader->read());
}
public function testItCanReadAMobiBook()
{
$book = new MobiBook();
$reader = new EBookReader($book);
$this->assertRegExp('/mobi book/', $reader->read());
}
}
interface EBook
{
public function read();
}
class EBookReader
{
private $book;
public function __construct(EBook $book)
{
$this->book = $book;
}
public function read()
{
return $this->book->read();
}
}
class PDFBook implements EBook
{
public function read()
{
return "reading a pdf book.";
}
}
class MobiBook implements EBook
{
public function read()
{
return "reading a mobi book.";
}
}
ΠΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π½Π°Ρ ΠΊ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΠΊΡΡΡΠΎΡΡΠΈ-Π·Π°ΠΊΡΡΡΠΎΡΡΠΈ, ΠΈ ΠΊΡΡΠ³ Π·Π°ΠΌΡΠΊΠ°Π΅ΡΡΡ. ΠΡΠΈΠ½ΡΠΈΠΏ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΌ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΈΠ· ΠΏΡΡΠ΅ΡΠΊΠΈ SOLID. Π‘ΠΎΠ±Π»ΡΠ΄Π°Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ DIP, ΠΌΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡ OCP, ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΈΠΏΡ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
ΠΡ, Π²ΠΎΡ ΠΈ Π²ΡΠ΅, ΠΌΡ Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈ Π²ΡΠ΅ ΠΌΠ°Π½ΡΠ°Π»Ρ ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ SOLID. ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²Π°ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ± Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ΅ΠΌΠΈΡΡΡΡ Π΄Π΅Π»Π°ΡΡ Π½Π°Ρ ΠΊΠΎΠ΄ Π»ΡΡΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΠΏΡΡΠ΅ΡΠΊΡ.
Π ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΡΠ΅ΡΠΊΠ° ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² SOLID β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΡΡΠ΅ΡΠΆΠ½Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π»ΡΡΡΠ΅, Π° ΠΆΠΈΠ·Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² - ΠΏΡΠΎΡΠ΅.