
ΠΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°: ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π·Π° Π²Π°Ρ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ SOLID Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΊΠ°ΠΊΡΠΎ Π½Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΠΈ, ΡΠ°ΠΊΠ° ΠΈ Π½Π° ΠΎΠΏΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ.
ΠΠΊΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΡΠ΅ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΡΠ΅ ΡΡΠ»ΠΈ Π·Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ SOLID. Π’Π΅ Π΄Π°Π²Π°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈΡΠ΅ Π΄Π° ΠΏΠΈΡΠ°Ρ ΡΠΈΡΡ, Π΄ΠΎΠ±ΡΠ΅ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ ΠΈ Π»Π΅ΡΠ½ΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π΅ΠΌ ΠΊΠΎΠ΄. Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π΄Π°Π΄Π΅Π½Π° ΡΠ°Π±ΠΎΡΠ°. Π Π°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈ ΠΈΠΌΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ΄Π΅ΠΈ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π½ΠΈΡ Π·Π° 'ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ ΠΏΡΡ', Π²ΡΠΈΡΠΊΠΎ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΎΠΏΠΈΡΠ° Π½Π° Π²ΡΠ΅ΠΊΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠ΄Π΅ΠΈΡΠ΅, ΠΏΡΠΎΠ²ΡΠ·Π³Π»Π°ΡΠ΅Π½ΠΈ Π² SOLID, ΡΠ° ΠΏΡΠΈΠ΅ΡΠΈ ΠΏΠΎΡΡΠΈ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»ΠΈ Π½Π° ΠΠ’-ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°. Π’Π΅ ΡΡΠ°Π½Π°Ρ Π° ΠΎΡΠΏΡΠ°Π²Π½Π° ΡΠΎΡΠΊΠ° Π·Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠ±ΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°.
ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ SOLID ΠΈ ΠΊΠ°ΠΊ ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠ°Π³Π°Ρ.
Skillbox ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°: ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΡΡΡ .
ΠΠ°ΠΏΠΎΠΌΠ½ΡΠΌΠ΅: Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ Π½Π° Β«Π₯Π°Π±ΡΠ°Β» β ΠΎΡΡΡΡΠΏΠΊΠ° ΠΎΡ 10 000 ΡΡΠ±Π»ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΡΡΡ Skillbox Ρ ΠΏΡΠΎΠΌΠΎΠΊΠΎΠ΄ Β«Π₯Π°Π±ΡΒ».
ΠΠ°ΠΊΠ²ΠΎ Π΅ SOLID?
Π’Π΅ΡΠΌΠΈΠ½ΡΡ Π΅ Π°Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΠ°, Π²ΡΡΠΊΠ° Π±ΡΠΊΠ²Π° ΠΎΡ ΡΠ΅ΡΠΌΠΈΠ½Π° Π΅ Π½Π°ΡΠ°Π»ΠΎ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΡΠΈΠ½ΡΠΈΠΏ:
- SΠΡΠΈΠ½ΡΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ. ΠΠΎΠ΄ΡΠ»ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° ΠΏΡΠΎΠΌΡΠ½Π°.
- ΠΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ Π·Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π·Π°ΡΠ²ΠΎΡΠ΅Π½ΠΈ Π·Π° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
- Π€ΡΠ½ΠΊΡΠΈΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π±Π°Π·ΠΎΠ² ΡΠΈΠΏ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠ²Π΅ Π½Π° Π±Π°Π·ΠΎΠ²ΠΈΡ ΡΠΈΠΏ, Π±Π΅Π· Π΄Π° Π·Π½Π°ΡΡ Π·Π° ΡΠΎΠ²Π°.
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.
- ΠΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π½Π° ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΈ Π½ΠΈΠ²Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π½Π° ΠΏΠΎ-Π½ΠΈΡΠΊΠΈ Π½ΠΈΠ²Π°.
ΠΡΠΈΠ½ΡΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ
β
ΠΡΠΈΠ½ΡΠΈΠΏ Π½Π° Π΅Π΄ΠΈΠ½Π½Π°ΡΠ° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ (SRP) Π³Π»Π°ΡΠΈ, ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ ΠΊΠ»Π°Ρ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ» Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π½ΠΎΡΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ ΡΠ°ΠΌΠΎ Π·Π° Π΅Π΄Π½Π° ΡΠ°ΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΡΡΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΊΠ»Π°Ρ, Π° Π½Π΅ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΈ Π³Π»Π°Π²Π½ΠΈΡΡ Π΅Π²Π°Π½Π³Π΅Π»ΠΈΡΡ Π½Π° SRP, Π ΠΎΠ±ΡΡΡ Π‘. ΠΠ°ΡΡΠΈΠ½, ΠΎΠΏΠΈΡΠ²Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΡΠ° ΠΊΠ°ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° ΠΏΡΠΎΠΌΡΠ½Π°. ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΠΎΠΉ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈ ΡΠΎΠ·ΠΈ ΡΠ΅ΡΠΌΠΈΠ½ ΠΊΠ°ΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ Π² ΡΠ²ΠΎΡΡΠ° ΡΠ°Π±ΠΎΡΠ° "ΠΡΠΈΠ½ΡΠΈΠΏΠΈ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΎΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π΅". Π ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡΡΠ°, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΎΡ Π’ΠΎΠΌ ΠΠ΅ΠΌΠ°ΡΠΊΠΎ.
Π ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ, ΡΠΎΡΠΌΡΠ»ΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΠ΅ΠΉΠ²ΠΈΠ΄ ΠΠ°ΡΠ½Π°Ρ. ΠΠ²Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠ° ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»Π°ΡΠΈΡ ΠΈ ΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ°ΡΠ½Π°Ρ ΡΠ²ΡΡΠ΄Π΅ΡΠ΅, ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΡΠΈ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠ΅ΠΊΠΈ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ΄ΡΡΠΆΠ° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅.
ΠΠ°ΡΡΠΈΠ½ Π΄Π°Π΄Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Π²ΠΈΡΡΠΈΡΠ΅ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° (COO, CTO, CFO), Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ ΡΠΎΡΡΡΠ΅Ρ Π·Π° Π±ΠΈΠ·Π½Π΅ΡΠ° Ρ ΡΠ°Π·Π»ΠΈΡΠ½Π° ΡΠ΅Π». Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π½Π΅Π΄ΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠΎΡΡΡΠ΅ΡΠ°, Π±Π΅Π· Π΄Π° Π·Π°ΡΡΠ³Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠΈ.
ΠΠΎΠΆΠ΅ΡΡΠ²Π΅Π½ ΠΎΠ±Π΅ΠΊΡ
ΠΠ°ΠΊΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ Π½Π°ΡΡΠΈΡΠ΅ Π½Π° SRP Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΠ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π½Π° Π΅Π΄ΠΈΠ½Π½Π°ΡΠ° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ. Π’ΠΎΠ²Π° Π΅ Ruby ΠΊΠΎΠ΄, ΠΎΠΏΠΈΡΠ²Π°Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΡΠΌΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΡΠ°Π½ΡΠΈΡ.
ΠΡΠ΅Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈ ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
ΠΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΎΠ±ΡΠ²Π΅Π½ΠΈ Π² ΠΊΠ»Π°ΡΠ° SpaceStation.
Π’Π΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΡΠ²ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΊΡΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΊΠΎΡΠΌΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΡΠ°Π½ΡΠΈΡ.
ΠΊΠ»Π°Ρ SpaceStation
Π΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅
@ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ = {}
@Π³ΠΎΡΠΈΠ²ΠΎ = 0
ΠΊΡΠ°ΠΉ
Π΄Π΅Ρ ΡΠ°Π±ΠΎΡΠΈ_ΡΠ΅Π½Π·ΠΎΡΠΈ
ΠΏΠΎΡΡΠ°Π²ΠΈ "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠ΅Π½Π·ΠΎΡΠ° -----"
ΠΏΠΎΡΡΠ°Π²ΠΈ "ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌ ΡΠ΅Π½Π·ΠΎΡΠΈΡΠ΅!"
ΠΊΡΠ°ΠΉ
Π΄Π΅Ρ Π·Π°ΡΠ΅Π΄ΠΈ_ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅(ΡΠΈΠΏ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ)
ΠΏΠΎΡΡΠ°Π²ΠΈ "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ΡΠΎ -----"
ΠΏΠΎΡΡΠ°Π²ΠΈ "ΠΠ°ΡΠ΅ΠΆΠ΄Π°ΠΌ #{ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ ΠΎΡ #{ΡΠΈΠΏ} Π² ΡΠΊΠ»Π°Π΄Π° Π·Π° ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅."
Π°ΠΊΠΎ @ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅[ΡΠΈΠΏ]
@ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅[ΡΠΈΠΏ] += ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ
ΠΈΠ½Π°ΡΠ΅
@ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅[ΡΠΈΠΏ] = ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ
ΠΊΡΠ°ΠΉ
ΠΊΡΠ°ΠΉ
Π΄Π΅Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉ_ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅(ΡΠΈΠΏ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ)
ΠΏΠΎΡΡΠ°Π²ΠΈ "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ΡΠΎ -----"
Π°ΠΊΠΎ @ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅[ΡΠΈΠΏ] != nil && @ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅[ΡΠΈΠΏ] > ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ
ΠΏΠΎΡΡΠ°Π²ΠΈ "ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ #{ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ} ΠΎΡ #{ΡΠΈΠΏ} ΠΎΡ ΡΠΊΠ»Π°Π΄Π° Π·Π° ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅."
@ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅[ΡΠΈΠΏ] -= ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ
ΠΈΠ½Π°ΡΠ΅
ΠΏΠΎΡΡΠ°Π²ΠΈ "ΠΡΠ΅ΡΠΊΠ° Π² ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ΡΠΎ: ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ #{ΡΠΈΠΏ} Π² ΡΠΊΠ»Π°Π΄Π° Π·Π° ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅."
ΠΊΡΠ°ΠΉ
ΠΊΡΠ°ΠΉ
Π΄Π΅Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π°ΠΉ_ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅
ΠΏΠΎΡΡΠ°Π²ΠΈ "----- Π‘ΠΏΡΠ°Π²ΠΊΠ° Π·Π° ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ΡΠΎ -----"
Π°ΠΊΠΎ @ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅.ΠΊΠ»ΡΡΠΎΠ²Π΅.Π΄ΡΠ»ΠΆΠΈΠ½Π° > 0
@ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅.Π²ΡΡΠΊΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ |ΡΠΈΠΏ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ|
ΠΏΠΎΡΡΠ°Π²ΠΈ "#{ΡΠΈΠΏ} Π½Π°Π»ΠΈΡΠ½ΠΈ: #{ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ"
ΠΊΡΠ°ΠΉ
ΠΈΠ½Π°ΡΠ΅
ΠΏΠΎΡΡΠ°Π²ΠΈ "Π‘ΠΊΠ»Π°Π΄ΡΡ Π·Π° ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ Π΅ ΠΏΡΠ°Π·Π΅Π½."
ΠΊΡΠ°ΠΉ
ΠΊΡΠ°ΠΉ
Π΄Π΅Ρ Π·Π°ΡΠ΅Π΄ΠΈ_Π³ΠΎΡΠΈΠ²ΠΎ(ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ)
ΠΏΠΎΡΡΠ°Π²ΠΈ "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π·Π° Π³ΠΎΡΠΈΠ²ΠΎΡΠΎ -----"
ΠΏΠΎΡΡΠ°Π²ΠΈ "ΠΠ°ΡΠ΅ΠΆΠ΄Π°ΠΌ #{ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ Π³ΠΎΡΠΈΠ²ΠΎ Π² ΡΠ΅Π·Π΅ΡΠ²ΠΎΠ°ΡΠ°."
@Π³ΠΎΡΠΈΠ²ΠΎ += ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ
ΠΊΡΠ°ΠΉ
Π΄Π΅Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π°ΠΉ_Π³ΠΎΡΠΈΠ²ΠΎ
ΠΏΠΎΡΡΠ°Π²ΠΈ "----- Π‘ΠΏΡΠ°Π²ΠΊΠ° Π·Π° Π³ΠΎΡΠΈΠ²ΠΎΡΠΎ -----"
ΠΏΠΎΡΡΠ°Π²ΠΈ "#{@Π³ΠΎΡΠΈΠ²ΠΎ} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ Π³ΠΎΡΠΈΠ²ΠΎ Π½Π°Π»ΠΈΡΠ½ΠΈ."
ΠΊΡΠ°ΠΉ
Π΄Π΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉ_ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈΡΠ΅
ΠΏΠΎΡΡΠ°Π²ΠΈ "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈΡΠ΅ -----"
Π°ΠΊΠΎ @Π³ΠΎΡΠΈΠ²ΠΎ >= 10
ΠΏΠΎΡΡΠ°Π²ΠΈ "ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ»Π°ΡΠΊΠ°Π½Π΅ΡΠΎ Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ."
@Π³ΠΎΡΠΈΠ²ΠΎ -= 10
ΠΈΠ½Π°ΡΠ΅
ΠΏΠΎΡΡΠ°Π²ΠΈ "ΠΡΠ΅ΡΠΊΠ° Π½Π° ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈΡΠ΅: ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π³ΠΎΡΠΈΠ²ΠΎ Π½Π°Π»ΠΈΡΠ½ΠΎ."
ΠΊΡΠ°ΠΉ
ΠΊΡΠ°ΠΉ
ΠΊΡΠ°ΠΉΠΡΡΡΠ½ΠΎΡΡ, Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΡΠΌΠΈΡΠ΅ΡΠΊΠ° ΡΡΠ°Π½ΡΠΈΡ Π½Π΅ Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½Π° (Π½Π΅ ΠΌΠΈΡΠ»Ρ, ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ° ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ ΠΎΡ NASA Π² Π±Π»ΠΈΠ·ΠΊΠΎ ΠΎΠ±ΠΎΠ·ΡΠΈΠΌΠΎ Π±ΡΠ΄Π΅ΡΠ΅), Π½ΠΎ ΡΡΠΊ ΠΈΠΌΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅.
Π’Π°ΠΊΠ°, ΠΊΠ»Π°ΡΡΡ SpaceStation ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈ (ΠΈΠ»ΠΈ Π·Π°Π΄Π°ΡΠΈ). ΠΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎ ΡΠΈΠΏΠΎΠ²Π΅:
- ΡΠ΅Π½Π·ΠΎΡΠΈ;
- ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ (ΡΠ°Π·Ρ ΠΎΠ΄Π½ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ);
- Π³ΠΎΡΠΈΠ²ΠΎ;
- ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈ.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½ΠΈΠΊΠΎΠΉ ΠΎΡ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΡΡΠ°Π½ΡΠΈΡΡΠ° Π½Π΅ Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΠΊΠ»Π°ΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠΉ Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ. ΠΠ°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½Π°ΡΡΠ½ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΠ΅Π½Π·ΠΎΡΠΈΡΠ΅, Π»ΠΎΠ³ΠΈΡΡΠΈΠΊΡΡ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΡΠ½Π°Π±Π΄ΡΠ²Π°Π½Π΅ΡΠΎ Ρ ΡΠ΅ΡΡΡΡΠΈ, ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡΡ ΡΠ΅ Π³ΡΠΈΠΆΠΈ Π·Π° Π·Π°ΠΏΠ°ΡΠΈΡΠ΅ ΠΎΡ Π³ΠΎΡΠΈΠ²ΠΎ, Π° ΠΏΠΈΠ»ΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΡΠΈΠ»Π²Π°ΡΠ΅Π»ΠΈΡΠ΅.
ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΡΠ°Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° SRP? ΠΠ°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅. ΠΠΎ ΠΊΠ»Π°ΡΡΡ SpaceStation Π΅ ΡΠΈΠΏΠΈΡΠ΅Π½ "Π±ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½ ΠΎΠ±Π΅ΠΊΡ", ΠΊΠΎΠΉΡΠΎ Π·Π½Π°Π΅ Π²ΡΠΈΡΠΊΠΎ ΠΈ ΠΏΡΠ°Π²ΠΈ Π²ΡΠΈΡΠΊΠΎ. Π’ΠΎΠ²Π° Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ Π°Π½ΡΠΈΠΏΠ°ΡΠ΅ΡΠ½ Π² ΠΎΠ±Π΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅. ΠΠ° Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°ΠΊΠΈΠ²Π° ΠΎΠ±Π΅ΠΊΡΠΈ ΡΠ° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠ°, Π΄Π°, Π½ΠΎ ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΡΠΌΠΈΡΠ΅ΡΠΊΠ° ΡΡΠ°Π½ΡΠΈΡ ΡΠ΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΈ ΠΏΡΠ½ΠΊΡ ΠΈΠ»ΠΈ Π·Π°ΡΠ΅Π΄Π°ΡΠ΅Π»Π½Π° Π·Π°Π»Π°. Π ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΡΠ°ΡΡΠ΅ SpaceStation. Π ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ ΡΠ΅ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ Π΄ΡΡΠ³ΠΈΡΠ΅, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΡΠ΅Π»ΠΈΡ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΡΠ΅ ΡΡΠ°Π½Π΅ ΠΎΡΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½Π°. Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΡΡΡΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈΡΠ΅. ΠΠΊΠΎ Π½Π°ΡΡΠ½ΠΈΡΡ ΡΡΡΡΡΠ΄Π½ΠΈΠΊ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΡΡ ΡΠ΅Π½Π·ΠΎΡΠΈΡΠ΅, ΡΠΎΠ²Π° Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²Π»ΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° ΡΡΠ°Π½ΡΠΈΡΡΠ°.
ΠΠ°ΡΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° SRP ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π°Π΄Π΅ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½Π° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ° ΠΏΠΎΠ±Π΅Π΄Π°, Π½ΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ "Π·Π°Π³ΡΠ±ΠΈΠΌ Π²ΠΎΠΉΠ½Π°ΡΠ°"; ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΊΡΠ² ΠΌΠΎΠ½ΡΡΡΡ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΡΡΠ°Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π½ΠΎ. ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΡΠ°ΡΡΡΡΠΈ ΠΊΠΎΠ΄, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. Π Π°Π·Π±ΠΈΡΠ°ΠΉΠΊΠΈ ΡΠΎΠ²Π°, Π½Π΅ΠΊΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΠΊΠ»Π°ΡΠ° SpaceStation.
Π Π°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΠΌΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅
ΠΠΎ-Π³ΠΎΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ ΠΌΠ΅ ΡΠ΅ΡΠΈΡΠΈ ΡΠΈΠΏΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Ρ ΠΎΡ ΠΊΠ»Π°ΡΠ° SpaceStation. ΠΡΠΈ ΡΠ΅ΡΠ°ΠΊΡΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΡΠ΅ Π³ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄. ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° SRP.
ΠΊΠ»Π°Ρ SpaceStation
attr_reader :sensors, :supply_hold, :fuel_tank, :thrusters
def initialize
@supply_hold = SupplyHold.new
@sensors = Sensors.new
@fuel_tank = FuelTank.new
@thrusters = Thrusters.new(@fuel_tank)
end
end
ΠΊΠ»Π°Ρ Sensors
def run_sensors
puts "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠ΅Π½Π·ΠΎΡΠ° -----"
puts "Π‘Π΅Π½Π·ΠΎΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ!"
end
end
ΠΊΠ»Π°Ρ SupplyHold
attr_accessor :supplies
def initialize
@supplies = {}
end
def load_supplies(type, quantity)
puts "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Π·Π°ΠΏΠ°ΡΠΈΡΠ΅ -----"
puts "ΠΠ°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° #{quantity} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ ΠΎΡ #{type} Π² ΡΠ΅Π·Π΅ΡΠ²Π½Π°ΡΠ° ΡΠ°ΡΡ."
if @supplies[type]
@supplies[type] += quantity
else
@supplies[type] = quantity
end
end
def use_supplies(type, quantity)
puts "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Π·Π°ΠΏΠ°ΡΠΈΡΠ΅ -----"
if @supplies[type] != nil && @supplies[type] > quantity
puts "ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° #{quantity} ΠΎΡ #{type} ΠΎΡ ΡΠ΅Π·Π΅ΡΠ²Π½Π°ΡΠ° ΡΠ°ΡΡ."
@supplies[type] -= quantity
else
puts "ΠΡΠ΅ΡΠΊΠ° Π² Π·Π°ΠΏΠ°ΡΠ°: ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ #{type} Π² ΡΠ΅Π·Π΅ΡΠ²Π½Π°ΡΠ° ΡΠ°ΡΡ."
end
end
def report_supplies
puts "----- ΠΠΎΠΊΠ»Π°Π΄ Π·Π° Π·Π°ΠΏΠ°ΡΠΈΡΠ΅ -----"
if @supplies.keys.length > 0
@supplies.each do |type, quantity|
puts "#{type} Π½Π°Π»ΠΈΡΠ½ΠΎ: #{quantity} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ"
end
else
puts "Π Π΅Π·Π΅ΡΠ²Π½Π°ΡΠ° ΡΠ°ΡΡ Π΅ ΠΏΡΠ°Π·Π½Π°."
end
end
end
ΠΊΠ»Π°Ρ FuelTank
attr_accessor :fuel
def initialize
@fuel = 0
end
def get_fuel_levels
@fuel
end
def load_fuel(quantity)
puts "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Π³ΠΎΡΠΈΠ²ΠΎΡΠΎ -----"
puts "ΠΠ°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° #{quantity} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ Π³ΠΎΡΠΈΠ²ΠΎ Π² ΡΠ΅Π·Π΅ΡΠ²ΠΎΠ°ΡΠ°."
@fuel += quantity
end
def use_fuel(quantity)
puts "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Π³ΠΎΡΠΈΠ²ΠΎΡΠΎ -----"
puts "ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° #{quantity} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ Π³ΠΎΡΠΈΠ²ΠΎ ΠΎΡ ΡΠ΅Π·Π΅ΡΠ²ΠΎΠ°ΡΠ°."
@fuel -= quantity
end
def report_fuel
puts "----- ΠΠΎΠΊΠ»Π°Π΄ Π·Π° Π³ΠΎΡΠΈΠ²ΠΎΡΠΎ -----"
puts "#{@fuel} Π΅Π΄ΠΈΠ½ΠΈΡΠΈ Π³ΠΎΡΠΈΠ²ΠΎ Π½Π°Π»ΠΈΡΠ½ΠΎ."
end
end
ΠΊΠ»Π°Ρ Thrusters
def initialize(fuel_tank)
@linked_fuel_tank = fuel_tank
end
def activate_thrusters
puts "----- ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈΡΠ΅ -----"
if @linked_fuel_tank.get_fuel_levels >= 10
puts "ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠΈΠ»Π²Π°Π½Π΅ Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ."
@linked_fuel_tank.use_fuel(10)
else
puts "ΠΡΠ΅ΡΠΊΠ° Π² ΡΡΠΊΠΎΡΠΈΡΠ΅Π»Ρ: ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π³ΠΎΡΠΈΠ²ΠΎ Π½Π°Π»ΠΈΡΠ½ΠΎ."
end
end
endΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅Π³Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅. Π‘Π΅Π³Π° Π½Π°ΡΠΈΡΡ ΠΊΠ»Π°Ρ SpaceStation ΡΡΠ°Π½Π° ΠΏΠΎ-ΡΠΊΠΎΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΈΡΠ΅ ΡΠ°ΡΡΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΡΠ΅Π½Π·ΠΎΡΠΈ, ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΏΠΎΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΠ²ΠΈ, ΡΠ΅Π·Π΅ΡΠ²ΠΎΠ°Ρ Π·Π° Π³ΠΎΡΠΈΠ²ΠΎ ΠΈ ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈ.
ΠΠ° Π²ΡΡΠΊΠ° ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΡΠ΅Π³Π° ΠΈΠΌΠ° ΡΡΠΎΡΠ²Π΅ΡΠ΅Π½ ΠΊΠ»Π°Ρ: Sensors; SupplyHold; FuelTank; Thrusters.
Π ΡΠ°Π·ΠΈ Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠ΄Π° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ. Π€ΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΠ° ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ°Π½ΠΈ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅, Π½ΠΎ ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ°ΠΊΠ°, ΡΠ΅ Π΄Π° ΡΡΠ°Π½Π°Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ. ΠΡΡΠΏΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ, Π·Π° Π΄Π° ΡΠ»Π΅Π΄Π²Π°ΠΌΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π½Π° ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡ. Π‘Π΅Π³Π°, Π°ΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡΠΈΠ½Π° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΉΠΊΠΈ ΠΎΡ Ρ Π΅Ρ ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ², ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠ»Π°ΡΠ° SupplyHold, Π±Π΅Π· Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° Π·Π°ΡΡΠ³Π°ΠΌΠ΅ Π΄ΡΡΠ³ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ. Π’Π°ΠΊΠ°, Π°ΠΊΠΎ ΠΎΡΠΈΡΠ΅ΡΡΡ, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° Π»ΠΎΠ³ΠΈΡΡΠΈΠΊΠ°ΡΠ°, Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π² ΡΠ²ΠΎΡΡΠ° ΡΠ΅ΠΊΡΠΈΡ, ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° ΡΡΠ°Π½ΡΠΈΡΡΠ° ΡΠ΅ ΠΎΡΡΠ°Π½Π°Ρ Π½Π΅Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈ. ΠΠ»Π°ΡΡΡ SpaceStation Π΄ΠΎΡΠΈ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Π½ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
ΠΠ°ΡΠΈΡΠ΅ ΠΎΡΠΈΡΠ΅ΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° ΠΊΠΎΡΠΌΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΡΠ°Π½ΡΠΈΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ° Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΠΎΠΈΡΠΊΠ°Ρ ΡΠΎΡΠ½ΠΎ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠΌ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π² ΠΊΠΎΠ΄Π° ΠΈΠΌΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΊΠ°ΡΠΎ report_supplies ΠΈ report_fuel, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ SupplyHold ΠΈ FuelTank. ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ ΠΠ΅ΠΌΡΡΠ° ΠΏΠΎΠΈΡΠΊΠ° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π°ΡΠΈΠ½Π° Π½Π° ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΎΡΡΠ΅ΡΠΈΡΠ΅? Π©Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΠΈ Π΄Π²Π°ΡΠ° ΠΊΠ»Π°ΡΠ°, SupplyHold ΠΈ FuelTank. Π ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡΠΈΠ½Π° Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° Π³ΠΎΡΠΈΠ²ΠΎ ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΠ²ΠΈ? ΠΠ΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ ΡΡΡΠ±Π²Π° ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΡΡΡΠΈΡΠ΅ ΠΊΠ»Π°ΡΠΎΠ²Π΅. Π ΡΠΎΠ²Π° Π²Π΅ΡΠ΅ Π½Π°ΡΡΡΠ°Π²Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π½Π° SRP. ΠΠ΅ΠΊΠ° Π΄Π° ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π°.
class SpaceStation
attr_reader :sensors, :supply_hold, :supply_reporter,
:fuel_tank, :fuel_reporter, :thrusters
def initialize
@sensors = Sensors.new
@supply_hold = SupplyHold.new
@supply_reporter = SupplyReporter.new(@supply_hold)
@fuel_tank = FuelTank.new
@fuel_reporter = FuelReporter.new(@fuel_tank)
@thrusters = Thrusters.new(@fuel_tank)
end
end
class Sensors
def run_sensors
puts "----- Sensor Action -----"
puts "Running sensors!"
end
end
class SupplyHold
attr_accessor :supplies
attr_reader :reporter
def initialize
@supplies = {}
end
def get_supplies
@supplies
end
def load_supplies(type, quantity)
puts "----- Supply Action -----"
puts "Loading #{quantity} units of #{type} in the supply hold."
if @supplies[type]
@supplies[type] += quantity
else
@supplies[type] = quantity
end
end
def use_supplies(type, quantity)
puts "----- Supply Action -----"
if @supplies[type] != nil && @supplies[type] > quantity
puts "Using #{quantity} of #{type} from the supply hold."
@supplies[type] -= quantity
else
puts "Supply Error: Insufficient #{type} in the supply hold."
end
end
end
class FuelTank
attr_accessor :fuel
attr_reader :reporter
def initialize
@fuel = 0
end
def get_fuel_levels
@fuel
end
def load_fuel(quantity)
puts "----- Fuel Action -----"
puts "Loading #{quantity} units of fuel in the tank."
@fuel += quantity
end
def use_fuel(quantity)
puts "----- Fuel Action -----"
puts "Using #{quantity} units of fuel from the tank."
@fuel -= quantity
end
end
class Thrusters
FUEL_PER_THRUST = 10
def initialize(fuel_tank)
@linked_fuel_tank = fuel_tank
end
def activate_thrusters
puts "----- Thruster Action -----"
if @linked_fuel_tank.get_fuel_levels >= FUEL_PER_THRUST
puts "Thrusting action successful."
@linked_fuel_tank.use_fuel(FUEL_PER_THRUST)
else
puts "Thruster Error: Insufficient fuel available."
end
end
end
class Reporter
def initialize(item, type)
@linked_item = item
@type = type
end
def report
puts "----- #{@type.capitalize} Report -----"
end
end
class FuelReporter < Reporter
def initialize(item)
super(item, "fuel")
end
def report
super
puts "#{@linked_item.get_fuel_levels} units of fuel available."
end
end
class SupplyReporter 0
@linked_item.get_supplies.each do |type, quantity|
puts "#{type} available: #{quantity} units"
end
else
puts "Supply hold is empty."
end
end
end
iss = SpaceStation.new
iss.sensors.run_sensors
# ----- Sensor Action -----
# Running sensors!
iss.supply_hold.use_supplies("parts", 2)
# ----- Supply Action -----
# Supply Error: Insufficient parts in the supply hold.
iss.supply_hold.load_supplies("parts", 10)
# ----- Supply Action -----
# Loading 10 units of parts in the supply hold.
iss.supply_hold.use_supplies("parts", 2)
# ----- Supply Action -----
# Using 2 of parts from the supply hold.
iss.supply_reporter.report
# ----- Supply Report -----
# parts available: 8 units
iss.thrusters.activate_thrusters
# ----- Thruster Action -----
# Thruster Error: Insufficient fuel available.
iss.fuel_tank.load_fuel(100)
# ----- Fuel Action -----
# Loading 100 units of fuel in the tank.
iss.thrusters.activate_thrusters
# ----- Thruster Action -----
# Thrusting action successful.
# ----- Fuel Action -----
# Using 10 units of fuel from the tank.
iss.fuel_reporter.report
# ----- Fuel Report -----
# 90 units of fuel available.Π ΡΠ°Π·ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π·Π°Π΄ΡΠ»ΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π½Π° Π΄Π²Π° Π½ΠΎΠ²ΠΈ ΠΊΠ»Π°ΡΠ°, FuelReporter ΠΈ SupplyReporter. Π Π΄Π²Π°ΡΠ° ΡΠ° Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠ° Reporter. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΌΠ΅ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΊΡΠΌ ΠΊΠ»Π°ΡΠ° SpaceStation, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈ Π½ΡΠΆΠ΄Π° Π΄Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»Π°Ρ. Π‘Π΅Π³Π°, Π°ΠΊΠΎ ΠΠ΅ΠΌΡΡΠ° ΡΠ΅ΡΠΈ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π΅ΡΠΎ, ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅, Π° Π½Π΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΊΠ»Π°Ρ.
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½ΡΠΊΠΎΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ Π΄ΡΡΠ³. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±Π΅ΠΊΡΡΡ SupplyReporter Π·Π°Π²ΠΈΡΠΈ ΠΎΡ SupplyHold, Π° FuelReporter Π·Π°Π²ΠΈΡΠΈ ΠΎΡ FuelTank. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π³ΠΎΡΠΈΠ²Π½ΠΈΡ ΡΠ΅Π·Π΅ΡΠ²ΠΎΠ°Ρ. ΠΠΎ ΡΡΠΊ Π²ΡΠΈΡΠΊΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½ΡΠΌΠ° Π΄Π° Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ β ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ Π½Π΅ Π²Π»ΠΈΡΠ΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π½Π° Π΄ΡΡΠ³.
ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅Π½ ΠΊΠΎΠ΄, ΠΊΡΠ΄Π΅ΡΠΎ Π·Π°Π΄ΡΠ»ΠΆΠ΅Π½ΠΈΡΡΠ° Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅/ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ ΡΠ° ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ. Π Π°Π±ΠΎΡΠ°ΡΠ° Ρ ΡΠ°ΠΊΡΠ² ΠΊΠΎΠ΄ Π½Π΅ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° ΠΌΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠΎΡΡΠ° Π·Π°Π΄Π°ΡΠ°. Π¦Π΅Π»ΠΈΡΡ 'Π±ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½ ΠΎΠ±Π΅ΠΊΡ' ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Ρ ΠΌΠ΅ Π² SRP.
Skillbox ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°:
- ΠΠ²ΡΠ³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΡΡΡ .
- ΠΠ½Π»Π°ΠΉΠ½ ΠΊΡΡΡ .
- ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΊΡΡΡ .
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
