103 lines
1.6 KiB
Ruby
103 lines
1.6 KiB
Ruby
# Animal is-a object
|
|
class Animal
|
|
def initialize(latin_name)
|
|
# Animal has-a latin_name
|
|
@latin_name = latin_name
|
|
end
|
|
end
|
|
|
|
# Dog is-a Animal
|
|
class Dog < Animal
|
|
def initialize(latin_name, name)
|
|
super(latin_name)
|
|
# Dog has-a name
|
|
@name = name
|
|
end
|
|
end
|
|
|
|
# Cat is-a Animal
|
|
class Cat < Animal
|
|
def initialize(latin_name, name)
|
|
super(latin_name)
|
|
# Cat has-a name
|
|
@name = name
|
|
end
|
|
|
|
attr_reader :name
|
|
end
|
|
|
|
# Person is-a object
|
|
class Person
|
|
def initialize(name, pet = nil)
|
|
# Person has-a name
|
|
@name = name
|
|
|
|
# Person has-a pet of some kind
|
|
@pet = pet
|
|
end
|
|
|
|
attr_accessor :pet
|
|
end
|
|
|
|
# Employee is-a Person
|
|
class Employee < Person
|
|
def initialize(name, salary)
|
|
super(name)
|
|
@salary = salary
|
|
end
|
|
end
|
|
# class Employee < Person
|
|
# def initialize(name, salary)
|
|
# # Employee has-a name
|
|
# super(name)
|
|
# # Employee has-a salary
|
|
# @salary = salary
|
|
# end
|
|
# end
|
|
|
|
# Fish is-a object
|
|
class Fish
|
|
end
|
|
|
|
# Salmon is-a Fish
|
|
class Salmon < Fish
|
|
end
|
|
|
|
# Halibut is-a Fish
|
|
class Halibut < Fish
|
|
end
|
|
|
|
# rover is-a Dog
|
|
rover = Dog.new("Latin", "Rover")
|
|
|
|
# satan is-a Cat
|
|
satan = Cat.new("Latin", "Satan")
|
|
|
|
# mary is-a Person
|
|
mary = Person.new("Mary")
|
|
|
|
# mary has-a Pet, satan
|
|
mary.pet = satan
|
|
|
|
# frank is-a Employee
|
|
frank = Employee.new("Frank", 120_000)
|
|
|
|
# frank has-a pet, rover
|
|
frank.pet = rover
|
|
|
|
# flipper is-a Fish
|
|
flipper = Fish.new
|
|
|
|
# crouse is-a Salmon
|
|
crouse = Salmon.new
|
|
|
|
# harry is-a Halibut
|
|
harry = Halibut.new
|
|
|
|
# fidget is-a cat
|
|
fidget = Cat.new("Latin", "Fidget")
|
|
# james is-a Person and has-a pet, Fidget
|
|
james = Person.new("James", fidget)
|
|
|
|
puts james.pet.name # Fidget
|