āĻ†āĻŽāĻ°āĻž SOLID āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¨āĻŽāĻ¨ā§€āĻ¯āĻŧ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻŋ

āĻ†āĻŽāĻ°āĻž SOLID āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¨āĻŽāĻ¨ā§€āĻ¯āĻŧ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻŋ

āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĻ• āĻĨā§‡āĻ•ā§‡: āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•āĻžāĻļāĻŋāĻ¤ āĻ¸ā§‡āĻ­ā§‡āĻ°āĻŋāĻ¨ āĻĒā§‡āĻ°ā§‡āĻœā§‡āĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ āĻ¸āĻ˛āĻŋāĻĄ āĻ¨ā§€āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡āĨ¤ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻĨā§‡āĻ•ā§‡ āĻ¤āĻĨā§āĻ¯ āĻ¨āĻ¤ā§āĻ¨ āĻāĻŦāĻ‚ āĻ…āĻ­āĻŋāĻœā§āĻž āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻžāĻ° āĻ‰āĻ­āĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻšāĻŦā§‡.

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§‡ āĻĨāĻžāĻ•ā§‡āĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ¸āĻ˛āĻŋāĻĄ āĻ¨ā§€āĻ¤āĻŋāĻ° āĻ•āĻĨāĻž āĻļā§āĻ¨ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ¤āĻžāĻ°āĻž āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻžāĻ°āĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ°, āĻ¸ā§āĻ—āĻ āĻŋāĻ¤ āĻāĻŦāĻ‚ āĻ¸āĻšāĻœā§‡ āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻŦā§‡āĻ•ā§āĻˇāĻŖāĻ¯ā§‹āĻ—ā§āĻ¯ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¯ā§‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚āĻ¯āĻŧā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻžāĻœ āĻ¸āĻ āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻžāĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻŦāĻŋāĻļā§‡āĻˇāĻœā§āĻžā§‡āĻ° "āĻ¸āĻ āĻŋāĻ• āĻĒāĻĨ" āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ§āĻžāĻ°āĻŖāĻž āĻāĻŦāĻ‚ āĻŦā§‹āĻāĻžāĻĒāĻĄāĻŧāĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡; āĻāĻŸāĻŋ āĻ¸āĻŦāĻ‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ° āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻžāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, SOLID-āĻ āĻ˜ā§‹āĻˇāĻŋāĻ¤ āĻ§āĻžāĻ°āĻŖāĻžāĻ—ā§āĻ˛āĻŋ āĻ†āĻ‡āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧā§‡āĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻĻā§‡āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ—ā§ƒāĻšā§€āĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ°āĻž āĻ…āĻ¨ā§‡āĻ• āĻ­āĻžāĻ˛ā§‹ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ā§‡āĻ° āĻ‰āĻ¤ā§āĻĨāĻžāĻ¨ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļā§‡āĻ° āĻ¸ā§‚āĻšāĻ¨āĻž āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻšāĻ¯āĻŧā§‡ āĻ“āĻ ā§‡āĨ¤

āĻ†āĻ¸ā§āĻ¨ āĻŦā§āĻāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¸āĻ˛āĻŋāĻĄ āĻ¨ā§€āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻ•ā§€ āĻāĻŦāĻ‚ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¤āĻžāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°ā§‡āĨ¤

Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°ā§‡: āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ• āĻ•ā§‹āĻ°ā§āĻ¸ "āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ° āĻĒā§āĻ°ā§‹".

āĻ†āĻŽāĻ°āĻž āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻšā§āĻ›āĻŋ: "Habr"-āĻāĻ° āĻ¸āĻ•āĻ˛ āĻĒāĻžāĻ āĻ•āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ - "Habr" āĻĒā§āĻ°āĻšāĻžāĻ°āĻŽā§‚āĻ˛āĻ• āĻ•ā§‹āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ Skillbox āĻ•ā§‹āĻ°ā§āĻ¸ā§‡ āĻ¨āĻĨāĻŋāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ 10 āĻ°ā§āĻŦā§‡āĻ˛ āĻ›āĻžāĻĄāĻŧāĨ¤

āĻ¸āĻ˛āĻŋāĻĄ āĻ•āĻŋ?

