-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.lua
More file actions
78 lines (55 loc) · 1.99 KB
/
example.lua
File metadata and controls
78 lines (55 loc) · 1.99 KB
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
---
-- example.lua
package.path = package.path .. ";lib/?/init.lua;lib/?.lua"
local class = require "middleclass"
local ABC = require "abc"
local AbstractClass = class("AbstractClass", ABC)
function AbstractClass:initialize()
-- call ABC constructor
ABC.initialize(self)
-- set all marked abstract methods to class
self:set_abstract_methods(AbstractClass)
end
-- add return self.abstractmethod to mark abstract method
function AbstractClass:first_method()
return self.abstractmethod
end
function AbstractClass:second_method()
return self.abstractmethod
end
-- Implement every abstract method
local CorrectConcreteClass = class("CorrectConcreteClass", AbstractClass)
function CorrectConcreteClass:initialize()
-- call superclass constructor
AbstractClass.initialize(self)
-- check that all abstract methods is overridden
self:check_abstract_methods(CorrectConcreteClass)
end
function CorrectConcreteClass:first_method()
print("I'm correct first method of " .. tostring(self) .. "!")
end
function CorrectConcreteClass:second_method()
print("I'm correct second method of " .. tostring(self) .. "!")
end
-- Implement only one abstract method
local IncorrectConcreteClass = class("IncorrectConcreteClass", AbstractClass)
function IncorrectConcreteClass:initialize()
-- call superclass constructor
AbstractClass.initialize(self)
-- check that all abstract methods is overridden
self:check_abstract_methods(IncorrectConcreteClass)
end
function IncorrectConcreteClass:first_method()
print("I'm correct first method of " .. tostring(self) .. "!")
end
local function main()
-- create instance of correct class
local correct_concrete_class = CorrectConcreteClass()
correct_concrete_class:first_method()
correct_concrete_class:second_method()
-- create instance of incorrect class
local incorrect_concrete_class = IncorrectConcreteClass()
incorrect_concrete_class:first_method()
incorrect_concrete_class:second_method()
end
main()