Skip to content

Instantly share code, notes, and snippets.

@mjseaman
Forked from dbc-challenges/P5: OO Inheritance.rb
Last active December 19, 2015 05:29
Show Gist options
  • Save mjseaman/5905058 to your computer and use it in GitHub Desktop.
Save mjseaman/5905058 to your computer and use it in GitHub Desktop.
class MotorVehicle
def initialize(args)
@color = args[:color]
@wheels = args[:wheels]
end
def drive
@status = :driving
end
def brake
@status = :stopped
end
def needs_gas?(likelihood)
likelihood.sample
end
end
class Car < MotorVehicle
@@WHEELS = 4
def initialize(args)
args[:wheels] = @@WHEELS
super(args)
end
def needs_gas?
super([true,true,false])
end
end
class Bus < MotorVehicle
attr_reader :passengers
def initialize(args)
super(args)
@num_seats = args[:num_seats]
@fare = args[:fare]
@passengers=[]
end
def drive
return self.brake if stop_requested?
super()
end
def admit_passenger(passenger,money)
@passengers << passenger if money > @fare
end
def stop_requested?
return [true,false].sample
end
def needs_gas? #DUPE
super([true,true,true,false])
end
end
class Motorbike < MotorVehicle
@@WHEELS = 2
def initialize(args)
args[:wheels] = @@WHEELS
super(args)
end
def drive
super()
@speed = :fast
end
def needs_gas? #DUPE
super([true,false,false,false])
end
def weave_through_traffic
@status = :driving_like_a_crazy_person
end
end
#Test Script
puts "BIKE"
bike = Motorbike.new({:color => "blue"})
puts bike.drive
puts bike.brake
puts bike.needs_gas?
puts bike.weave_through_traffic
puts "\nBUS"
bus = Bus.new({:color => "yellow", :wheels => 6, :num_seats => 24, :fare => 2.25})
puts bus.drive
puts bus.brake
puts bus.admit_passenger("Bob Dole", 500)
puts bus.passengers
puts bus.admit_passenger("Jack Handey", 1)
puts bus.passengers
puts "Stop requested? #{bus.stop_requested?}"
puts "Needs gas? #{bus.needs_gas?}"
puts "\nCAR"
car = Car.new({:color => "red"})
puts car.drive
puts car.brake
puts "Car needs gas? #{car.needs_gas?}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment