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

What makes an "Object Oriented Language"? Well - there are certain features you need, such as references, type handing, inheritance support and polymorphism if you're going to write code in a completely OO way, but there are also ways of following the OO paradigm in significant parts with just about any language. Looking back 30 years, I was using what are essentially OO techniques in Fortran.

Much of the week just passed, I was running a Lua course. You'll not find any class keyword, nor any extends ... but you will find tables that let you set the characteristics of data sets, and metatables which let you share a bundle of characteristics, including operator overloading, between a whole series of such tables. "The philosophy of object orientation by the back door". And it's really clever how it's done - a Lua download is only about 2% (yes, that's 2% not 20%) of the size of a Python download - so it's a really compact language. It may be missing 98% of the size, but when you use it you feel you're only missing 20% of the facilities - and many of those you can easily write from first principles.

There's an example of non-OO code in Lua - written by a delegate [here]. For a one-off job, that works well enough (and, let's face it, on a course the exercises are one-offs.). The code for handling the detail of the data is all mixed in with the main application, and the splitting out of specific fields is somewhat repetitive coding. We took the example and refactored elements of it - [here]; the new code is actually a bit shorter, even though there are more comments in it, and it's split into a series of tables (every collection in Lua is a table!) some of which are "stations" containing the data for an individual railway station, with another table containing the code needed to split up data lines in general; we can re-use that part in another application.

In my refactored example, you'll find very much OO style...

  while true do
    line = fh:read()
    if line == nil then break end
    thisStationInfo = Station.factory(line)
    mystations[#mystations+1] = thisStationInfo


  for k,v in ipairs(mystations) do
    if v.Year_data[#v.Year_data] ~= "NULL" then
      pass = tonumber(v.Year_data[#v.Year_data])
      if pass < 1000 then
        print("station", v.fnme, "had", pass, "pasengers")

View the data file [here] - download it from [here] - it's tab delimied, and cutting and pasting the viewed version won't work. If you're running the initial version of the code, note also that there's a difference in there between tabs and spaces. Fixed on the refactor ;-)

  munchkin:lj13 grahamellis$ lua shortplatform
  opening railstats.xyz for read
  railstats.xyz closed
  station Polesworth had 276 pasengers
  station Pilning had 166 pasengers
  station Nethertown had 536 pasengers
  station Shippea Hill had 942 pasengers
  station Ince & Elton had 296 pasengers
  station Stanlow & Thornton had 490 pasengers
  station Balmossie had 804 pasengers
  station Barry Links had 90 pasengers
  station Golf Street had 190 pasengers
  station Tees-Side Airport had 68 pasengers
  station Hopton Heath had 680 pasengers
  station Doleham had 628 pasengers
  station Three Oaks had 532 pasengers
  station Winchelsea had 974 pasengers
  station Lelant Saltings had 622 pasengers
  station Lelant had 324 pasengers
  station Quintrel Downs had 974 pasengers
  munchkin:lj13 grahamellis$

(written 2013-06-15)

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

Back to
International Melksham - industry, and beautiful countryside
Previous and next
Horse's mouth home
Forward to
We not only teach PHP and Python - we teach good PHP and Python Practice!
Some other Articles
Has your Twitter feed stopped working? Switching to their new API
American Circus in Melksham
Melksham - Flower Town
We not only teach PHP and Python - we teach good PHP and Python Practice!
Is Lua an Object Oriented language?
International Melksham - industry, and beautiful countryside
More or less back - what happened to our server the other day
Teaching CodeIgniter - MVC and PHP
Wiltshire and Melksham Transport - what is going on?
Really good friends - four in a bed!
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/4117_Is- ... uage-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb