Lua no es un lenguaje de programación orientado a objetos (POO) como Java o Ruby, sin embargo tiene la capacidad de implementar clases y tablas que actúan de forma semejante a la POO.
Este modelo de programación implica una forma particular de pensar y escribir código, en la que se utilizan los elementos básicos vistos anteriormente: variables, expresiones y funciones…, pero organizados de modo más próximo al lenguaje verbal. El hecho de ser un modelo implica que tiene su propia lógica.
La POO nos hace pensar las cosas de una manera más abstracta y con una estructura muy organizada, que sigue un proceso de descomposición del problema diferente. En la programación estructurada se descompone la complejidad en partes más simples y fáciles de codificar, de modo que cada sub-programa realiza una acción, mientras que en la POO lo hace en objetos.
Hay que pensar en el posible escenario de esos objetos para definir sus propiedades y comportamiento. Los objetos son la representación de un concepto, y es necesario describir las propiedades que lo definen y los métodos que gestionan su comportamiento en ese escenario.
Esta forma particular de estructurar el código favorece su reutilización al compartimentarse en módulos independientes.
Primero veremos el funcionamiento de las tablas y después las clases.
1. Tablas
Las tablas son el único tipo de «contenedor» en Lua-Mosaic, funcionan como un array asociativo que almacena un conjunto de elementos ordenados consecutivamente mediante un [id] y organizados en pares: clave y valor (key/value), de manera que puedes almacenar un valor bajo una clave y después recuperarlo usando esa clave.
El orden consecutivo asigna a cada elemento un ID, este ID es una forma numérica consecutiva que en Lua empieza por 1, a diferencia de otros lenguajes que empiezan por 0, y este ID lo identifica de manera que se puede acceder a ese elemento en la programación individualmente. En lua, los datos almacenados pueden ser de cualquier tipo y además se pueden mezclar distintos tipos en una misma tabla (en otros lenguajes un array solo puede almacenar un tipo de datos).