Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
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
R108 - Ruby - More Classes and Objects
  [184] MTBF of coffee machines - (2005-01-20)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1587] Some Ruby programming examples from our course - (2008-03-21)
  [2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)
  [2601] Ruby - is_a? v instance_of? - what is the difference? - (2010-01-27)
  [2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
  [2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
  [2620] Direct access to object variable (attributes) in Ruby - (2010-02-02)
  [2623] Object Oriented Ruby - new examples - (2010-02-03)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2977] What is a factory method and why use one? - Example in Ruby - (2010-09-30)
  [2980] Ruby - examples of regular expressions, inheritance and polymorphism - (2010-10-02)
  [3142] Private and Public - and things between - (2011-01-22)
  [3154] Changing a class later on - Ruby - (2011-02-02)
  [3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
  [3260] Ruby - a training example that puts many language elements together to demonstrate the whole - (2011-04-23)
  [3760] Why you should use objects even for short data manipulation programs in Ruby - (2012-06-10)
  [3781] Private, Protected, Public in Ruby. What about interfaces and abstract classes in Ruby? - (2012-06-23)
  [3782] Standard methods available on all objects in Ruby - (2012-06-23)
  [4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
  [4504] Where does Ruby load modules from, and how to load from current directory - (2015-06-03)
  [4550] Build up classes into applications sharing data types in Ruby - (2015-10-23)
  [4551] Testing your new class - first steps with cucumber - (2015-10-23)

R105 - Ruby - Classes and Objects
  [983] Blessing in Perl / Member variable in Ruby - (2006-12-14)
  [1925] Introduction to Object Oriented Programming - (2008-12-06)
  [2609] Scope of variables - important to Ruby on Rails - (2010-01-31)
  [2651] Calculation within objects - early, last minute, or cached? - (2010-02-26)
  [3421] Ruby off the Rails? - (2011-09-06)
  [4009] Clear, concise examples - Ruby classes and objects. - (2013-02-17)
  [4502] Reading and parsing a JSON object in Ruby - (2015-06-01)

R102 - Hello Ruby Objects
  [2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
  [4369] Ruby - the second rung of learning the language - (2014-12-28)
  [4580] Easy example - data record to object and object to data record mapping in Ruby - (2015-11-21)
  [4581] Thin application, thick objects - keep you main code simple. Example in Ruby - (2015-11-21)
  [4673] Separating detailed data code from the main application - Ruby example - (2016-05-16)


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., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2603_Rub ... rimer.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb