Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Retiring, March 2020 - sorry, you have missed our final public course.
The Coronavirus situation has lead us to suspend public training - which was on the cards anyway, with no plans to resume

Please ask about private 'maintenance' training for Python, Tcl, Perl, PHP, Lua, etc
Happily continuing private consultancy / programming work
 
Ruby objects - a primer

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:

class Shape

  [snip]

  end


• 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 as below, or enter http://melksh.am/nnnn for individual articles
R102 - Hello Ruby Objects
  [4673] Separating detailed data code from the main application - Ruby example - (2016-05-16)
  [4581] Thin application, thick objects - keep you main code simple. Example in Ruby - (2015-11-21)
  [4580] Easy example - data record to object and object to data record mapping in Ruby - (2015-11-21)
  [4369] Ruby - the second rung of learning the language - (2014-12-28)
  [4009] Clear, concise examples - Ruby classes and objects. - (2013-02-17)
  [2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)

R105 - Ruby - Classes and Objects
  [4502] Reading and parsing a JSON object in Ruby - (2015-06-01)
  [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
  [4551] Testing your new class - first steps with cucumber - (2015-10-23)
  [4550] Build up classes into applications sharing data types in Ruby - (2015-10-23)
  [4504] Where does Ruby load modules from, and how to load from current directory - (2015-06-03)
  [4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
  [3782] Standard methods available on all objects in Ruby - (2012-06-23)
  [3781] Private, Protected, Public in Ruby. What about interfaces and abstract classes in Ruby? - (2012-06-23)
  [3760] Why you should use objects even for short data manipulation programs in Ruby - (2012-06-10)
  [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)


Back to
East of Melksham - Building Work Starts
Previous and next
or
Horse's mouth home
Forward to
Tips for writing a test program (Ruby / Python / Java)
Some other Articles
Answers on Ruby on Rails
Sorting arrays and hashes in Ruby
Ruby on Rails - a sample application to teach you how
Ruby objects - a primer
East of Melksham - Building Work Starts
Go Programming Language and Courses?
Telling Apache web servers apart / notes for the non-technical
An excuse for making a sales call
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2020: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2603_Rub ... rimer.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat