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