แƒ›แƒแƒฅแƒœแƒ˜แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ SOLID-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ›แƒแƒฅแƒœแƒ˜แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ SOLID-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ›แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ”แƒšแƒ˜แƒกแƒ’แƒแƒœ: แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ“แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒกแƒ”แƒ•แƒ”แƒ แƒ˜แƒœ แƒžแƒ”แƒ แƒ”แƒกแƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒ SOLID แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜. แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒ“แƒแƒœ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒ“แƒแƒ›แƒฌแƒงแƒ”แƒ‘แƒ—แƒแƒ—แƒ•แƒ˜แƒก, แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฎแƒแƒ แƒ— แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒแƒจแƒ˜, แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒ’แƒกแƒ›แƒ”แƒœแƒ˜แƒแƒ— SOLID แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ“แƒแƒฌแƒ”แƒ แƒแƒก แƒกแƒฃแƒคแƒ—แƒ, แƒ™แƒแƒ แƒ’แƒแƒ“ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒ˜ แƒ™แƒแƒ“แƒ˜. แƒแƒฆแƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜แƒ, แƒ แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒกแƒฌแƒแƒ แƒแƒ“ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ. แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒ˜แƒกแƒขแƒก แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ’แƒแƒ’แƒ”แƒ‘แƒ แƒแƒฅแƒ•แƒ— โ€žแƒกแƒฌแƒแƒ แƒ˜ แƒ’แƒ–แƒ˜แƒกโ€œ แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒแƒ–แƒ”. แƒ—แƒฃแƒ›แƒชแƒ, SOLID-แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ IT แƒกแƒแƒ–แƒแƒ’แƒแƒ“แƒแƒ”แƒ‘แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒฌแƒแƒ แƒ›แƒแƒ›แƒแƒ“แƒ’แƒ”แƒœแƒšแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ’แƒแƒฎแƒ“แƒœแƒ”แƒœ แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ™แƒแƒ แƒ’แƒ˜ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒฉแƒ”แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒ˜แƒ’แƒแƒ—, แƒ แƒ แƒแƒ แƒ˜แƒก SOLID แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜.

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—: แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ™แƒฃแƒ แƒกแƒ˜ "Mobile Developer PRO".

แƒจแƒ”แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—: "Habr"-แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒคแƒแƒกแƒ“แƒแƒ™แƒšแƒ”แƒ‘แƒ 10 แƒ แƒฃแƒ‘แƒšแƒ˜แƒ“แƒแƒœ Skillbox-แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ™แƒฃแƒ แƒกแƒ–แƒ” แƒฉแƒแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒกแƒแƒก "Habr" แƒกแƒแƒ แƒ”แƒ™แƒšแƒแƒ›แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ แƒ แƒแƒ แƒ˜แƒก SOLID?

แƒ”แƒก แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒ˜ แƒแƒ แƒ˜แƒก แƒแƒ‘แƒ แƒ”แƒ•แƒ˜แƒแƒขแƒฃแƒ แƒ, แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒแƒกแƒ แƒแƒ แƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜:

  • Sแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜. แƒ›แƒแƒ“แƒฃแƒšแƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜.
  • แƒ˜แƒก Oแƒ™แƒแƒšแƒแƒ›แƒ˜/แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜ แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜ (แƒฆแƒ˜แƒ/แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜ แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜). แƒ™แƒšแƒแƒกแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒฆแƒ˜แƒ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.
  • โ€Šแƒ˜แƒก Lแƒ˜แƒกแƒ™แƒแƒ•แƒ˜แƒก แƒฉแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜ (แƒšแƒ˜แƒกแƒ™แƒแƒ•แƒ˜แƒก แƒฉแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜). แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒœ แƒกแƒแƒ‘แƒแƒ–แƒ˜แƒกแƒ แƒขแƒ˜แƒžแƒก, แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ”แƒซแƒšแƒแƒ— แƒกแƒแƒ‘แƒแƒ–แƒ˜แƒกแƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒฅแƒ•แƒ”แƒขแƒ˜แƒžแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ›แƒ˜แƒก แƒชแƒแƒ“แƒœแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.
  • แƒ˜แƒก Iแƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก แƒกแƒ”แƒ’แƒ แƒ”แƒ’แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜โ€Š (แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜). แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒ•แƒœแƒ”แƒœ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ  แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒœ.
  • แƒ˜แƒก Dแƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜ (แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜). แƒฃแƒคแƒ แƒ แƒ›แƒแƒฆแƒแƒš แƒ“แƒแƒœแƒ”แƒ–แƒ” แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฅแƒ•แƒ”แƒ“แƒ แƒ“แƒแƒœแƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ–แƒ”.

แƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜

โ€Š
แƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜ (SRP) แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ™แƒšแƒแƒกแƒ˜ แƒแƒœ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ— แƒœแƒแƒฌแƒ˜แƒšแƒ–แƒ”. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒแƒ› แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒ”แƒœแƒ˜แƒญแƒแƒก แƒ›แƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒ™แƒšแƒแƒกแƒก, แƒ“แƒ แƒแƒ แƒ แƒ›แƒ˜แƒ›แƒแƒคแƒแƒœแƒขแƒฃแƒšแƒ˜ แƒแƒ แƒแƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ™แƒšแƒแƒกแƒ”แƒ‘แƒจแƒ˜. SRP-แƒ˜แƒก แƒจแƒ”แƒ›แƒฅแƒ›แƒœแƒ”แƒšแƒ˜ แƒ“แƒ แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ›แƒแƒฎแƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ‘แƒ”แƒ แƒข แƒก. แƒ›แƒแƒ แƒขแƒ˜แƒœแƒ˜, แƒแƒฆแƒฌแƒ”แƒ แƒก แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒ”แƒ–แƒก. แƒ›แƒแƒœ แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒจแƒ”แƒ›แƒแƒ’แƒ•แƒ—แƒแƒ•แƒแƒ–แƒ แƒ”แƒก แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ˜แƒกแƒ˜ แƒœแƒแƒจแƒ แƒแƒ›แƒ˜แƒก "แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ–แƒ” แƒแƒ แƒ˜แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ”แƒ‘แƒ˜" แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜. แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒ“แƒ˜แƒ“ แƒœแƒแƒฌแƒ˜แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ แƒ” แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒขแƒแƒ› แƒ“แƒ”แƒ›แƒแƒ แƒ™แƒแƒก แƒ›แƒ˜แƒ”แƒ .

แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒ˜แƒชแƒแƒ•แƒ“แƒ แƒ“แƒแƒ•แƒ˜แƒ— แƒคแƒแƒ แƒœแƒแƒกแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒฉแƒแƒ›แƒแƒงแƒแƒšแƒ˜แƒ‘แƒ”แƒ‘แƒฃแƒš แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒแƒก. แƒแƒ แƒ˜ แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜แƒ แƒ˜แƒœแƒ™แƒแƒคแƒกแƒฃแƒšแƒแƒชแƒ˜แƒ แƒ“แƒ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒ›แƒแƒšแƒ•แƒ. แƒžแƒแƒ แƒœแƒแƒกแƒ˜ แƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒ“แƒ, แƒ แƒแƒ› แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒชแƒแƒšแƒ™แƒ”แƒฃแƒš แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒแƒ“ แƒ“แƒแƒงแƒแƒคแƒ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒแƒ“แƒ”แƒก แƒ‘แƒšแƒแƒ™-แƒกแƒฅแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก แƒแƒœ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒแƒ“แƒ”แƒ‘แƒก. แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒ“แƒ”แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ  แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒก.

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒ›แƒแƒ แƒขแƒ˜แƒœแƒ›แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ›แƒ˜แƒกแƒชแƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ˜แƒก แƒฃแƒคแƒ แƒแƒก แƒ›แƒ”แƒœแƒ”แƒฏแƒ”แƒ แƒ”แƒ‘แƒ—แƒแƒœ (COO, CTO, CFO), แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ‘แƒ˜แƒ–แƒœแƒ”แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒš แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒแƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ›แƒแƒ—แƒ’แƒแƒœแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ’แƒแƒœแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒš แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒแƒจแƒ˜ แƒกแƒฎแƒ•แƒ แƒ›แƒ”แƒœแƒ”แƒฏแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ–แƒ” แƒ–แƒ”แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒฆแƒ•แƒ—แƒแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜

แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก, SRP-แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ˜แƒก แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒ’แƒ–แƒแƒ แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒจแƒ˜ แƒ“แƒแƒœแƒแƒฎแƒ•แƒ. แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒก. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ แƒฃแƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฆแƒฌแƒ”แƒ แƒก แƒ™แƒแƒกแƒ›แƒแƒกแƒฃแƒ แƒ˜ แƒกแƒแƒ“แƒ’แƒฃแƒ แƒ˜แƒก แƒฅแƒชแƒ”แƒ•แƒแƒก แƒ“แƒ แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ”แƒ‘แƒก.

แƒ’แƒแƒ“แƒแƒฎแƒ”แƒ“แƒ”แƒ— แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก แƒ“แƒ แƒจแƒ”แƒ”แƒชแƒแƒ“แƒ”แƒ— แƒ“แƒแƒแƒ“แƒ’แƒ˜แƒœแƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜:
แƒ˜แƒ› แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ›แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ SpaceStation แƒ™แƒšแƒแƒกแƒจแƒ˜.
แƒ•แƒ˜แƒœแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ“แƒ”แƒก แƒ™แƒแƒกแƒ›แƒแƒกแƒฃแƒ แƒ˜ แƒกแƒแƒ“แƒ’แƒฃแƒ แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—.

class SpaceStation
  def initialize
    @supplies = {}
    @fuel = 0
  end
 
  def run_sensors
    puts "----- Sensor Action -----"
    puts "Running sensors!"
  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} avalilable: #{quantity} units"
      end
    else
      puts "Supply hold is empty."
    end
  end
 
  def load_fuel(quantity)
    puts "----- Fuel Action -----"
    puts "Loading #{quantity} units of fuel in the tank."
    @fuel += quantity
  end
 
  def report_fuel
    puts "----- Fuel Report -----"
    puts "#{@fuel} units of fuel available."
  end
 
  def activate_thrusters
    puts "----- Thruster Action -----"
    if @fuel >= 10
      puts "Thrusting action successful."
      @fuel -= 10
    else
      puts "Thruster Error: Insufficient fuel available."
    end
  end
end

แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒกแƒ›แƒแƒกแƒฃแƒ แƒ˜ แƒกแƒแƒ“แƒ’แƒฃแƒ แƒ˜ แƒฃแƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒ (แƒแƒ แƒแƒ›แƒ’แƒแƒœแƒ˜แƒ, แƒ›แƒแƒšแƒ” แƒ“แƒแƒ›แƒ˜แƒ แƒ”แƒ™แƒแƒก NASA-แƒ“แƒแƒœ), แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ แƒแƒฆแƒแƒช แƒ’แƒแƒกแƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ”แƒšแƒ˜.

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, 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} avalilable: #{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 แƒ™แƒšแƒแƒกแƒ˜ แƒ’แƒแƒฎแƒ“แƒ แƒฃแƒคแƒ แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒš แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ–แƒ”, แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒกแƒ”แƒœแƒกแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒขแƒ˜, แƒกแƒแƒฎแƒแƒ แƒฏแƒ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ, แƒกแƒแƒฌแƒ•แƒแƒ•แƒ˜แƒก แƒแƒ•แƒ–แƒ˜ แƒ“แƒ แƒ’แƒแƒ›แƒแƒซแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜.

แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒฎแƒšแƒ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ™แƒšแƒแƒกแƒ˜: แƒกแƒ”แƒœแƒกแƒแƒ แƒ”แƒ‘แƒ˜; SupplyHold; แฒกแƒแƒฌแƒ•แƒแƒ•แƒ˜แƒก แƒแƒ•แƒ–แƒ˜; แƒขแƒ แƒแƒกแƒขแƒ”แƒ แƒ”แƒ‘แƒ˜.

แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ› แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒแƒ. แƒกแƒแƒฅแƒ›แƒ” แƒ˜แƒ›แƒแƒจแƒ˜แƒ, แƒ แƒแƒ› แƒ˜แƒœแƒ“แƒ˜แƒ•แƒ˜แƒ“แƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒ™แƒšแƒแƒกแƒ”แƒ‘แƒจแƒ˜แƒ แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜, แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ˜แƒกแƒ”แƒ แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ แƒแƒ› แƒ’แƒแƒฎแƒ“แƒ”แƒก แƒžแƒ แƒแƒ’แƒœแƒแƒ–แƒ˜แƒ แƒ”แƒ‘แƒแƒ“แƒ˜ แƒ“แƒ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒฃแƒšแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒฏแƒ’แƒฃแƒคแƒ”แƒ‘แƒ— แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜แƒก แƒ“แƒแƒกแƒแƒชแƒแƒ•แƒแƒ“. แƒแƒฎแƒšแƒ, แƒ—แƒฃ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒฌแƒ”แƒกแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ, แƒฐแƒ”แƒจแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ“แƒแƒœ แƒ›แƒแƒกแƒ˜แƒ•แƒ–แƒ” แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— 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 < Reporter
  def initialize(item)
    super(item, "supply")
  end
 
  def report
    super
    if @linked_item.get_supplies.keys.length > 0
      @linked_item.get_supplies.each do |type, quantity|
        puts "#{type} avalilable: #{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 avalilable: 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. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ แƒ˜แƒ•แƒ” แƒ แƒ”แƒžแƒแƒ แƒขแƒ˜แƒแƒ แƒ˜แƒก แƒ™แƒšแƒแƒกแƒ˜แƒก แƒ‘แƒแƒ•แƒจแƒ•แƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒแƒœ. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”แƒ— แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ SpaceStation แƒ™แƒšแƒแƒกแƒจแƒ˜, แƒ แƒแƒ—แƒ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜ แƒฅแƒ•แƒ”แƒ™แƒšแƒแƒกแƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ. แƒแƒฎแƒšแƒ, แƒ—แƒฃ แƒ“แƒ”แƒ“แƒแƒ›แƒ˜แƒฌแƒ แƒกแƒฎแƒ•แƒ แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒแƒก แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒฉแƒ•แƒ”แƒœ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก แƒจแƒ”แƒ•แƒ˜แƒขแƒแƒœแƒ— แƒฅแƒ•แƒ”แƒ™แƒšแƒแƒกแƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒแƒ แƒ แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ™แƒšแƒแƒกแƒจแƒ˜.

แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ™แƒšแƒแƒกแƒ˜ แƒ›แƒแƒ˜แƒœแƒช แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ–แƒ”แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜. แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, SupplyReporter แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ SupplyHold-แƒ–แƒ”, แƒฎแƒแƒšแƒ FuelReporter แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ FuelTank-แƒ–แƒ”. แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ’แƒแƒ›แƒแƒซแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒแƒฌแƒ•แƒแƒ•แƒ˜แƒก แƒแƒ•แƒ–แƒ—แƒแƒœ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒขแƒแƒœแƒ แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ แƒ—แƒฃแƒšแƒ˜ แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ - แƒ”แƒ แƒ—แƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ แƒ“แƒ˜แƒ“ แƒ’แƒแƒ•แƒšแƒ”แƒœแƒแƒก แƒแƒ  แƒ›แƒแƒแƒฎแƒ“แƒ”แƒœแƒก แƒ›แƒ”แƒแƒ แƒ”แƒ–แƒ”.

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ›แƒแƒ“แƒฃแƒšแƒฃแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜, แƒกแƒแƒ“แƒแƒช แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก/แƒ™แƒšแƒแƒกแƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ. แƒแƒกแƒ”แƒ— แƒ™แƒแƒ“แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ›แƒ˜แƒกแƒ˜ แƒจแƒ”แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒแƒฅแƒชแƒ˜แƒ”แƒ— แƒ›แƒ—แƒ”แƒšแƒ˜ โ€žแƒฆแƒ•แƒ—แƒแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜โ€œ SRP-แƒแƒ“.

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—:

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