Many programming languages support the concept of Object-Oriented Programming (OOP). OOP is a methodology that couples data (variables) and logic (functions) into one cohesive unit (object). While Lua is not an object-oriented language, it does provide all the facilities to allow us to implement an object system.
The class is a core construct in OOP. The class is a single template from which multiple objects can be built. A common analogy is to compare a class to the blueprint of a house. The blueprint defines the dimensions and layout of a house, and many houses can be produced from a single blueprint.
Even though many houses can be made from the same blueprint, they are independent of each other. If one home owner adds a room to a house, it will not affect any other houses. But, if a room is added to the blueprint of that house, all future houses will have that room.
Some languages, such as C++ and Java, provide native support for classes, but Lua does not. Instead, in Lua a clever use of meta tables can create a class system. Meta tables can create a prototype-based object system similar to what is found in JavaScript or Action Script.