Понедельник, 08 Марта 2021, 13:17

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [331]
Статьи об общих понятиях связанных с созданием игр.
Программирование [77]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [131]
Статьи о программах для создания игр, уроки и описания.
Софт [32]
Различные программы, в том числе в помощь игроделам.
2D-графика [12]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [12]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [143]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [97]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Разработка игр для вас:
Всего ответов: 10997
Главная » Статьи » Программирование

Объектно Ориентированное Программирование в LUA
Всем привет!
Часто слышу на этом сайте неграмотные "выкрики" в сторону LUA: "не берите луу, у луы нет ООП!", "в луе нет классов, поэтому нет и ООП", "си-шарп мощнее o_O"
Обычно фанатики таких языков программирования как С++ или С# и слышать не хотят, что можно реализовать оОП (не знаю чем заменить это слово, чтобы не повторяться, поэтому буду чередовать регистром XD) иным способом, отличным от общепринятого...
Давайте разберемся, что же все-таки делает этот ООп.... С чем его курят едят?

Во-первых, оОп нужен, чтобы из кучки данных сделать объект и впоследствии манипулировать уже этим объектом:
надеюсь с синтаксисом ЛУА вы уже знакомы...
Код

--создадим "класс" автомобиль
class_car = {}
--инициализируем поля класса
function class_car:new(model, color)
  local object = {}
  object.model = model or "UAZ" -- по умолчанию это будет УАЗ
  object.color = color or "ponos" -- поносового цвета
  --далее идет превращение таблицы в "класс", объяснять не буду, т.к для этого нужна отдельная статья
  setmetatable(object,self)
  self.__index = self --перед index стоит двойное подчеркивание!
  return object -- возвращаем объект!
end

--создадим первый автомобиль!
my_auto = class_car:new("BMW",nil) --получим BMW поносового цвета XD


Добавим два метода, чтобы можно было изменять модель и цвет автомобиля после его создания.
Код

--функция изменения
function class_car:set(model, color)
  self.model = model
  self.color = color
end

--функция получения результата
function class_car:get()
  return self.model, self.color
end

-- проверим!
my_auto = class_car:new("BMW",nil)
-- меняем себе машину ))
my_auto:set("AUDI", "BLACK")
-- проверяем
print(my_auto:get()) -- получим AUDI BLACK


Во-вторых, ООП позволяет экономично использовать память с помошью наследования
создадим новый класс moto и будем наследоваться от class_car
Код

class_moto = {}
--пусть у него будет один свой метод
function class_moto:ololo()
  print("trololo")
end
--наследуемся
setmetatable(class_moto,{__index = class_car})

--проверяем
my_moto = class_moto:new() --создали мото порожденный от класса class_car

--меняем название и цвет
my_moto:set("URAL","BLUE")
print(my_moto:get()) -->мы увидим URAL BLUE


В третьих, ооп сокращает код... Мы можем переназначать методы при наследовании, т.е один и тот же метод будет действовать по разному на родителя и потомка, а это уже полиморфизм!
Например нам нужно, чтобы метод get() возвращал какие-либо другие данные, а не модель и цвет:
Код

-- давайте переназначим метод get() для класса-потомка class_moto
-- после "инициализации класса" class_moto = {}, создадим такой же метод
function class_moto:get()
  return "2000", "year"
end  
--наследуемся
setmetatable(class_moto,{__index = class_car})

--проверим
my_moto = class_moto:new() --создали мото порожденный от класса class_car

--меняем название и цвет
my_moto:set("URAL","BLUE")
print(my_moto:get()) -->мы увидим 2000 year  
--вот он какой полиморфизм  
-- Но что делать если нужно вызвать метод get() родителя? И для этого есть решение!
print(class_car.get(my_moto)) --> URAL BLUE


Ну и полный код для заядлых "копипастеров"


Спасибо за внимание! Надеюсь кому-нибудь это поможет.
Категория: Программирование | Добавил: ant0N (13 Мая 2013) | Автор: Антон
Просмотров: 8888 | Комментарии: 4 | Рейтинг: 4.5/10 |
Теги: наследование, ООП в lua, ЯП, классы, ЛУА, программирование, код, урок по LUA, Полиморфизм, ООП
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Объектно Ориентированное Программирование в LUA», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 4
+2-
4 XXsaneaXX   (02 Июня 2013 11:57) [Материал]
Спс за урок smile

+5-
3 Shkololo_Killer   (15 Мая 2013 14:05) [Материал]
Все работает!!! Отличная статья, автору плюс!!!

+6-
2 pro100denver   (15 Мая 2013 02:17) [Материал]
pro100denverВ одном посту я понял всю суть ООП, которую вкуривал уже немало времени. surprised

+4-
1 Akatsuki   (14 Мая 2013 23:15) [Материал]
Akatsuki!!!! cool

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Open Zelda
  • HGamer3D
  • Crystal Space
  • RuneSword
  • TURBU
  • Awakening
  • NetGore
  • Smile Game Builder
  • RTS Creator
  • Raycasting Game Maker
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2021
    free games download
    Рейтинг