āĻāĻ‡ āĻļāĻŦā§āĻĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ°ā§‚āĻĒ, āĻļāĻŦā§āĻĻāĻŸāĻŋāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ…āĻ•ā§āĻˇāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ¨ā§€āĻ¤āĻŋāĻ° āĻ¨āĻžāĻŽā§‡āĻ° āĻļā§āĻ°ā§:

  • SāĻāĻ•āĻ• āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻ¨ā§€āĻ¤āĻŋāĨ¤ āĻāĻ•āĻŸāĻŋ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻāĻŦāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°āĻŖ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
  • āĻ¸āĻžāĻ°ā§āĻœāĻžāĻ°āĻŋāĻ° OāĻ•āĻ˛āĻŽ/āĻŦāĻ¨ā§āĻ§ āĻ¨ā§€āĻ¤āĻŋ (āĻ–ā§‹āĻ˛āĻž/āĻŦāĻ¨ā§āĻ§ āĻ¨ā§€āĻ¤āĻŋ)āĨ¤ āĻ•ā§āĻ˛āĻžāĻ¸ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻ¨ā§āĻŽā§āĻ•ā§āĻ¤ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤
  •  āĻ¸āĻžāĻ°ā§āĻœāĻžāĻ°āĻŋāĻ° LāĻ‡āĻ¸āĻ•āĻ­ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ¨ā§€āĻ¤āĻŋ (āĻ˛āĻŋāĻ¸āĻ•āĻ­ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ¨ā§€āĻ¤āĻŋ)āĨ¤ āĻāĻ•āĻŸāĻŋ āĻŦā§‡āĻ¸ āĻŸāĻžāĻ‡āĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŽāĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦā§‡āĻ¸ āĻŸāĻžāĻ‡āĻĒā§‡āĻ° āĻ¸āĻžāĻŦāĻŸāĻžāĻ‡āĻĒāĻ—ā§āĻ˛āĻŋ āĻ¨āĻž āĻœā§‡āĻ¨ā§‡āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤
  • āĻ¸āĻžāĻ°ā§āĻœāĻžāĻ°āĻŋāĻ° IāĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻŋāĻ­āĻžāĻœāĻ¨ āĻ¨ā§€āĻ¤āĻŋ  (āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻŋāĻšā§āĻ›ā§‡āĻĻ āĻ¨ā§€āĻ¤āĻŋ)āĨ¤ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻ¤ā§āĻ¤ā§āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻ¯ā§‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¨āĻž āĻ¤āĻžāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¨āĻ¯āĻŧā§ˇ
  • āĻ¸āĻžāĻ°ā§āĻœāĻžāĻ°āĻŋāĻ° DāĻĒāĻ°āĻžāĻ§ā§€āĻ¨āĻ¤āĻž āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ āĻ¨ā§€āĻ¤āĻŋ (āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻžāĻ° āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ āĻ¨ā§€āĻ¤āĻŋ)āĨ¤ āĻ‰āĻšā§āĻš āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨ āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤

āĻāĻ•āĻ• āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻ¨ā§€āĻ¤āĻŋ

 
āĻ¸āĻŋāĻ™ā§āĻ—ā§‡āĻ˛ āĻ°ā§‡āĻ¸āĻĒāĻ¨āĻ¸āĻŋāĻŦāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻĒā§āĻ°āĻŋāĻ¨ā§āĻ¸āĻŋāĻĒāĻ˛ (āĻāĻ¸āĻ†āĻ°āĻĒāĻŋ) āĻŦāĻ˛ā§‡ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ āĻŦāĻž āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ¸ā§‡āĻ‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻžāĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ‚āĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€āĨ¤ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤āĻ­āĻžāĻŦā§‡, āĻāĻ‡ āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻļā§āĻ°ā§‡āĻŖā§€āĻ¤ā§‡ āĻ…āĻ°ā§āĻĒāĻŖ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤, āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻšā§€āĻ¨ āĻļā§āĻ°ā§‡āĻŖā§€āĻ¤ā§‡ āĻ›āĻĄāĻŧāĻŋāĻ¯āĻŧā§‡ āĻ›āĻŋāĻŸāĻŋāĻ¯āĻŧā§‡ āĻ¨āĻž āĻĨā§‡āĻ•ā§‡āĨ¤ SRP āĻāĻ° āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§āĻ°āĻšāĻžāĻ°āĻ•, āĻ°āĻŦāĻžāĻ°ā§āĻŸ āĻāĻ¸ āĻŽāĻžāĻ°ā§āĻŸāĻŋāĻ¨, āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻ•āĻžāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻœāĻŦāĻžāĻŦāĻĻāĻŋāĻšāĻŋāĻ¤āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ¤āĻŋāĻ¨āĻŋ āĻŽā§‚āĻ˛āĻ¤ āĻāĻ‡ āĻļāĻŦā§āĻĻāĻŸāĻŋāĻ•ā§‡ āĻ¤āĻžāĻāĻ° āĻ•āĻžāĻœā§‡āĻ° "āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ-āĻ“āĻ°āĻŋāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻĄ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ā§‡āĻ° āĻ¨ā§€āĻ¤āĻŋ" āĻāĻ° āĻ…āĻ¨ā§āĻ¯āĻ¤āĻŽ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨āĨ¤ āĻ§āĻžāĻ°āĻŖāĻžāĻŸāĻŋ āĻ¸āĻ‚āĻ¯ā§‹āĻ—ā§‡āĻ° āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨ā§‡āĻ° āĻ…āĻ¨ā§‡āĻ•āĻŸāĻžāĻ‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻĒā§‚āĻ°ā§āĻŦā§‡ āĻŸāĻŽ āĻĄāĻŋāĻŽāĻžāĻ°ā§āĻ•ā§‹ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤

āĻ§āĻžāĻ°āĻŖāĻžāĻŸāĻŋāĻ¤ā§‡ āĻĄā§‡āĻ­āĻŋāĻĄ āĻĒāĻžāĻ°ā§āĻ¨āĻžāĻ¸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻŖā§€āĻ¤ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻŖāĻž āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ›āĻŋāĻ˛āĨ¤ āĻĻā§āĻŸāĻŋ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻšāĻ˛ āĻāĻ¨āĻ•ā§āĻ¯āĻžāĻĒāĻ¸ā§āĻ˛ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ¤āĻĨā§āĻ¯ āĻ—ā§‹āĻĒāĻ¨ āĻ•āĻ°āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻ¨āĻžāĻ¸ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻ•ā§‡ āĻĒā§ƒāĻĨāĻ• āĻŽāĻĄāĻŋāĻ‰āĻ˛ā§‡ āĻŦāĻŋāĻ­āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻŦā§āĻ˛āĻ• āĻĄāĻžāĻ¯āĻŧāĻžāĻ—ā§āĻ°āĻžāĻŽ āĻŦāĻž āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻļāĻ¨ āĻĒā§āĻ°āĻŦāĻžāĻšā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻŽāĻĄāĻŋāĻ‰āĻ˛ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯āĻž āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻĻā§‡āĻ° āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻŽāĻžāĻ°ā§āĻŸāĻŋāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ•ā§‹āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ° āĻ¸āĻŋāĻ¨āĻŋāĻ¯āĻŧāĻ° āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ°āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨ (COO, CTO, CFO), āĻ¯āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•ā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ• āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¯ā§‡ āĻ•ā§‡āĻ‰ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ•āĻĻā§‡āĻ° āĻ¸ā§āĻŦāĻžāĻ°ā§āĻĨāĻ•ā§‡ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤ āĻ¨āĻž āĻ•āĻ°ā§‡ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻāĻļā§āĻŦāĻ°āĻŋāĻ• āĻŦāĻ¸ā§āĻ¤ā§

āĻŦāĻ°āĻžāĻŦāĻ°ā§‡āĻ° āĻŽāĻ¤ā§‹, āĻāĻ¸āĻ†āĻ°āĻĒāĻŋ āĻļā§‡āĻ–āĻžāĻ° āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻāĻŸāĻŋāĻ•ā§‡ āĻ•āĻ°ā§āĻŽā§‡ āĻĻā§‡āĻ–āĻžāĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ…āĻ‚āĻļ āĻĻā§‡āĻ–āĻŋ āĻ¯āĻž āĻāĻ•āĻ• āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻ¨ā§€āĻ¤āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻāĻŸāĻŋ āĻ°ā§āĻŦāĻŋ āĻ•ā§‹āĻĄ āĻ¯āĻž āĻ¸ā§āĻĒā§‡āĻ¸ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ā§‡āĻ° āĻ†āĻšāĻ°āĻŖ āĻāĻŦāĻ‚ āĻ—ā§āĻŖāĻžāĻŦāĻ˛ā§€ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡āĨ¤

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨:
āĻ¸ā§āĻĒā§‡āĻ¸āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ˜ā§‹āĻˇāĻŋāĻ¤ āĻ¸ā§‡āĻ‡ āĻŦāĻ¸ā§āĻ¤ā§āĻ—ā§āĻ˛āĻŋāĻ° āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦāĨ¤
āĻ¯āĻžāĻ°āĻž āĻŽāĻšāĻžāĻ•āĻžāĻļ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

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

āĻ†āĻ¸āĻ˛ā§‡, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻĒā§‡āĻ¸ āĻ¸ā§āĻŸā§‡āĻļāĻ¨āĻŸāĻŋ āĻ…āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° (āĻ†āĻŽāĻŋ āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋ āĻ¨āĻž āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻļā§€āĻ˜ā§āĻ°āĻ‡ āĻ¨āĻžāĻ¸āĻž āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻ˛ āĻĒāĻžāĻŦ), āĻ¤āĻŦā§‡ āĻāĻ–āĻžāĻ¨ā§‡ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻŽāĻ¤ā§‹ āĻ•āĻŋāĻ›ā§ āĻ†āĻ›ā§‡āĨ¤

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ¸ā§āĻĒā§‡āĻ¸āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ (āĻŦāĻž āĻ•āĻžāĻœ) āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻŦ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻŦāĻŋāĻ­āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

  • āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ°;
  • āĻ¸āĻ°āĻŦāĻ°āĻžāĻš (āĻ­ā§‹āĻ—ā§āĻ¯ āĻĻā§āĻ°āĻŦā§āĻ¯);
  • āĻœā§āĻŦāĻžāĻ˛āĻžāĻ¨ā§€
  • āĻāĻ•ā§āĻ¸āĻŋāĻ˛āĻžāĻ°ā§‡āĻŸāĻ°

āĻ¯āĻĻāĻŋāĻ“ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ā§‡āĻ° āĻ•āĻ°ā§āĻŽāĻšāĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ•āĻžāĻ‰āĻ•ā§‡āĻ‡ āĻ•ā§āĻ˛āĻžāĻ¸ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ, āĻ†āĻŽāĻ°āĻž āĻ¸āĻšāĻœā§‡āĻ‡ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ•ā§‡ āĻ•ā§€ āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€āĨ¤ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤, āĻŦāĻŋāĻœā§āĻžāĻžāĻ¨ā§€ āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ°āĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§‡āĻ¨, āĻ°āĻ¸āĻĻ āĻ¸āĻ°āĻŦāĻ°āĻžāĻšāĻ•āĻžāĻ°ā§€ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨ āĻ¸āĻ°āĻŦāĻ°āĻžāĻšā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€, āĻĒā§āĻ°āĻ•ā§ŒāĻļāĻ˛ā§€ āĻœā§āĻŦāĻžāĻ˛āĻžāĻ¨ā§€ āĻ¸āĻ°āĻŦāĻ°āĻžāĻšā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€ āĻāĻŦāĻ‚ āĻĒāĻžāĻ‡āĻ˛āĻŸ āĻŦā§āĻ¸ā§āĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§‡āĨ¤

