Skip to content

Instantly share code, notes, and snippets.

@alonsogarciapablo
Last active August 29, 2015 14:16
Show Gist options
  • Save alonsogarciapablo/8b9a71a4d7b4aaa38783 to your computer and use it in GitHub Desktop.
Save alonsogarciapablo/8b9a71a4d7b4aaa38783 to your computer and use it in GitHub Desktop.
The Oscars 2015 - OOP in Ruby
class Genre
MALE = 'man'
FEMALE = 'woman'
def self.count
2
end
end
class Actor
attr_accessor :firstname, :lastname, :genre
def initialize(firstname, lastname, genre)
...
end
def name; "#{@firstname} #{@lastname}" end
def speak; puts speech end
private
def speech
"Hi! I'm #{name}. I'm a #{@genre} and I would like to thank my mom."
end
end
class Director
attr_accessor :firstname, :lastname, :number_of_movies
def initialize(firstname, lastname, number_of_movies)
...
end
def name; "#{@firstname} #{@lastname}" end
def speak; puts speech end
private
def speech
"Hi! I'm #{name}. I directed #{@number_of_movies} movies and I would like to thank my dad."
end
end
brad = Actor.new('Brad', 'Pitt', Genre::MALE)
brad.speak
steven = Director.new('Steven', 'Spielberg', 15)
steven.speak
class Genre
MALE = 'man'
FEMALE = 'woman'
def self.count
2
end
end
class Nomenee
def initialize(firstname, lastname)
@firstname = firstname
@lastname = lastname
end
def name
"#{@firstname} #{@lastname}"
end
# template method
def speak
puts speech
end
end
class Actor < Nomenee
def initialize(firstname, lastname, genre)
super firstname, lastname
@genre = genre
end
private
def speech
"Hi! I'm #{name}. I'm a #{@genre} and I would like to thank my mom."
end
end
class Director < Nomenee
def initialize(firstname, lastname, number_of_movies)
super firstname, lastname
@number_of_movies = number_of_movies
end
private
def speech
"Hi! I'm #{name}. I directed #{@number_of_movies} movies and I would like to thank my dad."
end
end
brad = Actor.new('Brad', 'Pitt', Genre::MALE)
brad.speak
steven = Director.new('Steven', 'Spielberg', 15)
steven.speak
module Oscars
class Genre
MALE = 'man'
FEMALE = 'woman'
def self.count
2
end
end
module Speaker
def speak
say "Hi!"
say speech
say "Thanks"
end
private
def say(something)
puts "#{self.class}: #{something}"
end
end
class Presenter
include Speaker
private
def speech
"Welcome to The Oscars"
end
end
class Person
include Speaker
def initialize(firstname, lastname)
@firstname = firstname
@lastname = lastname
end
def name
"#{@firstname} #{@lastname}"
end
end
class Actor < Person
def initialize(firstname, lastname, genre)
super firstname, lastname
@genre = genre
end
private
def speech
"I'm #{name}. I'm a #{@genre} and I would like to thank my mom."
end
end
class Director < Person
def initialize(firstname, lastname, number_of_movies)
super firstname, lastname
@number_of_movies = number_of_movies
end
private
def speech
"I'm #{name}. I directed #{@number_of_movies} movies and I would like to thank my dad."
end
end
end
presenter = Oscars::Presenter.new
brad = Oscars::Actor.new('Brad', 'Pitt', Oscars::Genre::MALE)
steven = Oscars::Director.new('Steven', 'Spielberg', 15)
[presenter, brad, steven].each do |speaker|
speaker.speak
end
# Presenter: Hi!
# Presenter: Welcome to The Oscars
# Presenter: Thanks
# Actor: Hi!
# Actor: I'm Brad Pitt. I'm a man and I would like to thank my mom.
# Actor: Thanks
# Director: Hi!
# Director: I'm Steven Spielberg. I directed 15 movies and I would like to thank my dad.
# Director: Thanks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment