Last active
July 1, 2017 18:00
-
-
Save stujo/165da836a2e7aeb3d18e to your computer and use it in GitHub Desktop.
ruby_oop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
motorbike = { | |
max_speed: 100, | |
color: :red, | |
number_of_wheels: 2, | |
current_speed: 0, | |
current_heading: 0, | |
engine_running: false, | |
odometer: 0 | |
} | |
puts 'Before Trip:' | |
p motorbike | |
motorbike[:engine_running] = true | |
motorbike[:current_heading] = 90 | |
motorbike[:current_speed] += 45 | |
motorbike[:odometer] += 10 | |
motorbike[:current_speed] -= 15 | |
motorbike[:current_heading] = 180 | |
motorbike[:odometer] += 4 | |
motorbike[:current_speed] = 0 | |
motorbike[:engine_running] = false | |
puts 'After Trip:' | |
p motorbike |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
motorbike = { | |
max_speed: 100, | |
color: :red, | |
number_of_wheels: 2, | |
current_speed: 0, | |
current_heading: 0, | |
engine_running: false, | |
odometer: 0 | |
} | |
puts 'Before Trip:' | |
p motorbike | |
start_engine(motorbike) | |
set_heading(motorbike, 90) # East | |
accelerate(motorbike, 45) # 45 mph | |
drive_distance(motorbike, 10) # 10 miles | |
brake(motorbike, 15) # 30 mph | |
set_heading(motorbike, 180) # South | |
drive_distance(motorbike, 4) # 4 miles | |
stop(motorbike) # brake to 0 mph | |
stop_engine(motorbike) # park it | |
puts 'After Trip:' | |
p motorbike |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Motorbike | |
def initialize | |
@max_speed = 100 | |
@color = :red | |
@number_of_wheels = 2 | |
@current_speed = 0 | |
@current_heading = 0 | |
@engine_running = false | |
@odometer = 0 | |
end | |
def start_engine | |
@engine_running = true | |
end | |
def stop_engine | |
@engine_running = false | |
end | |
def heading=(heading) | |
@current_heading = heading | |
end | |
def accelerate(increase) | |
if @current_speed + increase > @max_speed | |
@current_speed += increase | |
else | |
@current_speed = @max_speed | |
end | |
end | |
def drive_distance(distance) | |
@odometer += distance | |
end | |
def brake(decrease) | |
if @current_speed - decrease > 0 | |
@current_speed -= decrease | |
else | |
stop | |
end | |
end | |
def stop | |
@current_speed = 0 | |
end | |
def to_s | |
<<-LONG_STRING | |
#{@color} motorbike | |
with max speed of #{@max_speed} mph | |
with #{@odometer} miles on the clock | |
LONG_STRING | |
end | |
end | |
motorbike = Motorbike.new | |
puts 'Before Trip:' | |
puts motorbike.to_s | |
motorbike.start_engine | |
motorbike.heading = 90 # East | |
motorbike.accelerate(45) # 45 mph | |
motorbike.drive_distance(10) # 10 miles | |
motorbike.brake(15) # 30 mph | |
motorbike.heading = 180 # South | |
motorbike.drive_distance(4) # 4 miles | |
motorbike.stop | |
motorbike.stop_engine | |
puts 'After Trip:' | |
puts motorbike.to_s |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Motorbike | |
def initialize(color, max_speed) | |
@color = color | |
@max_speed = max_speed | |
@number_of_wheels = 2 | |
@current_speed = 0 | |
@current_heading = 0 | |
@engine_running = false | |
@odometer = 0 | |
end | |
def start_engine | |
@engine_running = true | |
end | |
def stop_engine | |
@engine_running = false | |
end | |
def heading=(heading) | |
@current_heading = heading | |
end | |
def accelerate(increase) | |
if @current_speed + increase > @max_speed | |
@current_speed += increase | |
else | |
@current_speed = @max_speed | |
end | |
end | |
def drive_distance(distance) | |
@odometer += distance | |
end | |
def brake(decrease) | |
if @current_speed - decrease > 0 | |
@current_speed -= decrease | |
else | |
stop | |
end | |
end | |
def stop | |
@current_speed = 0 | |
end | |
def to_s | |
<<-LONG_STRING | |
#{@color} motorbike | |
with max speed of #{@max_speed} mph | |
with #{@odometer} miles on the clock | |
LONG_STRING | |
end | |
end | |
motorbike = Motorbike.new(:blue, 80) | |
puts 'Before Trip:' | |
puts motorbike.to_s | |
motorbike.start_engine | |
motorbike.heading = 90 # East | |
motorbike.accelerate(45) # 45 mph | |
motorbike.drive_distance(10) # 10 miles | |
motorbike.brake(15) # 30 mph | |
motorbike.heading = 180 # South | |
motorbike.drive_distance(4) # 4 miles | |
motorbike.stop | |
motorbike.stop_engine | |
puts 'After Trip:' | |
puts motorbike.to_s |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Vehicle | |
def initialize(color, max_speed, number_of_wheels) | |
@color = color | |
@max_speed = max_speed | |
@number_of_wheels = number_of_wheels | |
@current_speed = 0 | |
@current_heading = 0 | |
@engine_running = false | |
@odometer = 0 | |
end | |
def start_engine | |
@engine_running = true | |
end | |
def stop_engine | |
@engine_running = false | |
end | |
def heading=(heading) | |
@current_heading = heading | |
end | |
def accelerate(increase) | |
if @current_speed + increase > @max_speed | |
@current_speed += increase | |
else | |
@current_speed = @max_speed | |
end | |
end | |
def drive_distance(distance) | |
@odometer += distance | |
end | |
def brake(decrease) | |
if @current_speed - decrease > 0 | |
@current_speed -= decrease | |
else | |
stop | |
end | |
end | |
def stop | |
@current_speed = 0 | |
end | |
def to_s | |
<<-LONG_STRING | |
#{@color} #{self.class.name} | |
with max speed of #{@max_speed} mph | |
with #{@odometer} miles on the clock | |
LONG_STRING | |
end | |
end | |
class Motorbike < Vehicle | |
def initialize(color, max_speed) | |
super(color, max_speed, 2) | |
end | |
end | |
def take_trip(vehicle) | |
puts 'Before Trip:' | |
puts vehicle.to_s | |
vehicle.start_engine | |
vehicle.heading = 90 # East | |
vehicle.accelerate(45) # 45 mph | |
vehicle.drive_distance(10) # 10 miles | |
vehicle.brake(15) # 30 mph | |
vehicle.heading = 180 # South | |
vehicle.drive_distance(4) # 4 miles | |
vehicle.stop | |
vehicle.stop_engine | |
puts 'After Trip:' | |
puts vehicle.to_s | |
end | |
motorbike = Motorbike.new(:blue, 80) | |
take_trip(motorbike) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Vehicle | |
def initialize(color, max_speed, number_of_wheels) | |
@color = color | |
@max_speed = max_speed | |
@number_of_wheels = number_of_wheels | |
@current_speed = 0 | |
@current_heading = 0 | |
@engine_running = false | |
@odometer = 0 | |
end | |
def start_engine | |
@engine_running = true | |
end | |
def stop_engine | |
@engine_running = false | |
end | |
def heading=(heading) | |
@current_heading = heading | |
end | |
def accelerate(increase) | |
if @current_speed + increase > @max_speed | |
@current_speed += increase | |
else | |
@current_speed = @max_speed | |
end | |
end | |
def drive_distance(distance) | |
@odometer += distance | |
end | |
def brake(decrease) | |
if @current_speed - decrease > 0 | |
@current_speed -= decrease | |
else | |
stop | |
end | |
end | |
def stop | |
@current_speed = 0 | |
end | |
def to_s | |
<<-LONG_STRING | |
#{@color} #{self.class.name} | |
with max speed of #{@max_speed} mph | |
with #{@odometer} miles on the clock | |
LONG_STRING | |
end | |
end | |
class Motorbike < Vehicle | |
def initialize(color, max_speed) | |
super(color, max_speed, 2) | |
end | |
end | |
class EighteenWheeler < Vehicle | |
def initialize(color, max_speed) | |
super(color, max_speed, 18) | |
end | |
end | |
def take_trip(vehicle) | |
puts 'Before Trip:' | |
puts vehicle.to_s | |
vehicle.start_engine | |
vehicle.heading = 90 # East | |
vehicle.accelerate(45) # 45 mph | |
vehicle.drive_distance(10) # 10 miles | |
vehicle.brake(15) # 30 mph | |
vehicle.heading = 180 # South | |
vehicle.drive_distance(4) # 4 miles | |
vehicle.stop | |
vehicle.stop_engine | |
puts 'After Trip:' | |
puts vehicle.to_s | |
end | |
motorbike = Motorbike.new(:blue, 80) | |
take_trip(motorbike) | |
truck = EighteenWheeler.new(:green, 75) | |
take_trip(truck) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Transportation | |
module Heading | |
NORTH = 0 | |
EAST = 90 | |
SOUTH = 180 | |
WEST = 270 | |
end | |
HEADING_DEFAULT = Heading::NORTH | |
class Vehicle | |
attr_reader :max_speed, :color, :odometer | |
attr_accessor :heading | |
def initialize(color, max_speed, number_of_wheels) | |
@color = color | |
@max_speed = max_speed | |
@number_of_wheels = number_of_wheels | |
@current_speed = 0 | |
@current_heading = HEADING_DEFAULT | |
@engine_running = false | |
@odometer = 0 | |
end | |
def start_engine | |
@engine_running = true | |
end | |
def stop_engine | |
@engine_running = false | |
end | |
def accelerate(increase) | |
if @current_speed + increase > max_speed | |
@current_speed += increase | |
else | |
@current_speed = max_speed | |
end | |
end | |
def drive_distance(distance) | |
@odometer += distance | |
end | |
def brake(decrease) | |
if @current_speed - decrease > 0 | |
@current_speed -= decrease | |
else | |
stop | |
end | |
end | |
def stop | |
@current_speed = 0 | |
end | |
def to_s | |
<<-LONG_STRING | |
#{color} #{self.class.name} | |
with max speed of #{max_speed} mph | |
with #{odometer} miles on the clock | |
LONG_STRING | |
end | |
end | |
class Motorbike < Vehicle | |
def initialize(color, max_speed) | |
super(color, max_speed, 2) | |
end | |
end | |
class EighteenWheeler < Vehicle | |
def initialize(color, max_speed) | |
super(color, max_speed, 18) | |
end | |
end | |
end | |
module Driver | |
def log_vehicle_state(message, vehicle) | |
puts "#{message} : " | |
puts vehicle.to_s | |
end | |
def take_trip(vehicle) | |
log_vehicle_state 'Before Trip', vehicle | |
vehicle.start_engine | |
vehicle.heading = 90 # East | |
vehicle.accelerate(45) # 45 mph | |
vehicle.drive_distance(10) # 10 miles | |
vehicle.brake(15) # 30 mph | |
vehicle.heading = 180 # South | |
vehicle.drive_distance(4) # 4 miles | |
vehicle.stop | |
vehicle.stop_engine | |
log_vehicle_state 'After Trip', vehicle | |
end | |
end | |
motorbike = Transportation::Motorbike.new(:blue, 80) | |
Driver.take_trip(motorbike) | |
truck = Transportation::EighteenWheeler.new(:green, 75) | |
take_trip(truck) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Physics | |
module Velocity | |
def initialize | |
@current_speed = 0 | |
end | |
def accelerate(increase) | |
if @current_speed + increase > max_speed | |
@current_speed += increase | |
else | |
@current_speed = max_speed | |
end | |
end | |
def brake(decrease) | |
if @current_speed - decrease > 0 | |
@current_speed -= decrease | |
else | |
stop | |
end | |
end | |
def stop | |
@current_speed = 0 | |
end | |
end | |
end | |
module Transportation | |
module Heading | |
NORTH = 0 | |
EAST = 90 | |
SOUTH = 180 | |
WEST = 270 | |
end | |
HEADING_DEFAULT = Heading::NORTH | |
class Vehicle | |
include Physics::Velocity | |
attr_reader :max_speed, :color, :odometer, :engine_running | |
attr_accessor :heading | |
def initialize( opts = {}) | |
super() | |
@color = opts.fetch(:color, :red) | |
@max_speed = opts[:max_speed] || 100 | |
@current_heading = HEADING_DEFAULT | |
@engine_running = false | |
@odometer = 0 | |
end | |
def start_engine | |
@engine_running = true | |
end | |
def stop_engine | |
@engine_running = false | |
end | |
def drive_distance(distance) | |
@odometer += distance | |
end | |
def vehicle_type | |
self.class.name | |
end | |
def to_s | |
<<-LONG_STRING | |
#{color} #{number_of_wheels} wheeled #{vehicle_type} | |
with max speed of #{max_speed} mph | |
with #{odometer} miles on the clock | |
LONG_STRING | |
end | |
end | |
class Motorbike < Vehicle | |
def initialize(color, max_speed) | |
super(:color => color, | |
:max_speed => max_speed | |
) | |
end | |
def number_of_wheels | |
2 | |
end | |
def vehicle_type | |
'MotorCycle' | |
end | |
end | |
class EighteenWheeler < Vehicle | |
def initialize(color, max_speed) | |
super(:color => color, | |
:max_speed => max_speed | |
) | |
end | |
def number_of_wheels | |
18 | |
end | |
end | |
end | |
def log_vehicle_state(message, vehicle) | |
puts "#{message} : " | |
puts vehicle.to_s | |
end | |
def take_trip(vehicle) | |
log_vehicle_state 'Before Trip', vehicle | |
vehicle.start_engine | |
vehicle.heading = 90 # East | |
vehicle.accelerate(45) # 45 mph | |
vehicle.drive_distance(10) # 10 miles | |
vehicle.brake(15) # 30 mph | |
vehicle.heading = 180 # South | |
vehicle.drive_distance(4) # 4 miles | |
vehicle.stop | |
vehicle.stop_engine | |
log_vehicle_state 'After Trip', vehicle | |
end | |
motorbike = Transportation::Motorbike.new(:blue, 80) | |
take_trip(motorbike) | |
truck = Transportation::EighteenWheeler.new(:green, 75) | |
take_trip(truck) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment