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
Is Lua an Object Oriented language?

Lua isn't an object oriented languages in the sense that you define classes, create objects with a new method, define interfaces and declare variables to be private or protected ... but never the less is a tool in which you can use object oriented techniques with (indeed) a freedom and flexibility that you don't have with a straitjacket language such as Java.

Have a look at this code ...

Firstly, we define a couple of named pieces of code (functions) which take a table as their parameter, and we provide functionality withing them that manipulates the table:

function effage(animule)
  return animule.age * animule.factor
function stone(thecrows)
  return "as da hills"

We then define a number of tables, each representing a single "something" [object] which contains attributes / properties / characteristic values (choose whatever you feel is the most appropriate word. Significantly, we also add in to the table the function code, just defined above, which can operate on the other elements within that table. We can do this because functions in Lua are held in "first class variable" just like any other user supplied elements, and that an assignment copies a reference, so that we're not cloning hundreds of copies of what could be substantial code.

gypsy = {breed = "dog", age = 3, weight = 28,
  factor = 7, name = 'Gypsy Ellis', efa = effage}
rocky = {breed = "rock", weight = 28,
  type = "Granite", name = 'Rocky Bamboa', efa = stone}
charlie = {breed = "cat", age = 13, weight = 4,
  factor = 6, name = "Charlie Ellis", efa = effage}
flipper = {breed = "dolphin", age = 7, weight = 300,
  factor = 2, name = "Flipper Lichtenstein", efa = effage}

Although "structured" programmers might have chosen to have an array of breeds, an array of ages, etc, we have chosen to use a separate table for each of the disparate value types associated with an individual item - and we can now make up a table of each of those items - a table of tables, if you like, or an "array of objects" if you would like me to start using OO terminology:

pets = {gypsy, charlie, rocky, flipper}

We can then loop through our array of objects, accessing individual member elements (attributes / properties) by name, and running pieces of code which are referenced from within each of them to perform actions on the data they hold ...so that those functions have noe turned (in OO terms) into methods. With different methods referenced within differing objects, you'll see that we've implemented polymorphism via the back door!

for k,v in pairs(pets) do
  print (k,v,v.name)
  -- Following lines identical in effect
  print ("yay",v.efa(v))
  print ("yay",v:efa())

Of particular note are the following:

I am often asked about the difference between a period (dot) and colon when using a table in Lua. The dot refers to a member name and is synonymous with square brackets - indeed
is another way again of saying the same thing. The colon is another way to run the code, but in this case the table is passed in as the first parameter to the function without having to be specified. If you're using your function as a method, it needs to know the table that it's working on, and this is a nice and useful piece of syntactic icing on the cake.

Lua also supports "metatables" to help with the use of Object Oriented style techniques in the language. I have intentionally avoided their use in this example to keep it initially straightforward - give you, dear reader, a few concepts at a time. If you want to read about Metatables in due course, I've posted a follow up article [here].

We offer two different public courses in Lua - a Learning to program in Lua for people without prior programming experience, and Lua Programming for those of you who are converting from another language.
(written 2010-04-01, updated 2010-04-02)

Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
U107 - Object Orientation - the Lua way
  [4753] Lua, Tcl, Python, C and C++ courses - at our Melksham HQ or on your site - forward from July 2017 - (2017-07-02)
  [4573] Classic style OO code - in Lua - (2015-11-05)
  [4572] Tables with values and code in Lua - looks like an object? - (2015-11-05)
  [4273] Dot or Colon separator between table name and member in Lua - what is the difference? - (2014-05-06)
  [4248] Metatables, Metamethods, classes and objects in Lua - (2014-03-18)
  [4117] Is Lua an Object Oriented language? - (2013-06-15)
  [3730] What is a metatable? How do I set one up? How do I use them? Lua - (2012-05-12)
  [3727] Using Lua tables as objects - (2012-05-11)
  [3694] Special __ methods you can use in Lua metatables - (2012-04-12)
  [3683] Weak references in Lua - what are they, and why use them? - (2012-04-04)
  [3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
  [3396] Tables as Objects in Lua - a gentle introduction to data driven programming - (2011-08-17)
  [3142] Private and Public - and things between - (2011-01-22)
  [2710] __index and __newindex in Lua - metatable methods - (2010-04-05)
  [2703] Lua Metatables - (2010-04-02)
  [2455] Lua examples - coroutines, error handling, objects, etc - (2009-10-15)
  [2359] A fresh example - objects the Lua way - (2009-08-13)
  [2318] For Lua Programmers AND for Town Planners - (2009-08-02)
  [1819] Calling base class constructors - (2008-10-03)
  [1743] First class functions in Lua lead to powerful OO facilities - (2008-08-07)
  [1699] If you are learning Lua, here are some more examples - (2008-07-06)
  [1692] Towards Object Oriented Programming in Lua - (2008-06-30)

Back to
The same very simple program in many different programming languages
Previous and next
Horse's mouth home
Forward to
First and last match with Regular Expressions
Some other Articles
Hotel booking in Melksham made easy!
A walk within without - Melksham Without
First and last match with Regular Expressions
Is Lua an Object Oriented language?
The same very simple program in many different programming languages
Lua tables - they are everything
Ruth Davis, 1916 - 2010
Email metrics and filtering
Garlic bread without garlic
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/2701_Is- ... uage-.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat