เดตเดฟเดตเตผเดคเตเดคเดเดจเดฟเตฝ เดจเดฟเดจเตเดจเต: เดจเดฟเดเตเดเตพเดเตเดเดพเดฏเดฟ เดชเตเดฐเดธเดฟเดฆเตเดงเตเดเดฐเดฟเดเตเดเดคเต
เดจเดฟเดเตเดเตพ เดตเดฟเดเดธเดจเดคเตเดคเดฟเดฒเดพเดฃเตเดเตเดเดฟเตฝ, SOLID เดคเดคเตเดตเดเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเต เดจเดฟเดเตเดเตพ เดฎเดฟเดเตเดเดตเดพเดฑเตเด เดเตเดเตเดเดฟเดเตเดเตเดฃเตเดเดพเดเตเด. เดตเตเดคเตเดคเดฟเดฏเตเดณเตเดณเดคเตเด เดจเดจเตเดจเดพเดฏเดฟ เดเดฟเดเตเดเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดคเตเด เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดชเดฐเดฟเดชเดพเดฒเดฟเดเตเดเดพเดตเตเดจเตเดจเดคเตเดฎเดพเดฏ เดเตเดกเต เดเดดเตเดคเดพเตป เด เดต เดชเตเดฐเตเดเตเดฐเดพเดฎเดฑเต เดชเตเดฐเดพเดชเตเดคเดจเดพเดเตเดเตเดจเตเดจเต. เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดเดเดฟเตฝ เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดเตเดฒเดฟ เดเดเตเดเดจเต เดถเดฐเดฟเดฏเดพเดฏเดฟ เดจเดฟเตผเดตเดนเดฟเดเตเดเดพเด เดเดจเตเดจเดคเดฟเดจเต เดจเดฟเดฐเดตเดงเดฟ เดธเดฎเตเดชเดจเดเตเดเดณเตเดฃเตเดเต เดเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดฃเตเดเดคเดพเดฃเต. เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเตเดชเตเดทเตเดฏเดฒเดฟเดธเตเดฑเตเดฑเตเดเตพเดเตเดเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดเดถเดฏเดเตเดเดณเตเด "เดถเดฐเดฟเดฏเดพเดฏ เดชเดพเดค" เดฏเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดงเดพเดฐเดฃเดฏเตเด เดเดฃเตเดเต; เดเดคเตเดฒเตเดฒเดพเด เดเดฐเต เดตเตเดฏเดเตเดคเดฟเดฏเตเดเตเดฏเตเด เด เดจเตเดญเดตเดคเตเดคเต เดเดถเตเดฐเดฏเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, SOLID-เตฝ เดชเตเดฐเดเตเดฏเดพเดชเดฟเดเตเด เดเดถเดฏเดเตเดเตพ เดเดเดฟ เดเดฎเตเดฎเตเดฏเตเดฃเดฟเดฑเตเดฑเดฟเดฏเดฟเดฒเต เดฎเดฟเดเตเดเดตเดพเดฑเตเด เดเดฒเตเดฒเดพ เดชเตเดฐเดคเดฟเดจเดฟเดงเดฟเดเดณเตเด เด เดเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต. เด เดต เดชเดฒ เดจเดฒเตเดฒ เดตเดฟเดเดธเดจ เดฎเดพเดจเตเดเตโเดฎเตเดจเตเดฑเต เดฐเตเดคเดฟเดเดณเตเดเต เดเดตเดฟเตผเดญเดพเดตเดคเตเดคเดฟเดจเตเด เดตเดฟเดเดพเดธเดคเตเดคเดฟเดจเตเด เดคเตเดเดเตเดเดฎเดฟเดเตเดเต.
SOLID เดคเดคเตเดคเตเดตเดเตเดเตพ เดเดจเตเดคเดพเดฃเตเดจเตเดจเตเด เด
เดต เดเดเตเดเดจเตเดฏเดพเดฃเต เดจเดฎเตเดฎเต เดธเดนเดพเดฏเดฟเดเตเดเตเดจเตเดจเดคเตเดจเตเดจเตเด เดจเดฎเตเดเตเดเต เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเดพเด.
เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเต: เดชเตเดฐเดพเดฏเตเดเดฟเด เดเตเดดเตเดธเต
"เดฎเตเดฌเตเตฝ เดกเตเดตเดฒเดชเตเดชเตผ PRO" .เดเดเตเดเตพ เดเตผเดฎเตเดฎเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต: "Habr"-เดจเตเดฑเต เดเดฒเตเดฒเดพ เดตเดพเดฏเดจเดเตเดเดพเตผเดเตเดเตเด - "Habr" เดชเตเดฐเตเดฎเตเดทเดฃเตฝ เดเตเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเตเดเตเดเดฟเดฒเตเด เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดเตเดดเตเดธเดฟเตฝ เดเตเดฐเตเดฎเตเดชเตเตพ 10 เดฑเตเดฌเดฟเตพเดธเต เดเดฟเดดเดฟเดตเต.
เดเดจเตเดคเดพเดฃเต SOLID?
เด เดชเดฆเด เดเดฐเต เดเตเดฐเตเดเตเดเตเดดเตเดคเตเดคเดพเดฃเต, เดชเดฆเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เด เดเตเดทเดฐเดตเตเด เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดคเดคเตเดตเดคเตเดคเดฟเดจเตเดฑเต เดชเตเดฐเดฟเดจเตเดฑเต เดคเตเดเดเตเดเดฎเดพเดฃเต:
- Sเดเดฑเตเดฑ เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดค เดคเดคเตเดตเด. เดเดฐเต เดฎเตเดกเตเดฏเตเดณเดฟเดจเต เดฎเดพเดฑเตเดฑเดคเตเดคเดฟเดจเต เดเดฐเตเดฏเตเดฐเต เดเดพเดฐเดฃเด เดฎเดพเดคเตเดฐเดฎเต เดเดฃเตเดเดพเดเต.
เดฆเดฟ Oเดชเตเดจ/เด เดเดเตเด เดคเดคเตเดตเด (เดคเตเดฑเดจเตเดจ/เด เดเดเตเด เดคเดคเตเดตเด). เดเตเดฒเดพเดธเตเดเดณเตเด เดฎเดฑเตเดฑเต เดเดเดเดเตเดเดณเตเด เดตเดฟเดชเตเดฒเตเดเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เดคเตเดฑเดจเตเดจเดฟเดฐเดฟเดเตเดเดฃเด, เดเดจเตเดจเดพเตฝ เดชเดฐเดฟเดทเตเดเตเดเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เด เดเดเตเดเดฟเดฐเดฟเดเตเดเดฃเด.โเดฆเดฟ Liskov เดธเดฌเตเดธเตเดฑเตเดฑเดฟเดฑเตเดฑเตเดฏเตเดทเตป เดคเดคเตเดตเด (เดฒเดฟเดธเตเดเตเดตเต เดธเดฌเตเดธเตเดฑเตเดฑเดฟเดฑเตเดฑเตเดฏเตเดทเตป เดคเดคเตเดตเด). เด เดเดฟเดธเตเดฅเดพเดจ เดคเดฐเด เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดซเดเดเตโเดทเดจเตเดเตพเดเตเดเต เด เดเดฟเดธเตเดฅเดพเดจ เดคเดฐเดคเตเดคเดฟเดจเตเดฑเต เดเดชเดตเดฟเดญเดพเดเดเตเดเตพ เด เดฑเดฟเดฏเดพเดคเต เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฃเด.เดฆเดฟ Iเดเดจเตเดฑเตผเดซเตเดธเต เดตเตเตผเดคเดฟเดฐเดฟเดเตเดเตฝ เดคเดคเตเดตเด โ (เดเดจเตเดฑเตผเดซเตเดธเต เดตเตเตผเดคเดฟเดฐเดฟเดเตเดเตฝ เดคเดคเตเดตเด). เดธเตเดซเตเดฑเตเดฑเตโเดตเตเดฏเตผ เดธเตเดฅเดพเดชเดจเดเตเดเตพ เด เดต เดเดชเดฏเตเดเดฟเดเตเดเดพเดคเตเดค เดฐเตเดคเดฟเดเดณเต เดเดถเตเดฐเดฏเดฟเดเตเดเดฐเตเดคเต.เดฆเดฟ Dependency เดตเดฟเดชเดฐเตเดค เดคเดคเตเดตเด (เดเดถเตเดฐเดฟเดคเดคเตเดต เดตเดฟเดชเดฐเตเดค เดคเดคเตเดตเด). เดเดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเดฒเตเดณเตเดณ เดฎเตเดกเตเดฏเตเดณเตเดเตพ เดคเดพเดดเตเดจเตเดจ เดคเดฒเดคเตเดคเดฟเดฒเตเดณเตเดณ เดฎเตเดกเตเดฏเตเดณเตเดเดณเต เดเดถเตเดฐเดฏเดฟเดเตเดเดฐเตเดคเต.
เดเด เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดค เดคเดคเตเดตเด
โ
เดธเดฟเดเดเดฟเตพ เดฑเตเดธเตโเดชเตเตบเดธเดฟเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟ เดชเตเดฐเดฟเตปเดธเดฟเดชเตเดชเดฟเตพ (เดเดธเตโเดเตผโเดชเดฟ) เดชเดฑเดฏเตเดจเตเดจเดคเต, เดเดฐเต เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดฒเต เดเดฐเต เดเตเดฒเดพเดธเตเด เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดฎเตเดกเตเดฏเตเดณเตเด เด เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดจเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดญเดพเดเดคเตเดคเดฟเดจเต เดฎเดพเดคเตเดฐเดฎเต เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดฏเดพเดฏเดฟเดฐเดฟเดเตเดเต เดเดจเตเดจเดพเดฃเต. เดเตเดเดพเดคเต, เด เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดคเตเดคเดฟเดจเตเดฑเต เดเดเดเดเตเดเตพ เดฌเดจเตเดงเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดเตเดฒเดพเดธเตเดเดณเดฟเตฝ เดเดฟเดคเดฑเดฟเดเตเดเดฟเดเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดชเดเดฐเด เด
เดตเดฐเตเดเต เดธเตเดตเดจเตเดคเด เดเตเดฒเดพเดธเดฟเดจเต เดจเตฝเดเดฃเด. เดเดธเตเดเตผเดชเดฟเดฏเตเดเต เดกเตเดตเดฒเดชเตเดชเดฑเตเด เดฎเตเดเตเดฏ เดธเตเดตเดฟเดถเตเดทเดเดจเตเดฎเดพเดฏ เดฑเตเดฌเตผเดเตเดเต เดเดธเต. เดฎเดพเตผเดเตเดเดฟเตป, เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดฎเดพเดฃเต เดฎเดพเดฑเตเดฑเดคเตเดคเดฟเดจเตเดณเตเดณ เดเดพเดฐเดฃเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจเดคเต. "เดเดฌเตเดเดเตเดฑเตเดฑเต-เดเดฑเดฟเดฏเดจเตเดฑเดกเต เดกเดฟเดธเตเดจเดฟเดจเตเดฑเต เดคเดคเตเดตเดเตเดเตพ" เดเดจเตเดจ เดคเดจเตเดฑเต เดเตเดคเดฟเดฏเตเดเต เดเดเดเดเตเดเดณเดฟเดฒเตเดจเตเดจเดพเดฏเดฟ เด
เดฆเตเดฆเตเดนเด เด เดชเดฆเด เดเดฆเตเดฏเด เดจเดฟเตผเดฆเตเดฆเตเดถเดฟเดเตเดเต. เดเตเด เดกเดฟเดฎเดพเตผเดเตเดเต เดฎเตเดฎเตเดชเต เดจเดฟเตผเดตเดเดฟเดเตเด เดเดฃเดเตเดฑเตเดฑเดฟเดตเดฟเดฑเตเดฑเดฟ เดชเดพเดฑเตเดฑเตเดฃเดฟเดจเตเดฑเต เดญเตเดฐเดฟเดญเดพเดเดตเตเด เด เดเดถเดฏเด เดเตพเดเตเดเตเดณเตเดณเตเดจเตเดจเต.
เดกเตเดตเดฟเดกเต เดชเตผเดฃเดพเดธเต เดฐเตเดชเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏ เดจเดฟเดฐเดตเดงเดฟ เดเดถเดฏเดเตเดเดณเตเด เด เดเดถเดฏเดคเตเดคเดฟเตฝ เดเตพเดชเตเดชเตเดเตเดจเตเดจเต. เดเตปเดเตเดฏเดพเดชเตโเดธเตเดฒเตเดทเตป, เดตเดฟเดตเดฐเดเตเดเตพ เดฎเดฑเดฏเตเดเตเดเตฝ เดเดจเตเดจเดฟเดตเดฏเดพเดฃเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด เดฐเดฃเตเดเตเด. เดเดฐเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเต เดชเตเดฐเดคเตเดฏเตเด เดฎเตเดกเตเดฏเตเดณเตเดเดณเดพเดฏเดฟ เดตเดฟเดญเดเดฟเดเตเดเตเดจเตเดจเดคเต เดฌเตเดฒเตเดเตเดเต เดกเดฏเดเตเดฐเดฎเตเดเดณเตเดเตเดฏเต เดเดเตเดธเดฟเดเตเดฏเตเดทเตป เดซเตเดฒเตเดเดณเตเดเตเดฏเต เดตเดฟเดถเดเดฒเดจเดคเตเดคเต เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเตเดณเตเดณเดคเดฒเตเดฒเตเดจเตเดจเต เดชเตผเดฃเดธเต เดตเดพเดฆเดฟเดเตเดเต. เดเดคเตเดเตเดเดฟเดฒเตเด เดฎเตเดกเตเดฏเตเดณเตเดเดณเดฟเตฝ เดเตเดฒเดฏเดจเตเดฑเตเดเตพเดเตเดเต เดเดฑเตเดฑเดตเตเด เดเตเดฑเดเตเด เดตเดฟเดตเดฐเดเตเดเตพ เดจเตฝเดเตเดจเตเดจ เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดชเดฐเดฟเดนเดพเดฐเด เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเดฃเด.
เดตเดดเดฟเดฏเดฟเตฝ, เดฎเดพเตผเดเตเดเดฟเตป เดเดฐเต เดเดฎเตเดชเดจเดฟเดฏเตเดเต (COO, CTO, CFO) เดฎเตเดคเดฟเตผเดจเตเดจ เดฎเดพเดจเตเดเตผเดฎเดพเดฐเตเดฎเดพเดฏเดฟ เดฐเดธเดเดฐเดฎเดพเดฏ เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดจเตฝเดเดฟ, เด เดตเดฐเดฟเตฝ เดเดฐเตเดฐเตเดคเตเดคเดฐเตเด เดตเตเดฏเดคเตเดฏเดธเตเดค เดเดตเดถเตเดฏเดเตเดเตพเดเตเดเดพเดฏเดฟ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดธเตเดซเตเดฑเตเดฑเตเดตเตเดฏเตผ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดฎเดฑเตเดฑเต เดฎเดพเดจเตเดเตผเดฎเดพเดฐเตเดเต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดเตเดเดณเต เดฌเดพเดงเดฟเดเตเดเดพเดคเต เด เดตเดฏเดฟเตฝ เดเตผเดเตเดเตเดเตเดเดฟเดฒเตเด เดธเตเดซเตเดฑเตเดฑเตโเดตเตเดฏเดฑเดฟเดฒเต เดฎเดพเดฑเตเดฑเดเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดพเตป เดเดดเดฟเดฏเตเด.
เดฆเตเดตเดฟเด เดตเดธเตเดคเต
เดเดฒเตเดฒเดพเดฏเตเดชเตเดชเตเดดเตเด เดเดจเตเดจเดชเตเดฒเต, SRP เดชเด เดฟเดเตเดเดพเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด เดจเดฒเตเดฒ เดฎเดพเตผเดเด เด เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เดเดพเดฃเตเด เดเดจเตเดจเดคเดพเดฃเต. เดธเดฟเดเดเดฟเตพ เดฑเตเดธเตโเดชเตเตบเดธเดฟเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟ เดคเดคเตเดตเด เดชเดพเดฒเดฟเดเตเดเดพเดคเตเดค เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดจเตเดฑเต เดเดฐเต เดตเดฟเดญเดพเดเด เดจเตเดเตเดเดพเด. เดฌเดนเดฟเดฐเดพเดเดพเดถ เดจเดฟเดฒเดฏเดคเตเดคเดฟเดจเตเดฑเต เดธเตเดตเดญเดพเดตเดตเตเด เดเดเตเดฐเดฟเดฌเตเดฏเตเดเตเดเตเดเดณเตเด เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจ เดฑเตเดฌเดฟ เดเตเดกเดพเดฃเดฟเดคเต.
เดเดฆเดพเดนเดฐเดฃเด เด
เดตเดฒเตเดเดจเด เดเตเดฏเตโเดคเต เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดจเดฟเตผเดฃเตเดฃเดฏเดฟเดเตเดเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเตเด:
เดธเตโเดชเตเดธเตโเดธเตเดฑเตเดฑเตเดทเตป เดเตเดฒเดพเดธเดฟเตฝ เดชเตเดฐเดเตเดฏเดพเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดตเดธเตเดคเตเดเตเดเดณเตเดเต เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดเตเดเตพ.
เดฌเดนเดฟเดฐเดพเดเดพเดถ เดจเดฟเดฒเดฏเดคเตเดคเดฟเดจเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเดตเตผ.
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 เดคเดคเตเดตเด เดฒเดเดเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฐเต เดนเตเดฐเดธเตเดตเดเดพเดฒ เดคเดจเตเดคเตเดฐเดชเดฐเดฎเดพเดฏ เดตเดฟเดเดฏเด เดจเตฝเดเดฟเดฏเตเดเตเดเดพเด, เดเดจเตเดจเดพเตฝ เด เดตเดธเดพเดจเด เดจเดฎเตเดเตเดเต "เดฏเตเดฆเตเดงเด เดจเดทเตเดเดชเตเดชเตเดเตเด", เดญเดพเดตเดฟเดฏเดฟเตฝ เด เดคเตเดคเดฐเดฎเตเดฐเต เดฐเดพเดเตเดทเดธเดจเต เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเดจเตเดจเดคเต เดตเดณเดฐเต เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเตเด. เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดจเต เดเตเดกเดฟเดจเตเดฑเต เดชเตเดฐเดคเตเดฏเตเด เดตเดฟเดญเดพเดเดเตเดเดณเดพเดฏเดฟ เดตเดฟเดญเดเดฟเดเตเดเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต, เด เดตเดฏเดฟเตฝ เดเดฐเตเดจเตเดจเตเด เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดจเดเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดเดณเดพเดฃเต. เดเดคเต เดฎเดจเดธเดฟเดฒเดพเดเตเดเดฟ, เดจเดฎเตเดเตเดเต เดธเตเดชเตเดธเต เดธเตเดฑเตเดฑเตเดทเตป เดเตเดฒเดพเดธเต เดฎเดพเดฑเตเดฑเดพเด.
เดจเดฎเตเดเตเดเต เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเด เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดฏเดพเด
เดธเตโเดชเตเดธเตโเดธเตเดฑเตเดฑเตเดทเตป เดเตเดฒเดพเดธเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดเตเดเตเดจเตเดจ เดจเดพเดฒเต เดคเดฐเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ เดเดเตเดเตพ เดฎเตเดเดณเดฟเตฝ เดจเดฟเตผเดตเดเดฟเดเตเดเต. เดฑเตเดซเดพเดเตโเดเตผ เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ เดเดเตเดเตพ เด เดต เดฎเดจเดธเตเดธเดฟเตฝ เดธเตเดเตเดทเดฟเดเตเดเตเด. เดชเตเดคเตเดเตเดเดฟเดฏ เดเตเดกเต เดเดธเตเดเตผเดชเดฟเดฏเตเดฎเดพเดฏเดฟ เดจเดจเตเดจเดพเดฏเดฟ เดชเตเดฐเตเดคเตเดคเดชเตเดชเตเดเตเดจเตเดจเต.
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
เดเดฐเตเดชเดพเดเต เดฎเดพเดฑเตเดฑเดเตเดเดณเตเดฃเตเดเต, เดชเตเดฐเตเดเตเดฐเดพเด เดคเตเตผเดเตเดเดฏเดพเดฏเตเด เดเดชเตเดชเตเตพ เดฎเดฟเดเดเตเดเดคเดพเดฏเดฟ เดคเตเดจเตเดจเตเดจเตเดจเต. เดเดชเตเดชเตเตพ เดเดเตเดเดณเตเดเต เดธเตโเดชเตเดธเตโเดธเตเดฑเตเดฑเตเดทเตป เดเตเดฒเดพเดธเต เดเดฐเต เดเดฃเตเดเตเดฏเตโเดจเดฑเดพเดฏเดฟ เดฎเดพเดฑเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เด เดคเดฟเตฝ เดเดฐเต เดเตเดเตเดเด เดธเตเตปเดธเดฑเตเดเตพ, เดเดชเดญเตเด เดตเดฟเดคเดฐเดฃ เดธเดเดตเดฟเดงเดพเดจเด, เดเดจเตเดงเดจ เดเดพเดเตเดเต, เดฌเตเดธเตเดฑเตเดฑเดฑเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเตเตพเดชเตเดชเตเดเต เดเดถเตเดฐเดฟเดค เดญเดพเดเดเตเดเตพเดเตเดเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเต.
เดเดคเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเด เดเดชเตเดชเตเตพ เดเดฐเต เด เดจเตเดฌเดจเตเดง เดเตเดฒเดพเดธเต เดเดฃเตเดเต: เดธเตเตปเดธเดฑเตเดเตพ; เดธเดชเตเดฒเต เดนเตเตพเดกเต; เดเดจเตเดงเดจ เดเดพเดเตเดเต; เดคเตเดฐเดธเตเดฑเตเดฑเดฑเตเดเตพ.
เดเตเดกเดฟเดจเตเดฑเต เด เดชเดคเดฟเดชเตเดชเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเดงเดพเดจ เดฎเดพเดฑเตเดฑเดเตเดเดณเตเดฃเตเดเต. เดตเตเดฏเดเตเดคเดฟเดเดค เดซเดเดเตโเดทเดจเตเดเตพ เด เดตเดฐเตเดเต เดธเตเดตเดจเตเดคเด เดเตเดฒเดพเดธเตเดเดณเดฟเตฝ เดเตพเดเตเดเตเดณเตเดณเดฟเดเตเดเตเด เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดชเตเดฐเดตเดเดจเดพเดคเตเดคเดตเตเด เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณเดคเตเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจ เดตเดฟเดงเดคเตเดคเดฟเตฝ เด เดต เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต เดเดจเตเดจเดคเดพเดฃเต. เดฏเตเดเดฟเดชเตเดชเดฟเดจเตเดฑเต เดคเดคเตเดตเด เดชเดฟเดจเตเดคเตเดเดฐเตเดจเตเดจเดคเดฟเดจเต เดธเดฎเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดคเดฏเตเดณเตเดณ เดเดเดเดเตเดเดณเต เดเดเตเดเตพ เดเตเดฐเตเดชเตเดชเตเดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดชเตเดชเตเตพ, เดธเดฟเดธเตเดฑเตเดฑเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดฐเตเดคเดฟ เดฎเดพเดฑเตเดฑเดฃเดฎเตเดเตเดเดฟเตฝ, เดเดฐเต เดนเดพเดทเต เดเดเดจเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เด เดฑเตเดฏเดฟเดฒเตเดเตเดเต เดจเตเดเตเดเตเด, เดธเดชเตเดฒเต เดนเตเตพเดกเต เดเตเดฒเดพเดธเต เดเดชเดฏเตเดเดฟเดเตเดเตเด; เดฎเดฑเตเดฑเต เดฎเตเดกเตเดฏเตเดณเตเดเดณเดฟเตฝ เดธเตเดชเตผเดถเดฟเดเตเดเตเดฃเตเดเดคเดฟเดฒเตเดฒ. เด เดฐเตเดคเดฟเดฏเดฟเตฝ, เดฒเตเดเดฟเดธเตเดฑเตเดฑเดฟเดเต เดเดซเตเดธเตผ เดคเดจเตเดฑเต เดธเตเดเตเดทเดจเดฟเตฝ เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดฎเดพเดฑเตเดฑเด เดตเดฐเตเดคเตเดคเดฟเดฏเดพเตฝ, เดธเตเดฑเตเดฑเตเดทเดจเตเดฑเต เดฌเดพเดเตเดเดฟ เดญเดพเดเดเตเดเตพ เดเตเดเตเดเตเดเดพเดคเตเดฏเดฟเดฐเดฟเดเตเดเตเด. เด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดธเตโเดชเตเดธเตโเดธเตเดฑเตเดฑเตเดทเตป เดเตเดฒเดพเดธเดฟเดจเต เดฎเดพเดฑเตเดฑเดเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเต เด เดฑเดฟเดฏเดพเตป เดชเตเดฒเตเด เดเดดเดฟเดฏเดฟเดฒเตเดฒ.
เดฌเดนเดฟเดฐเดพเดเดพเดถ เดจเดฟเดฒเดฏเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดเดเตเดเดณเตเดเต เดเดฆเตเดฏเตเดเดธเตเดฅเตผ เดฎเดพเดฑเตเดฑเดเตเดเดณเดฟเตฝ เดธเดจเตเดคเตเดทเตเดเดฐเดพเดฃเต, เดเดพเดฐเดฃเด เด เดตเตผเดเตเดเต เดเดตเดถเตเดฏเดฎเตเดณเตเดณเดต เด เดญเตเดฏเตผเดคเตเดฅเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. เดธเดชเตเดฒเต เดนเตเตพเดกเต, เดซเตเดฏเตเดตเตฝ เดเดพเดเตเดเต เดเตเดฒเดพเดธเตเดเดณเดฟเตฝ เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดฑเดฟเดชเตเดชเตเตผเดเตเดเต_เดธเดชเตเดฒเตเดธเต, เดฑเดฟเดชเตเดชเตเตผเดเตเดเต_เดซเตเดฏเตเดตเตฝ เดคเตเดเดเตเดเดฟเดฏ เดฐเตเดคเดฟเดเตพ เดเตเดกเดฟเดจเตเดฃเตเดเตเดจเตเดจเต เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเด. เดฑเดฟเดชเตเดชเตเตผเดเตเดเต เดเตเดฏเตเดฏเตเดจเตเดจ เดฐเตเดคเดฟ เดฎเดพเดฑเตเดฑเดพเตป เดญเตเดฎเดฟ เดเดตเดถเตเดฏเดชเตเดชเตเดเตเดเดพเตฝ เดเดจเตเดคเต เดธเดเดญเดตเดฟเดเตเดเตเด? เดธเดชเตเดฒเต เดนเตเตพเดกเต, เดซเตเดฏเตเดตเตฝ เดเดพเดเตเดเต เดเดจเตเดจเต เดฐเดฃเตเดเต เดเตเดฒเดพเดธเตเดเดณเตเด เดฎเดพเดฑเตเดฑเตเดฃเตเดเดคเตเดฃเตเดเต. เดเดจเตเดงเดจเดตเตเด เดเดชเดญเตเดเดตเดธเตเดคเตเดเตเดเดณเตเด เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดฏเตเดจเตเดจ เดฐเตเดคเดฟ เดฎเดพเดฑเตเดฑเดฃเดฎเตเดเตเดเดฟเตฝ เดเดจเตเดคเตเดเตเดฏเตเดฏเตเด? เดเดฐเตเดชเดเตเดทเต เดจเดฟเดเตเดเตพ เดตเตเดฃเตเดเตเด เดเดฐเต เดเตเดฒเดพเดธเตเดเตพ เดฎเดพเดฑเตเดฑเตเดฃเตเดเดฟ เดตเดฐเตเด. เดเดคเต เดเดคเดฟเดจเดเด เดคเดจเตเดจเต 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. เดฑเดฟเดชเตเดชเตเตผเดเตเดเตผ เดเตเดฒเดพเดธเดฟเดฒเต เดเตเดเตเดเดฟเดเดณเดพเดฃเต เดเดฐเตเดตเดฐเตเด. เดเตเดเดพเดคเต, เดเดเตเดเตพ เดธเตโเดชเตเดธเตโเดธเตเดฑเตเดฑเตเดทเตป เดเตเดฒเดพเดธเดฟเดฒเตเดเตเดเต เดเตปเดธเตโเดฑเตเดฑเตปเดธเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ เดเตเตผเดคเตเดคเต, เด เดคเดฟเดจเดพเตฝ เดเดตเดถเตเดฏเดฎเตเดเตเดเดฟเตฝ เดเดตเดถเตเดฏเดฎเตเดณเตเดณ เดธเดฌเตโเดเตเดฒเดพเดธเต เดเดฐเดเดญเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. เดเดชเตเดชเตเตพ, เดญเตเดฎเดฟ เดฎเดฑเตเดฑเตเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดฎเดพเดฑเตเดฑเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดเดเตเดเตพ เดธเดฌเตเดเตเดฒเดพเดธเตเดธเตเดเดณเดฟเตฝ เดฎเดพเดฑเตเดฑเดเตเดเตพ เดตเดฐเตเดคเตเดคเตเด, เดชเตเดฐเดงเดพเดจ เดเตเดฒเดพเดธเดฟเดฒเตเดเตเดเดฒเตเดฒ.
เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เดเดเตเดเดณเตเดเต เดเดฟเดฒ เดเตเดฒเดพเดธเตเดเตพ เดเดชเตเดชเตเดดเตเด เดชเดฐเดธเตเดชเดฐเด เดเดถเตเดฐเดฏเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เด เดคเดฟเดจเดพเตฝ, เดธเดชเตเดฒเต เดฑเดฟเดชเตเดชเตเตผเดเตเดเตผ เดเดฌเตโเดเดเตเดฑเตเดฑเต เดธเดชเตเดฒเต เดนเตเตพเดกเดฟเดจเต เดเดถเตเดฐเดฏเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เดซเตเดฏเตเดตเตฝ เดฑเดฟเดชเตเดชเตเตผเดเตเดเตผ เดซเตเดฏเตเดตเตฝ เดเดพเดเตเดเดฟเดจเต เดเดถเตเดฐเดฏเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เดฌเตเดธเตเดฑเตเดฑเดฑเตเดเตพ เดเดจเตเดงเดจ เดเดพเดเตเดเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเดฃเด. เดเดจเตเดจเดพเตฝ เดเดตเดฟเดเต เดเดฒเตเดฒเดพเด เดเดคเดฟเดจเดเด เดฏเตเดเตเดคเดฟเดธเดนเดฎเดพเดฏเดฟ เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต, เดฎเดพเดฑเตเดฑเดเตเดเตพ เดตเดฐเตเดคเตเดคเตเดจเตเดจเดคเต เดชเตเดฐเดคเตเดฏเตเดเดฟเดเตเดเต เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเตเดณเตเดณ เดเดพเดฐเตเดฏเดฎเดฒเตเดฒ - เดเดฐเต เดตเดธเตเดคเตเดตเดฟเดจเตเดฑเต เดเตเดกเต เดเดกเดฟเดฑเตเดฑเตเดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดฎเดฑเตเดฑเตเดจเตเดจเดฟเดจเต เดเดพเดฐเตเดฏเดฎเดพเดฏเดฟ เดฌเดพเดงเดฟเดเตเดเดฟเดฒเตเดฒ.
เด เดเตเดเดจเต, เดเดฐเต เดเดฌเตโเดเดเตโเดฑเตเดฑเตเดเดณเตเดเตเดฏเตเด/เดเตเดฒเดพเดธเตเดเดณเตเดเตเดฏเตเด เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดเตเดเตพ เดเตเดคเตเดฏเดฎเดพเดฏเดฟ เดจเดฟเตผเดตเตเดตเดเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดฎเตเดกเตเดฒเดพเตผ เดเตเดกเต เดเดเตเดเตพ เดธเตเดทเตโเดเดฟเดเตเดเต. เด เดคเตเดคเดฐเด เดเตเดกเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฐเต เดชเตเดฐเดถเตเดจเดฎเดฒเตเดฒ, เด เดคเต เดชเดฐเดฟเดชเดพเดฒเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดเตเดฒเดฟเดฏเดพเดฏเดฟเดฐเดฟเดเตเดเตเด. เดเดเตเดเตพ "เดฆเตเดตเดฟเด เดตเดธเตเดคเตเดตเดฟเดจเต" เดฎเตเดดเตเดตเตป เดเดธเตเดเตผเดชเดฟ เดเดเตเดเดฟ เดฎเดพเดฑเตเดฑเดฟ.
เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเต:
- เดฐเดฃเตเดเตเดตเตผเดทเดคเตเดคเต เดชเตเดฐเดพเดเตเดเดฟเดเตเดเตฝ เดเตเดดเตเดธเต
"เดเดพเตป เดเดฐเต PRO เดตเตเดฌเต เดกเตเดตเดฒเดชเตเดชเตผ เดเดฃเต" .- เดเตบเดฒเตเตป เดเตเดดเตเดธเต
"0 เดฎเตเดคเตฝ C# เดกเตเดตเดฒเดชเตเดชเตผ" .- เดชเตเดฐเดพเดฏเตเดเดฟเด เดตเตผเดท เดเตเดดเตเดธเต
"0 เดฎเตเดคเตฝ PRO เดตเดฐเตเดฏเตเดณเตเดณ PHP เดกเดตเดฒเดชเตเดชเตผ" .
เด เดตเดฒเดเดฌเด: www.habr.com