Last active
August 29, 2015 14:16
-
-
Save pabletecodes/8b9a71a4d7b4aaa38783 to your computer and use it in GitHub Desktop.
The Oscars 2015 - OOP in Ruby
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 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 |
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 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 |
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 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