Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Our telephone lines have been repaired - sorry if you couldn't get through
+44 (0) 1225 708225 / 01225 708225
Formally open 9 a.m. to 5 p.m. (but usually around much longer

Python, Lua, Tcl, C and C++ training - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Java, Ruby, MySQL and Linux / Tomcat systems
 
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
    end


and

  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")
      end
    end
  end


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
etc
  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
  [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)
  [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)
  [2701] Is Lua an Object Oriented language? - (2010-04-01)
  [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
International Melksham - industry, and beautiful countryside
Previous and next
or
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!
4750 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 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., 2017: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
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: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat