แแแแ แแแแแแแกแแแ: แแแแแฅแแแงแแแ แแฅแแแแแแแก
แแฃ แแฅแแแ แฎแแ แ แแแแแแแแ แแแแจแ, แแแแ แแแแแแแแแ แแกแแแแแแ 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 แแแ แฉแแแ:
- แแ แฌแแแแแ แแ แแฅแขแแแฃแแ แแฃแ แกแ
"แแ แแแ PRO แแแ แแแแแแแแแ แ" .- แแแแแแ แแฃแ แกแ
"C# แแแแแแแแแ แ 0-แแแ" .- แแ แแฅแขแแแฃแแ แฌแแแก แแฃแ แกแ
"PHP แแแแแแแแแ แ 0-แแแ PRO-แแแ" .
แฌแงแแ แ: www.habr.com