āĻ†āĻŽāĻ°āĻž āĻ•āĻŋ āĻŦāĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ āĻāĻ‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŸāĻŋ SRP āĻ…āĻ¨ā§āĻ—āĻ¤ āĻ¨āĻ¯āĻŧ? āĻšā§āĻ¯āĻžāĻ āĻ…āĻŦāĻļā§āĻ¯āĻ‡. āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§āĻĒā§‡āĻ¸āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ "āĻˆāĻļā§āĻŦāĻ° āĻŦāĻ¸ā§āĻ¤ā§" āĻ¯āĻž āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻœāĻžāĻ¨ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ-āĻ“āĻ°āĻŋāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻĄ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋ-āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻ•āĻœāĻ¨ āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ¨āĻŦāĻŋāĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻŦāĻ¸ā§āĻ¤ā§ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻž āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ•āĻ āĻŋāĻ¨āĨ¤ āĻāĻ–āĻ¨ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŸāĻŋ āĻ–ā§āĻŦāĻ‡ āĻ¸āĻšāĻœ, āĻšā§āĻ¯āĻžāĻ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ¨āĻ¤ā§āĻ¨ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ˛ā§‡ āĻ•ā§€ āĻšāĻŦā§‡ āĻ¤āĻž āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽāĻšāĻžāĻ•āĻžāĻļ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŽā§‡āĻĄāĻŋāĻ•ā§‡āĻ˛ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻŦāĻž āĻāĻ•āĻŸāĻŋ āĻŽāĻŋāĻŸāĻŋāĻ‚ āĻ°ā§āĻŽ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡āĨ¤ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¯āĻ¤ āĻŦā§‡āĻļāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĨāĻžāĻ•āĻŦā§‡, āĻ¤āĻ¤ āĻŦā§‡āĻļāĻŋ āĻ¸ā§āĻĒā§‡āĻ¸āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻŦāĻžāĻĄāĻŧāĻŦā§‡āĨ¤ āĻ āĻŋāĻ• āĻ†āĻ›ā§‡, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻ‡ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¯āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻšāĻŦā§‡, āĻĒā§āĻ°ā§‹ āĻ•āĻŽāĻĒā§āĻ˛ā§‡āĻ•ā§āĻ¸ā§‡āĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻ†āĻ°āĻ“ āĻ•āĻ āĻŋāĻ¨ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ āĻŦā§‡āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ†āĻŽāĻ°āĻž āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ āĻŦā§āĻ¯āĻžāĻšāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•ā§āĻ¸āĻŋāĻ˛āĻžāĻ°ā§‡āĻŸāĻ°āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻ•āĻœāĻ¨ āĻ—āĻŦā§‡āĻˇāĻ• āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°ā§‡āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻŸāĻŋ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ā§‡āĻ° āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻ•ā§‡ āĻ–ā§āĻŦ āĻ­āĻžāĻ˛ā§‹āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

SRP āĻ¨ā§€āĻ¤āĻŋ āĻ˛āĻ™ā§āĻ˜āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŦāĻ˛ā§āĻĒāĻŽā§‡āĻ¯āĻŧāĻžāĻĻā§€ āĻ•ā§ŒāĻļāĻ˛āĻ—āĻ¤ āĻŦāĻŋāĻœāĻ¯āĻŧ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻļā§‡āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ†āĻŽāĻ°āĻž "āĻ¯ā§āĻĻā§āĻ§ āĻšā§‡āĻ°ā§‡ āĻ¯āĻžāĻŦ", āĻāĻŦāĻ‚ āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§‡ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĻāĻžāĻ¨āĻŦ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻž āĻ–ā§āĻŦ āĻ•āĻ āĻŋāĻ¨ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ āĻŦā§‡āĨ¤ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŸāĻŋāĻ•ā§‡ āĻ•ā§‹āĻĄā§‡āĻ° āĻĒā§ƒāĻĨāĻ• āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻ­āĻžāĻ— āĻ•āĻ°āĻž āĻ­āĻžāĻ˛, āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€āĨ¤ āĻāĻŸāĻž āĻŦā§āĻāĻ¤ā§‡, āĻāĻ° 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

āĻ…āĻ¨ā§‡āĻ• āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ†āĻ›ā§‡, āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻāĻ–āĻ¨ āĻ­āĻžāĻ˛ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ. āĻāĻ–āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻĒā§‡āĻ¸āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸āĻŸāĻŋ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ°ā§‡āĻ° āĻ¸ā§‡āĻŸ, āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻž, āĻāĻ•āĻŸāĻŋ āĻœā§āĻŦāĻžāĻ˛āĻžāĻ¨ā§€ āĻŸā§āĻ¯āĻžāĻ™ā§āĻ• āĻāĻŦāĻ‚ āĻŦā§āĻ¸ā§āĻŸāĻžāĻ° āĻ¸āĻš āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻļā§€āĻ˛ āĻ…āĻ‚āĻļāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻļā§āĻ°ā§‡āĻŖā§€ āĻ†āĻ›ā§‡: āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ°; āĻ¸āĻžāĻĒā§āĻ˛āĻžāĻ‡āĻšā§‹āĻ˛ā§āĻĄ; āĻœā§āĻŦāĻžāĻ˛āĻžāĻ¨āĻŋ āĻŸā§āĻ¯āĻžāĻ‚āĻ•; āĻĨā§āĻ°āĻžāĻ¸ā§āĻŸāĻžāĻ°āĻ¸āĨ¤

āĻ•ā§‹āĻĄā§‡āĻ° āĻāĻ‡ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻŦā§‡āĻļ āĻ•āĻŋāĻ›ā§ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻŽā§‹āĻĻā§āĻĻāĻž āĻ•āĻĨāĻž āĻšāĻ˛ āĻ¯ā§‡ āĻ¸ā§āĻŦāĻ¤āĻ¨ā§āĻ¤ā§āĻ° āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻļā§āĻ°ā§‡āĻŖā§€āĻ¤ā§‡ āĻ†āĻŦāĻĻā§āĻ§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻ¤āĻžāĻ°āĻž āĻāĻŽāĻ¨āĻ­āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ—āĻ āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ¯āĻžāĻ¤ā§‡ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ āĻāĻŦāĻ‚ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ¯āĻŧāĨ¤ āĻ¸āĻŽāĻ¨ā§āĻŦāĻ¯āĻŧ āĻ¨ā§€āĻ¤āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻ¸āĻš āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ—ā§‹āĻˇā§āĻ ā§€āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻŋāĨ¤ āĻāĻ–āĻ¨, āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ, āĻāĻ•āĻŸāĻŋ āĻšā§āĻ¯āĻžāĻļ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ°ā§‡āĻ¤ā§‡ āĻ¯ā§‡āĻ¤ā§‡, āĻļā§āĻ§ā§ āĻ¸āĻžāĻĒā§āĻ˛āĻžāĻ‡āĻšā§‹āĻ˛ā§āĻĄ āĻ•ā§āĻ˛āĻžāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨; āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ¨ā§āĻ¯ āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻāĻ­āĻžāĻŦā§‡ āĻ˛āĻœāĻŋāĻ¸ā§āĻŸāĻŋāĻ• āĻ…āĻĢāĻŋāĻ¸āĻžāĻ° āĻ¤āĻžāĻ° āĻ¸ā§‡āĻ•āĻļāĻ¨ā§‡ āĻ•āĻŋāĻ›ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ˛ā§‡ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ā§‡āĻ° āĻŦāĻžāĻ•āĻŋ āĻ…āĻ‚āĻļ āĻ…āĻ•ā§āĻˇāĻ¤ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ¸ā§āĻĒā§‡āĻ¸āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸ āĻāĻŽāĻ¨āĻ•āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¸āĻšā§‡āĻ¤āĻ¨ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤

āĻ¸ā§āĻĒā§‡āĻ¸ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ā§‡ āĻ•āĻ°ā§āĻŽāĻ°āĻ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻĢāĻŋāĻ¸āĻžāĻ°āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ–ā§āĻļāĻŋ āĻ•āĻžāĻ°āĻŖ āĻ¤āĻžāĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ•ā§‹āĻĄāĻŸāĻŋāĻ¤ā§‡ āĻ¸āĻžāĻĒā§āĻ˛āĻžāĻ‡āĻšā§‹āĻ˛ā§āĻĄ āĻāĻŦāĻ‚ āĻĢā§āĻ¯āĻŧā§‡āĻ˛āĻŸā§āĻ¯āĻžāĻ™ā§āĻ• āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ_āĻ¸āĻžāĻĒā§āĻ˛āĻžāĻ‡ āĻāĻŦāĻ‚ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ_āĻĢā§āĻ¯āĻŧā§‡āĻ˛ā§‡āĻ° āĻŽāĻ¤ā§‹ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻĒā§ƒāĻĨāĻŋāĻŦā§€ āĻ¯āĻĻāĻŋ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻ˛ā§‡ āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•ā§€ āĻšāĻŦā§‡? āĻ‰āĻ­āĻ¯āĻŧ āĻļā§āĻ°ā§‡āĻŖā§€, āĻ¸āĻžāĻĒā§āĻ˛āĻžāĻ‡āĻšā§‹āĻ˛ā§āĻĄ āĻāĻŦāĻ‚ āĻĢā§āĻ¯āĻŧā§‡āĻ˛āĻŸā§āĻ¯āĻžāĻ™ā§āĻ•, āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻœā§āĻŦāĻžāĻ˛āĻžāĻ¨ā§€ āĻāĻŦāĻ‚ āĻ­ā§‹āĻ—ā§āĻ¯āĻĒāĻŖā§āĻ¯ āĻ¸āĻ°āĻŦāĻ°āĻžāĻšā§‡āĻ° āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ? āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ†āĻŦāĻžāĻ° āĻāĻ•āĻ‡ āĻ•ā§āĻ˛āĻžāĻ¸ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻāĻ¸āĻ†āĻ°āĻĒāĻŋ āĻ¨ā§€āĻ¤āĻŋāĻ° āĻ˛āĻ™ā§āĻ˜āĻ¨āĨ¤ āĻāĻ° āĻāĻŸāĻž āĻ āĻŋāĻ• āĻ•āĻ°āĻž āĻ¯āĻžāĻ•.

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. āĻ¤āĻžāĻ°āĻž āĻĻā§āĻœāĻ¨āĻ‡ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸāĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨āĨ¤ āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻĒā§‡āĻ¸āĻ¸ā§āĻŸā§‡āĻļāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯āĻžāĻ¤ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§‡ āĻĒāĻ›āĻ¨ā§āĻĻāĻ¸āĻ‡ āĻ¸āĻžāĻŦāĻ•ā§āĻ˛āĻžāĻ¸ āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻāĻ–āĻ¨, āĻ¯āĻĻāĻŋ āĻĒā§ƒāĻĨāĻŋāĻŦā§€ āĻ…āĻ¨ā§āĻ¯ āĻ•āĻŋāĻ›ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§‡āĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻ‰āĻĒāĻļā§āĻ°ā§‡āĻŖā§€āĻ¤ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻŦ, āĻŽā§‚āĻ˛ āĻļā§āĻ°ā§‡āĻŖāĻŋāĻ¤ā§‡ āĻ¨āĻ¯āĻŧāĨ¤

āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻŋāĻ›ā§ āĻ•ā§āĻ˛āĻžāĻ¸ āĻāĻ–āĻ¨āĻ“ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡āĨ¤ āĻāĻ‡āĻ­āĻžāĻŦā§‡, SupplyReporter āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻ¸āĻžāĻĒā§āĻ˛āĻžāĻ‡āĻšā§‹āĻ˛ā§āĻĄā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ FuelReporter FuelTank āĻāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻŦā§āĻ¸ā§āĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻœā§āĻŦāĻžāĻ˛āĻžāĻ¨ā§€ āĻŸā§āĻ¯āĻžāĻ™ā§āĻ•ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ¯ā§ŒāĻ•ā§āĻ¤āĻŋāĻ• āĻĻā§‡āĻ–āĻžāĻšā§āĻ›ā§‡, āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ•āĻ°āĻž āĻŦāĻŋāĻļā§‡āĻˇāĻ­āĻžāĻŦā§‡ āĻ•āĻ āĻŋāĻ¨ āĻšāĻŦā§‡ āĻ¨āĻž - āĻāĻ•āĻŸāĻŋ āĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻ•ā§‹āĻĄ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž āĻ•āĻ°āĻž āĻ…āĻ¨ā§āĻ¯āĻŸāĻŋāĻ•ā§‡ āĻŦā§āĻ¯āĻžāĻĒāĻ•āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻžāĨ¤

āĻāĻ‡āĻ­āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻŽāĻĄā§āĻ˛āĻžāĻ° āĻ•ā§‹āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ/āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻ¸ā§āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ‡ āĻœāĻžāĻ¤ā§€āĻ¯āĻŧ āĻ•ā§‹āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻ•ā§‹āĻ¨āĻ“ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¨āĻ¯āĻŧ, āĻāĻŸāĻŋ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻšāĻœ āĻ•āĻžāĻœ āĻšāĻŦā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ "āĻāĻļā§āĻŦāĻ°āĻŋāĻ• āĻŦāĻ¸ā§āĻ¤ā§"āĻ•ā§‡ āĻāĻ¸āĻ†āĻ°āĻĒāĻŋāĻ¤ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°ā§‡:

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