#classes
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
class Song
def to_s()
"Song: #@name---#@artist (#@duration)"
end
end
class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration)
@lyrics = lyrics
end
end
song = Song.new("my fortune", "olojiang", 24)
puts song.inspect
puts song.to_s
class KaraokeSong
def to_s
#"Song: #@name -- #@artist (#@duration) [#@lyrics]"
super + " [#@lyrics]"
end
end
song2 = KaraokeSong.new("discovery" ,"olojiang", 25, "going on..")
puts
puts song2.to_s
class Song
attr_reader :name, :artist, :duration
end
puts song2.artist
class Song
def name
@name
end
def artist
@artist
end
def duration
@duration
end
end
puts song2.name
class Song
def duration=(new_duration)
@duration = new_duration
end
end
puts song2.to_s
song2.duration = 22
puts song2.duration
class Song
attr_writer :name, :artist
end
song2.name = "Hello ruby"
puts song2
class Song
def duration_in_minutes=(new_duration)
@duration = new_duration*60
end
def duration_in_minutes
@duration/60.0
end
end
puts song2.duration_in_minutes;
song2.duration_in_minutes = 4.5;
puts song2.duration;
# class variable
class XSong < Song
@@plays = 0
def initialize(title, artist, duration, plays)
super(title,artist,duration)
@plays = plays
end
def play
@plays += 1
@@plays += 1
puts "This song plays #{@plays} times, total #{@@plays}"
end
end
s2 = XSong.new("test","olojiang",234,0)
s1 = XSong.new("test2","olo",2234,0)
s2.play
s2.play
s1.play
s1.play
s1.play
#Class Method
#File.delete("e:/test.txt")
class SongList
MAX_LENGTH = 5*60
def SongList.is_too_long(length)
puts("length is #{length}: " , length>MAX_LENGTH)
end
end
SongList.is_too_long(s1.duration)
SongList.is_too_long(s2.duration)
#Singletons and Constructor
class Mylogger
private_class_method :new
@@logger = nil
def Mylogger.create
@@logger = new unless @@logger
@@logger
end
end
puts
puts Mylogger.create
puts Mylogger.create
class Shape
def initialize(num_of_sides, perimeter)
end
end
class Shape
def Shape.triangle(side_length)
return Shape.new(3, 3*side_length)
end
def Shape.square(side_length)
return Shape.new(4,4*side_length)
end
end
puts
puts Shape.square(20)
# access control
class Shape
private
def add(a,b)
a+b
end
protected
def minus(a,b)
a-b
end
public
def multiply(a, b)
a*b
end
public :add
private :minus
end
# access contorl example
class Accounts
attr_reader :checking, :savings
def initialize(checking, savings)
@checking = checking
@savings = savings
end
private
def debit(account, amount)
account.balance -= amount
end
def credit(account, amount)
account.balance += amount
end
public
def transfer(amount)
debit(@checking, amount)
credit(@savings, amount)
end
end
class Account
attr_reader :balance
attr_writer :balance
def initialize(balance)
@balance = balance
end
end
checking = Account.new(234)
savings = Account.new(3)
accounts = Accounts.new(checking, savings)
accounts.transfer(100)
puts "checking: #{accounts.checking.balance}"
puts "savings: #{accounts.savings.balance}"
#variable
puts
person="jiwei"
puts person.id
puts person.class
puts person
person2 = person
person3 = person.dup
##person.freeze
person2[0] = "x"
puts "person: #{person}"
puts "person2: #{person2}"
puts "person3: #{person3}"
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
class Song
def to_s()
"Song: #@name---#@artist (#@duration)"
end
end
class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration)
@lyrics = lyrics
end
end
song = Song.new("my fortune", "olojiang", 24)
puts song.inspect
puts song.to_s
class KaraokeSong
def to_s
#"Song: #@name -- #@artist (#@duration) [#@lyrics]"
super + " [#@lyrics]"
end
end
song2 = KaraokeSong.new("discovery" ,"olojiang", 25, "going on..")
puts
puts song2.to_s
class Song
attr_reader :name, :artist, :duration
end
puts song2.artist
class Song
def name
@name
end
def artist
@artist
end
def duration
@duration
end
end
puts song2.name
class Song
def duration=(new_duration)
@duration = new_duration
end
end
puts song2.to_s
song2.duration = 22
puts song2.duration
class Song
attr_writer :name, :artist
end
song2.name = "Hello ruby"
puts song2
class Song
def duration_in_minutes=(new_duration)
@duration = new_duration*60
end
def duration_in_minutes
@duration/60.0
end
end
puts song2.duration_in_minutes;
song2.duration_in_minutes = 4.5;
puts song2.duration;
# class variable
class XSong < Song
@@plays = 0
def initialize(title, artist, duration, plays)
super(title,artist,duration)
@plays = plays
end
def play
@plays += 1
@@plays += 1
puts "This song plays #{@plays} times, total #{@@plays}"
end
end
s2 = XSong.new("test","olojiang",234,0)
s1 = XSong.new("test2","olo",2234,0)
s2.play
s2.play
s1.play
s1.play
s1.play
#Class Method
#File.delete("e:/test.txt")
class SongList
MAX_LENGTH = 5*60
def SongList.is_too_long(length)
puts("length is #{length}: " , length>MAX_LENGTH)
end
end
SongList.is_too_long(s1.duration)
SongList.is_too_long(s2.duration)
#Singletons and Constructor
class Mylogger
private_class_method :new
@@logger = nil
def Mylogger.create
@@logger = new unless @@logger
@@logger
end
end
puts
puts Mylogger.create
puts Mylogger.create
class Shape
def initialize(num_of_sides, perimeter)
end
end
class Shape
def Shape.triangle(side_length)
return Shape.new(3, 3*side_length)
end
def Shape.square(side_length)
return Shape.new(4,4*side_length)
end
end
puts
puts Shape.square(20)
# access control
class Shape
private
def add(a,b)
a+b
end
protected
def minus(a,b)
a-b
end
public
def multiply(a, b)
a*b
end
public :add
private :minus
end
# access contorl example
class Accounts
attr_reader :checking, :savings
def initialize(checking, savings)
@checking = checking
@savings = savings
end
private
def debit(account, amount)
account.balance -= amount
end
def credit(account, amount)
account.balance += amount
end
public
def transfer(amount)
debit(@checking, amount)
credit(@savings, amount)
end
end
class Account
attr_reader :balance
attr_writer :balance
def initialize(balance)
@balance = balance
end
end
checking = Account.new(234)
savings = Account.new(3)
accounts = Accounts.new(checking, savings)
accounts.transfer(100)
puts "checking: #{accounts.checking.balance}"
puts "savings: #{accounts.savings.balance}"
#variable
puts
person="jiwei"
puts person.id
puts person.class
puts person
person2 = person
person3 = person.dup
##person.freeze
person2[0] = "x"
puts "person: #{person}"
puts "person2: #{person2}"
puts "person3: #{person3}"