opinion on what??
are you asking about the “metaphysical” aspects of this thread: is OOP good or bad? (neither, inherently, is what I would say)
or are we discussing the merits of imperative vs object-oriented, perhaps even vs functional, and perhaps even vs logical? (far too esoteric for most readers of this forum is what i would suspect)
or the specific mechanisms for implementing OOP via Lua? 30log was mentioned, and uses a simple “prototype” -type system, where a parent “pattern object” (aka prototype, aka template, take your pick) is deep copied onto the child object. this works well for Corona display objects (metamethod classes don’t - you can make it work, but it gets hairy) 30log’s only use of metamethods is to spoof a call to the class as the constructor (so you don’t need an explicit class.new() function)
the other options are “corona-display-objects own an object” or “object owns a corona-display-object” (this is Sphere Game Studios example, and is also probably my favorite arrangement) or they’re independent but linked (a list of corona-display-objects plus a list of objects and a list of links between them - almost a MVC controller setup, except that you (often) can’t fully decouple the view from its behavior, because of events and such or physics, etc.
-- lua-object "owns" display-object anObject = aClass.new(... anObject.view = display.newRect(... -- display-object "owns" lua-object aDisplay = display.newRect(... aDisplay.inst = aClass.new(... -- separate but linked aDisplay = display.newRect(... anObject = aClass.new(... controller = {} controller[aDisplay].model = anObject controller[anObject].view = aDisplay -- prototype-ish (30log style, greatly simplified, shallow) anObject = aClass.new(... aDisplay = display.newRect( for k,v in pairs(anObject) do aDisplay[k] = v end -- metatable chaining, ie implementing metamethod class directly over -- a Corona display object's proxy without wiping it out, is not shown, -- too complex for how much effort i feel like putting in here :D