рдЕрдиреБрд╡рд╛рджрдХрд╛рдХрдбреВрди: рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдХрд╛рд╢рд┐рдд
рддреБрдореНрд╣реА рд╡рд┐рдХрд╛рд╕рд╛рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдмрд╣реБрдзрд╛ рд╕реЙрд▓рд┐рдб рддрддреНрддреНрд╡рд╛рдВрдмрджреНрджрд▓ рдРрдХрд▓реЗ рдЕрд╕реЗрд▓. рддреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд▓рд╛ рд╕реНрд╡рдЪреНрдЫ, рд╕реБ-рд╕рдВрд░рдЪрд┐рдд рдЖрдгрд┐ рд╕рд╣рдЬ рджреЗрдЦрднрд╛рд▓ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдХреЛрдб рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдХрд░рддрд╛рдд. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрдордзреНрдпреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╕реЗ рдХрд░рд╛рд╡реЗ рдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрди рдЖрд╣реЗрдд. рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рддрдЬреНрдЮрд╛рдВрдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдХрд▓реНрдкрдирд╛ рдЖрдгрд┐ "рдпреЛрдЧреНрдп рдорд╛рд░реНрдЧ" рдЪреА рд╕рдордЬ рдЕрд╕рддреЗ; рд╣реЗ рд╕рд░реНрд╡ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддреАрдЪреНрдпрд╛ рдЕрдиреБрднрд╡рд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ. рддрдерд╛рдкрд┐, SOLID рдордзреНрдпреЗ рдШреЛрд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрд▓реНрдкрдирд╛ рдЖрдпрдЯреА рд╕рдореБрджрд╛рдпрд╛рдЪреНрдпрд╛ рдЬрд╡рд│рдЬрд╡рд│ рд╕рд░реНрд╡ рдкреНрд░рддрд┐рдирд┐рдзреАрдВрдиреА рд╕реНрд╡реАрдХрд╛рд░рд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдЕрдиреЗрдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рд╡рд┐рдХрд╛рд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкрджреНрдзрддреАрдВрдЪреНрдпрд╛ рдЙрджрдп рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╛рдареА рддреЗ рдкреНрд░рд╛рд░рдВрдн рдмрд┐рдВрджреВ рдмрдирд▓реЗ.
рд╕реЙрд▓рд┐рдб рддрддреНрддреНрд╡реЗ рдХрд╛рдп рдЖрд╣реЗрдд рдЖрдгрд┐ рддреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрд╢реА рдорджрдд рдХрд░рддрд╛рдд рддреЗ рд╕рдордЬреВрди рдШреЗрдКрдпрд╛.
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ: рдкреНрд░реЕрдХреНрдЯрд┐рдХрд▓ рдХреЛрд░реНрд╕
"рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡реНрд╣рд▓рдкрд░ рдкреНрд░реЛ" .рдЖрдореНрд╣реА рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ: рд╕рд░реНрд╡ Habr рд╡рд╛рдЪрдХрд╛рдВрд╕рд╛рдареА - Habr рдкреНрд░реЛрдореЛ рдХреЛрдб рд╡рд╛рдкрд░реВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕рдордзреНрдпреЗ рдирд╛рд╡рдиреЛрдВрджрдгреА рдХрд░рддрд╛рдирд╛ 10 рд░реВрдмрд▓ рд╕рд╡рд▓рдд.
рд╕реЙрд▓рд┐рдб рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?
рд╣реА рд╕рдВрдЬреНрдЮрд╛ рдПрдХ рд╕рдВрдХреНрд╖реЗрдк рдЖрд╣реЗ, рдкрджрд╛рдЪреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдЪреА рд╕реБрд░реВрд╡рд╛рдд рдЖрд╣реЗ:
- SрдЬрдмрд╛рдмрджрд╛рд░реАрдЪреЗ рддрддреНрд╡. рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдмрджрд▓рд╛рдЪреЗ рдПрдХрдЪ рдХрд╛рд░рдг рдЕрд╕реВ рд╢рдХрддреЗ.
рдЕрдЧреЛрджрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд╛рдмреАрд╕рдВрдмрдВрдзреА рдмреЛрд▓рддрд╛рдирд╛ OрдкреЗрди/рдмрдВрдж рддрддреНрддреНрд╡ (рдЦреБрд▓реЗ/рдмрдВрдж рддрддреНрддреНрд╡). рд╡рд░реНрдЧ рдЖрдгрд┐ рдЗрддрд░ рдШрдЯрдХ рд╡рд┐рд╕реНрддрд╛рд░рд╛рд╕рд╛рдареА рдЦреБрд▓реЗ рдЕрд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд, рдкрд░рдВрддреБ рд╕реБрдзрд╛рд░рдгреЗрд╕рд╛рдареА рдмрдВрдж рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд.тАКрдЕрдЧреЛрджрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд╛рдмреАрд╕рдВрдмрдВрдзреА рдмреЛрд▓рддрд╛рдирд╛ Liskov рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рддрддреНрддреНрд╡ (рд▓рд┐рд╕реНрдХреЛрд╡реНрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рддрддреНрддреНрд╡). рдмреЗрд╕ рдЯрд╛рдИрдк рд╡рд╛рдкрд░рдгрд╛рд░реА рдлрдВрдХреНрд╢рдиреНрд╕ рдмреЗрд╕ рдЯрд╛рдИрдкрдЪреЗ рдЙрдкрдкреНрд░рдХрд╛рд░ рдЬрд╛рдгреВрди рди рдШреЗрддрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рд╛рд╡реАрдд.рдЕрдЧреЛрджрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд╛рдмреАрд╕рдВрдмрдВрдзреА рдмреЛрд▓рддрд╛рдирд╛ IрдЗрдВрдЯрд░рдлреЗрд╕ рдкреГрдердХреНрдХрд░рдг рддрддреНрддреНрд╡ тАК (рдЗрдВрдЯрд░рдлреЗрд╕ рд╡реЗрдЧрд│реЗ рдХрд░рдгреНрдпрд╛рдЪреЗ рддрддреНрд╡). рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╕рдВрд╕реНрдерд╛рдВрдиреА рддреЗ рд╡рд╛рдкрд░рдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдирд╕рд╛рд╡реЗ.рдЕрдЧреЛрджрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд╛рдмреАрд╕рдВрдмрдВрдзреА рдмреЛрд▓рддрд╛рдирд╛ DрдЕрдкреЗрдВрдбреЗрдВрд╕реА рдЙрд▓рдерд╛рдкрд╛рд▓рде рддрддреНрддреНрд╡ (рдЕрд╡рд▓рдВрдмрди рдЙрд▓рдерд╛рдкрд╛рд▓рде рддрддреНрддреНрд╡). рдЙрдЪреНрдЪ рд╕реНрддрд░рд╛рд╡рд░реАрд▓ рдореЙрдбреНрдпреВрд▓ рдЦрд╛рд▓рдЪреНрдпрд╛ рд╕реНрддрд░рд╛рд╡рд░реАрд▓ рдореЙрдбреНрдпреВрд▓рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдирд╕рд╛рд╡реЗрдд.
рдПрдХрд▓ рдЬрдмрд╛рдмрджрд╛рд░реА рддрддреНрддреНрд╡
тАК
рд╕рд┐рдВрдЧрд▓ рд░рд┐рд╕реНрдкреЙрдиреНрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдкреНрд░рд┐рдиреНрд╕рд┐рдкрд▓ (SRP) рд╕рд╛рдВрдЧрддреЗ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХрд┐рдВрд╡рд╛ рдореЙрдбреНрдпреВрд▓ рддреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреНрдпрд╛ рдлрдХреНрдд рдПрдХрд╛ рднрд╛рдЧрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЕрд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдпрд╛ рдЬрдмрд╛рдмрджрд╛рд░реАрдЪреЗ рдШрдЯрдХ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧрд╛рдВрдордзреНрдпреЗ рд╡рд┐рдЦреБрд░рд▓реЗ рдЬрд╛рдгреНрдпрд╛рдРрд╡рдЬреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╡рд░реНрдЧрд╛рд▓рд╛ рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рдЬрд╛рд╡реЗ. SRP рдЪреЗ рд╡рд┐рдХрд╛рд╕рдХ рдЖрдгрд┐ рдореБрдЦреНрдп рдкреНрд░рдЪрд╛рд░рдХ, рд░реЙрдмрд░реНрдЯ рдПрд╕. рдорд╛рд░реНрдЯрд┐рди, рдмрджрд▓рд╛рдЪреЗ рдХрд╛рд░рдг рдореНрд╣рдгреВрди рдЬрдмрд╛рдмрджрд╛рд░реАрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд. "рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЭрд╛рдЗрдирдЪреА рддрддреНрддреНрд╡реЗ" рдпрд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рдорд╛рддреАрд▓ рдПрдХ рдШрдЯрдХ рдореНрд╣рдгреВрди рддреНрдпрд╛рдВрдиреА рд╣рд╛ рд╢рдмреНрдж рдореВрд│рддрдГ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗрд▓рд╛. рдЯреЙрдо рдбреАрдорд╛рд░реНрдХреЛрдиреЗ рдкреВрд░реНрд╡реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрдиреЗрдХреНрдЯрд┐рд╡реНрд╣рд┐рдЯреА рдкреЕрдЯрд░реНрдирдЪрд╛ рдмрд░рд╛рдЪрд╕рд╛ рднрд╛рдЧ рдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЖрд╣реЗ.
рдбреЗрд╡реНрд╣рд┐рдб рдкрд░реНрдирд╛рд╕ рдпрд╛рдВрдиреА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдиреЗрдХ рд╕рдВрдХрд▓реНрдкрдирд╛рдВрдЪрд╛рд╣реА рдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрдд рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддрд╛. рджреЛрди рдореБрдЦреНрдп рдореНрд╣рдгрдЬреЗ encapsulation рдЖрдгрд┐ рдорд╛рд╣рд┐рддреА рд▓рдкрд╡рдгреЗ. рдкрд░реНрдгрд╕ рдпрд╛рдВрдиреА рдЕрд╕рд╛ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдХреЗрд▓рд╛ рдХреА рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреЗ рд╣реЗ рдмреНрд▓реЙрдХ рдЖрдХреГрддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╡рд░ рдХрд┐рдВрд╡рд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдирд╕рд╛рд╡реЗ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗ рдЧреНрд░рд╛рд╣рдХрд╛рдВрдирд╛ рдХрд┐рдорд╛рди рдорд╛рд╣рд┐рддреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ.
рддрд╕реЗ, рдорд╛рд░реНрдЯрд┐рдирдиреЗ рдХрдВрдкрдиреАрдЪреНрдпрд╛ рд╡рд░рд┐рд╖реНрда рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рдВрд╕рд╣ (рд╕реАрдУрдУ, рд╕реАрдЯреАрдУ, рд╕реАрдПрдлрдУ) рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рд▓реЗ, рдЬреНрдпрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХрдЬрдг рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╣реЗрддреВрдВрд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╕рд╛рдп рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╡рд╛рдкрд░рддреЛ. рдкрд░рд┐рдгрд╛рдореА, рддреНрдпрд╛рдкреИрдХреА рдХреЛрдгреАрд╣реА рдЗрддрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рдВрдЪреНрдпрд╛ рд╣рд┐рддрд╕рдВрдмрдВрдзрд╛рдВрд╡рд░ рдкрд░рд┐рдгрд╛рдо рди рдХрд░рддрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рдордзреАрд▓ рдмрджрд▓ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддреЛ.
рджреИрд╡реА рд╡рд╕реНрддреВ
рдиреЗрд╣рдореАрдкреНрд░рдорд╛рдгреЗ, 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 рд╡рд░реНрдЧ рд╣рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ "рджреЗрд╡ рд╡рд╕реНрддреВ" рдЖрд╣реЗ рдЬреНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡рдХрд╛рд╣реА рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд░рддреЗ. рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрдордзреАрд▓ рд╣рд╛ рдПрдХ рдкреНрд░рдореБрдЦ рдЕрдБрдЯреА-рдкреЕрдЯрд░реНрди рдЖрд╣реЗ. рдирд╡рд╢рд┐рдХреНрдпрд╛рд╕рд╛рдареА, рдЕрд╢рд╛ рд╡рд╕реНрддреВрдВрдЪреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдгреЗ рдЕрддреНрдпрдВрдд рдХрдареАрдг рдЖрд╣реЗ. рдЖрддрд╛рдкрд░реНрдпрдВрдд рд╣рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдЧрджреА рд╕реЛрдкрд╛ рдЖрд╣реЗ, рд╣реЛрдп, рдкрд░рдВрддреБ рдЖрдкрдг рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЬреЛрдбрд▓реНрдпрд╛рд╕ рдХрд╛рдп рд╣реЛрдИрд▓ рдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдХрд░рд╛. рдХрджрд╛рдЪрд┐рдд рдЖрдордЪреНрдпрд╛ рд╕реНрдкреЗрд╕ рд╕реНрдЯреЗрд╢рдирд▓рд╛ рдореЗрдбрд┐рдХрд▓ рд╕реНрдЯреЗрд╢рди рдХрд┐рдВрд╡рд╛ рдореАрдЯрд┐рдВрдЧ рд░реВрдордЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓. рдЖрдгрд┐ рддрд┐рддрдХреА рдЕрдзрд┐рдХ рдлрдВрдХреНрд╢рдиреНрд╕ рдЕрд╕рддреАрд▓ рддрд┐рддрдХреА рд╕реНрдкреЗрд╕рд╕реНрдЯреЗрд╢рди рд╡рд╛рдвреЗрд▓. рдмрд░рдВ, рд╣реА рд╕реБрд╡рд┐рдзрд╛ рдЗрддрд░рд╛рдВрд╢реА рдЬреЛрдбрд▓реА рдЬрд╛рдгрд╛рд░ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рд╕рдВрдкреВрд░реНрдг рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕рдЪреА рд╕реЗрд╡рд╛ рдХрд░рдгреЗ рдЖрдгрдЦреА рдХрдареАрдг рд╣реЛрдИрд▓. рдкрд░рд┐рдгрд╛рдореА, рдЖрдореНрд╣реА рдкреНрд░рд╡реЗрдЧрдХрд╛рдВрдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдирдордзреНрдпреЗ рд╡реНрдпрддреНрдпрдп рдЖрдгреВ рд╢рдХрддреЛ. рдЬрд░ рдПрдЦрд╛рджреНрдпрд╛ рд╕рдВрд╢реЛрдзрдХрд╛рдиреЗ рд╕реЗрдиреНрд╕рд░рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рдгреНрдпрд╛рдЪреА рд╡рд┐рдирдВрддреА рдХреЗрд▓реА, рддрд░ рдпрд╛рдЪрд╛ рд╕реНрдЯреЗрд╢рдирдЪреНрдпрд╛ рд╕рдВрдкреНрд░реЗрд╖рдг рдкреНрд░рдгрд╛рд▓реАрд╡рд░ рдЪрд╛рдВрдЧрд▓рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдК рд╢рдХрддреЛ.
рдПрд╕рдЖрд░рдкреА рддрддреНрддреНрд╡рд╛рдЪреЗ рдЙрд▓реНрд▓рдВрдШрди рдХреЗрд▓реНрдпрд╛рдиреЗ рдЕрд▓реНрдкрдХрд╛рд▓реАрди рд░рдгрдиреАрддрд┐рдХ рд╡рд┐рдЬрдп рдорд┐рд│реВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ рд╢реЗрд╡рдЯреА рдЖрдкрдг тАЬрдпреБрджреНрдз рдЧрдорд╛рд╡реВтАЭ рдЖрдгрд┐ рднрд╡рд┐рд╖реНрдпрд╛рдд рдЕрд╢рд╛ рд░рд╛рдХреНрд╖рд╕рд╛рдЪреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдгреЗ рдЦреВрдк рдХрдареАрдг рд╣реЛрдИрд▓. рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓рд╛ рдХреЛрдбрдЪреНрдпрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд┐рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ, рддреНрдпрд╛рдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдкрд░реЗрд╢рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ. рд╣реЗ рд╕рдордЬреВрди рдШреЗрдКрди, рд╕реНрдкреЗрд╕рд╕реНрдЯреЗрд╢рди рд╡рд░реНрдЧ рдмрджрд▓реВрдпрд╛.
рдЬрдмрд╛рдмрджрд╛рд░реА рд╡рд╛рдЯреВрди рдШреЗрдКрдпрд╛
рд╡рд░ рдЖрдореНрд╣реА рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЬреНрдпрд╛ рд╕реНрдкреЗрд╕рд╕реНрдЯреЗрд╢рди рд╡рд░реНрдЧрд╛рджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рд░рд┐рдлреЕрдХреНрдЯрд░рд┐рдВрдЧ рдХрд░рддрд╛рдирд╛ рдЖрдореНрд╣реА рддреЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡реВ. рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдХреЛрдб 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. рддреЗ рджреЛрдШреЗрд╣реА рд░рд┐рдкреЛрд░реНрдЯрд░ рд╡рд░реНрдЧрд╛рддреАрд▓ рдореБрд▓реЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рд╕реНрдкреЗрд╕рд╕реНрдЯреЗрд╢рди рдХреНрд▓рд╛рд╕рдордзреНрдпреЗ рдЙрджрд╛рд╣рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЬреЛрдбрд▓реЗ рдЖрд╣реЗрдд рдЬреЗрдгреЗрдХрд░реВрди рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрд╡рд░реНрдЧ рдЖрд░рдВрдн рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдЖрддрд╛, рдЬрд░ рдкреГрдереНрд╡реАрдиреЗ рдЖрдгрдЦреА рдХрд╛рд╣реА рдмрджрд▓рд╛рдпрдЪреЗ рдард░рд╡рд▓реЗ, рддрд░ рдЖрдкрдг рдореБрдЦреНрдп рд╡рд░реНрдЧрд╛рдд рдирд╛рд╣реА рддрд░ рдЙрдкрд╡рд░реНрдЧрд╛рдд рдмрджрд▓ рдХрд░реВ.
рдЕрд░реНрдерд╛рдд, рдЖрдордЪреЗ рдХрд╛рд╣реА рд╡рд░реНрдЧ рдЕрдЬреВрдирд╣реА рдПрдХрдореЗрдХрд╛рдВрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗрдд. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рд╕рдкреНрд▓рд╛рдпрд░рд┐рдкреЛрд░реНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдкреНрд▓рд╛рдпрд╣реЛрд▓реНрдбрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЛ рдЖрдгрд┐ рдлреНрдпреБрдПрд▓рд░рд┐рдкреЛрд░реНрдЯрд░ рдлреНрдпреБрдПрд▓рдЯрдБрдХрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЛ. рдЕрд░реНрдерд╛рдд, рдмреВрд╕реНрдЯрд░ рдЗрдВрдзрди рдЯрд╛рдХреАрд╢реА рдЬреЛрдбрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкрд░рдВрддреБ рдпреЗрдереЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЖрдзреАрдЪ рддрд╛рд░реНрдХрд┐рдХ рджрд┐рд╕рддреЗ рдЖрдгрд┐ рдмрджрд▓ рдХрд░рдгреЗ рд╡рд┐рд╢реЗрд╖рддрдГ рдХрдареАрдг рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА - рдПрдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рдХреЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреЗ рджреБрд╕рд░реНрдпрд╛рд╡рд░ рдлрд╛рд░рд╕рд╛ рдкрд░рд┐рдгрд╛рдо рдХрд░рдгрд╛рд░ рдирд╛рд╣реА.
рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЖрдореНрд╣реА рдПрдХ рдореЙрдбреНрдпреБрд▓рд░ рдХреЛрдб рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ рдЬрд┐рдереЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ/рдХреНрд▓рд╛рд╕рдЪреНрдпрд╛ рдЬрдмрд╛рдмрджрд╛рд▒реНрдпрд╛ рдЕрдЪреВрдХрдкрдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдЕрд╢рд╛ рдХреЛрдбрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╛рд╣реА, рддреА рд░рд╛рдЦрдгреЗ рд╕реЛрдкреЗ рдХрд╛рдо рдЕрд╕реЗрд▓. рдЖрдореНрд╣реА рд╕рдВрдкреВрд░реНрдг тАЬрджреИрд╡реА рд╡рд╕реНрддреВтАЭ рдЪреЗ SRP рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ.
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ:
- рджреЛрди рд╡рд░реНрд╖рд╛рдВрдЪрд╛ рдкреНрд░реЕрдХреНрдЯрд┐рдХрд▓ рдХреЛрд░реНрд╕
"рдореА рдкреНрд░реЛ рд╡реЗрдм рдбреЗрд╡реНрд╣рд▓рдкрд░ рдЖрд╣реЗ" .- рдСрдирд▓рд╛рдИрди рдХреЛрд░реНрд╕
"0 рд╡рд░реВрди C# рд╡рд┐рдХрд╕рдХ" .- рдПрдХ рд╡рд░реНрд╖рд╛рдЪрд╛ рдкреНрд░реЕрдХреНрдЯрд┐рдХрд▓ рдХреЛрд░реНрд╕
"PHP рд╡рд┐рдХрд╕рдХ 0 рддреЗ PRO" .
рд╕реНрддреНрд░реЛрдд: www.habr.com