If you're new to Ruby, but familiar with Object Oriented Programming, you might like to take a quick look at the example that I wrote during yesterday's course which shows how all the major OO elements are implemented in Ruby. The sample source is
[here].
Here are some of the key facts:
• Classes are defined with a
class statement, and the class name must start with a capital letter. The end of the class definition is an
end statement - example:
• Classes that inherit from other classes use a
< notation - example:
class Box < Shape
[snip]
end |
• Methods within classes are defined using the
def keyword, once again through to an
end
def bright()
return (@red + @green + @blue) / 768.0
end |
• The constructor is a method called
initialize
def initialize(red,green,blue)
@red=red
@green=green
@blue=blue
end |
• You may call up the contructor of your parent class with a
super call.
def initialize(red,green,blue,x,y)
super(255-red,green,blue)
@x = x
@y = y
end |
• You do NOT give the object a name in your parameter list in Ruby - if you need to make an explicit reference to the current object, you use
self which is a reserved word.
def lesser (second)
if self.area < second.area
return self
end
return second
end |
• All variables are created / typed / sized as the program runs - there is no need for you to declare them.
andsofourth = Shape.build(4)
glug = [brown, purple, green, andsoon] |
• You refer to a dynamic (object) variable with a leading
@ character, and to a static (class) variable with
@@. Variables that start with
$ are global, and variables that do not have any lead character are local.
No examples of @@ and $ in my program - use them sparingly |
• You can define multiple classes in a single file, and indeed I recommend that you keep groups of classes which will be maintained and distributed together to cut down the number of files, file management time, etc.
• You can (should!) add a test program onto the end of a file that defines class(es) by embedding the test code into a condition which checks if it's being run direct from the command line.
if __FILE__ == $0
[snip]
end |
• You call up the constructor method of a class using the new method on the class.
purple = Circle.new(100,40,200,60) |
• Methods are called using a dot notation. There is no need to follow a method call with a pair of brackets if you are not passing in any parameters.
print "#{current.bright} - #{current.sides} - #{current.area} "
puts current.class |
• You may define a method within the module / namespace of a class also using the dot notation. This is a static method and is useful for (for example) factory methods which return newly constructed objects
who's type may differ depending on the input data
def Shape.build(value)
if value > 5
return Box.new(50,100,150,140,140)
end
return Circle.new(150,150,150,12)
end |
• The ruby interpretter stops at
__END__ so you may park documentation and sample results and other comments at the end of your program
__END__
Dorothy-2:rubob grahamellis$ ruby shapes.rb
0.234375 - 4 - 1250 Box
0.442708333333333 - 1 - 2827.433385 Upper
0.364583333333333 - 1 - 2375.8294415625 Upper
0.592447916666667 - 4 - 19600 Box
0.5859375 - 1 - 113.0973354 Upper
Largest area is 19600
Dorothy-2:rubob grahamellis$ |
I hope that's a quick / useful reminder or introduction to Object Orinetation in Ruby. It assumes prior OO and Ruby knowledge - if you need to learn Ruby, or more about Ruby, please look at our training courses - we offer a
Learning to program in Ruby course for delegates who have never programmed before, and a
Ruby Programming course for delegates who have programmed before, but not in Ruby.
Both courses include an overview of Object Oriented Principles so that you'll come across words like
class and
object and
instance and learn what they mean, as well as going on to talk about
methods,
interitance,
polymorphism,
overriding and much more. I'll also run a session that overviews the principles of object oriented design - how to come up with a scheme that works and is efficient and maintainable, and I'll point to to techniques such as extreme programming and UML, encouraging you to follow some of their principles where it's appropriate to you.
(written 2010-01-29)
Associated topics are indexed under
R102 - Hello Ruby Objects [2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
R105 - Ruby - Classes and Objects [3421] Ruby off the Rails? - (2011-09-06)
[2651] Calculation within objects - early, last minute, or cached? - (2010-02-26)
[2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
[2609] Scope of variables - important to Ruby on Rails - (2010-01-31)
[2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[983] Blessing in Perl / Member variable in Ruby - (2006-12-14)
R108 - Ruby - More Classes and Objects [3260] Ruby - a training example that puts many language elements together to demonstrate the whole - (2011-04-23)
[3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
[3154] Changing a class later on - Ruby - (2011-02-02)
[3142] Private and Public - and things between - (2011-01-22)
[2980] Ruby - examples of regular expressions, inheritance and polymorphism - (2010-10-02)
[2977] What is a factory method and why use one? - Example in Ruby - (2010-09-30)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2623] Object Oriented Ruby - new examples - (2010-02-03)
[2620] Direct access to object variable (attributes) in Ruby - (2010-02-02)
[2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
[2601] Ruby - is_a? v instance_of? - what is the difference? - (2010-01-27)
[1587] Some Ruby programming examples from our course - (2008-03-21)
[1217] What are factory and singleton classes? - (2007-06-04)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[184] MTBF of coffee machines - (2005-01-20)
Some other Articles
Answers on Ruby on RailsSorting arrays and hashes in RubyRuby on Rails - a sample application to teach you howRuby objects - a primerEast of Melksham - Building Work StartsGo Programming Language and Courses?Telling Apache web servers apart / notes for the non-technicalAn excuse for making a sales call