Jump to content

ООП в МТА 1.4


Recommended Posts

fabervox, да я ни коим образом не против библиотек) Просто пытался объяснить GTA-Multiplayer.com что речь шла о встроенной в мта реализации классов, а не о том что это можно реализовать самому средствами луа.

А на свой первоначальный вопрос, заданный в первом посте, я ответ получил. Теперь найти бы нормальную библиотеку, самому делать в лом, да и времени нет особо…

Реализация классов (вернее ее имитация) легко делается средствами Lua. Без библиотек. Таблицами или с использованием метатаблиц.

Можно использовать библиотеки, которые отдельно занимаются этой задачей - окей, ну если уж действительно так хочется.

Но включать костыль с сомнительной необходимостью в МТА?... Впрочем, предложить разработчикам можно, другое дело какие шансы возьмут ли в работу. Кстати, кто-нибудь это им предлагал на bugs.mtasa.com? Я не нашел такого тикета.

Link to comment
  • Replies 56
  • Created
  • Last Reply

Top Posters In This Topic

Реализация классов (вернее ее имитация) легко делается средствами Lua. Без библиотек. Таблицами или с использованием метатаблиц.

Де-факто, эта реализация и будет библиотекой.

А уж будет реализация в виде Lua-модуля, или же в виде модуля MTA, только скорее всего решит набор возможностей. Только вот как быть во втором случае, с клиентскими скриптами, они конечно же будут ограничены в чем-то, и в целом потребуется генерация автономного Lua-кода, независимого от самой библиотеки, в этом и заключается костыль, а заодно и определенные ограничения. Библиотека написанная в самой Lua, не была бы костылем, если бы можно было все что угодно реализовать, и это не сказывалось ни появлением ошибок, ни производительностью.

Мне это не очень и надо пока-что, но тем не менее, глядя на нормальные обзоры реализаций ООП в Lua, я как-то не нашел ни одного без каких-либо "но", и мне кажется странным что у вас все получается без этих "но".

При этом показать есть ли они в вашем варианте или нет, вы не хотите, человеку, которому сразу написали что он неправ. По причине того что времени нет(?). Разве вы не понимали, что выложить картинку файловой структуры, которая вовсе не факт что целесообразна только для ООП, и дать какой-то пример двух принципов, будет недостаточно, потому-что мало кто поверит, в идеальную реализацию без оговорок. И разве когда времени нет, вступают в спор без причины?

Вы говорите что костыли не нужны, но стали бы делать "ООП-стиль" если бы это никому не нужно было?

Я думаю что реализация ООП в Lua-MTA дело не скорое, т.к. видимо сообщество пока не так уж заражено этим(наверно).

Link to comment
  • 3 weeks later...
Создание своих классов не предусмотрено. То что сделали в МТА очень сложно назвать "ООП". То что вызов происходит через точку\двоеточие не значит, что это ООП.

Всё что и добавили в МТА - это всего лишь регистры для Lua позволяющие обращаться к userdata как к таблицам, т.е. вызов методов и доступ к членам. Больше ничего.

В ООП как минимум должно быть Наследование, Полиморфизм хотя бы. В идеале конечно бы и Инкапсуляция ещё.

Предусмотрено. При помощи метатаблиц, как и сами классы в Lua. Это единственный способ, потому что язык не имеет ООП как такового, но даже при помощи метатаблиц это получается почти полноценное ООП.

Обращение через двоеточие - доступ к полям и методам объекта. Полиморфизм ест. Контроль доступа возлагается на плечи программиста. Наследование - пожалуйста, вот наследование. Не можешь изучить основные принципы используемого языка, и требуешь то, что уже есть?

То о чём ты сейчас сказал - это всё касается лишь C++, т.е. то на чём это всё реализовано. Конечно вы это реализовали всё красиво со всеми принципами ООП, как положено - да не спорю, вам удобно, вам хорошо. А что на выходе имеем мы? Только лишь доступ к членам (и то чтобы добавить свои - надо ковырять регистры Lua).

На мета-таблицах это все реализовано, которые аккуратно сложены в _G. Бери и модифицируй как хочешь прямо в рантайме, в пределах вм целого ресурса.

Говоря о Наследовании, Полиморфизме и Инкапсуляции - имелось ввиду в самой Lua. ООП должно быть у нас внутри. А то что вы реализовали ООП на уровне ООП у себя - не говорит ничего. У вас весь МТА на ООП - и что?

См. выше.

Дайте нам возможность создания собственных классов, со всеми выше указанными фишками (наследование и полиморфизм).

См. выше.

В идеале я себе представлял что-то вроде этого:

Возьми и реализуй такой класс, ссылку выше я дал, поля onStart, onStop реализуешь, можешь даже в виде таблиц как в твоем любимом C#, оператор сложения в Lua перегружается тоже.

Естественно без помощи сторонних библиотек, всё должно быть на уровне самой MTA.

Имитация ООП в Lua делается без библиотек, через пару строк и метатаблицы. Достаточно изучить используемый язык. Так что, см. выше.

Link to comment

Может быть вы наконец научитесь читать?

Если кто не понял, под "библиотекой" подразумевалась библиотека написанная на самой Lua.

Не Вам мне объяснять как реализовать классы в Lua посредством самого языка.

Я уже всё в этой теме объяснил, видимо Вы не достаточно понимаете о чём здесь идёт речь.

Link to comment

Библиотека на самой Lua? Ну пожалуйста, Lua определяет метатаблицы и метаметоды, это и есть библиотека для создания собственных классов. Что-то еще? Напишите свой враппер для этих функций, чтобы было "красивенько" и однострочно.

Может, вы имели ввиду создание новых сущностей в игре? Нет, за этим точно не в луа идти нужно, и, надеюсь, зеленый ник вам это позволяет осознавать. А вот общаться в такой манере, как

Не Вам мне объяснять как реализовать классы в Lua посредством самого языка.
точно не дает, тем более что вы сами начали дискуссию на эту тему, в результате которой вам несколько людей указали на вашу неправоту. Это дает повод усомниться в вашей компетенции, и традиционным, благонамеренным решением считается послать человека изучать документацию до тех пор, пока он эту компетенцию не обретет.
Link to comment

Grell, ты ничего не уяснил из предыдущих постов. Судя по твоей логике, зачем вообще мташники добавили псевдо ооп, если есть мета таблицы и можем самим сделать? Мы же предлагаем сделать это все в самой mta, расширить существующие возможности Например создать функцию class и добавить ей функционала.

Link to comment
Библиотека на самой Lua? Ну пожалуйста, Lua определяет метатаблицы и метаметоды, это и есть библиотека для создания собственных классов. Что-то еще? Напишите свой враппер для этих функций, чтобы было "красивенько" и однострочно.

Может, вы имели ввиду создание новых сущностей в игре? Нет, за этим точно не в луа идти нужно, и, надеюсь, зеленый ник вам это позволяет осознавать. А вот общаться в такой манере, как

Не Вам мне объяснять как реализовать классы в Lua посредством самого языка.
точно не дает, тем более что вы сами начали дискуссию на эту тему, в результате которой вам несколько людей указали на вашу неправоту. Это дает повод усомниться в вашей компетенции, и традиционным, благонамеренным решением считается послать человека изучать документацию до тех пор, пока он эту компетенцию не обретет.

Эти несколько людей так и не смогли ответить на вопрос ТС ибо не понимают что требуется, но вместо этого пытаются доказать всем и без этого очевидные вещи. Тем же самым и Вы занимаетесь. Перечитайте тему с самого начала, и хорошенько вдумайтесь, что требовалось.

Так же обратите внимание, то "ООП" которое сейчас реализовано в МТА, можно было бы с таким же успехом реализовать и на самой Lua с помощью тех же метатаблиц. Но об этом вы молчите. Здесь не обсуждается "что можно, а что нельзя", я в своём моде реализовал классы таким образом что даже не надо передавать self, вместо этого скрытно передаётся this и собственно вызов метода происходит через точку. А объявление самого класса почти ничем не отличается от того же C# (за исключением некоторых мелких моментов, но всё равно выглядит очень не плохо). При этом имеется возможность переопределить методы get и set. Естественно это всё давно у меня существует до введения ООП в МТА.

Но опять же так возвращаясь к теме - тут не обсуждаются возможности Lua. Вопрос был другой. Более того речь шла о том, чтобы эти механизмы работали на более низком уровне, а не на Lua, в силу производительности и возможности не подключать lua-файлы в каждый ресурс.

Но судя по Вашей логике, вам и не нужны те же regexp реализованные на C++ и экспортнутые в Lua, наверное просто потому что не видите разницы. Я так понимаю Вы бы и с удовольствием написали свою библиотеку той же preg на Lua и пользовались бы =)

Link to comment

Kernell, все прекрасно поняли Вас и вашу идею, но вопрос ведь в другом: зачем делать из Lua Lua-C++? Все, о чем Вы сказали реализуемо с помощью метатаблиц(ну в прочем как и сказал другой участник выше).

P.S. this реализовал как в плюсах? this->m_Member?

Link to comment
Kernell, все прекрасно поняли Вас и вашу идею, но вопрос ведь в другом: зачем делать из Lua Lua-C++? Все, о чем Вы сказали реализуемо с помощью метатаблиц(ну в прочем как и сказал другой участник выше).

P.S. this реализовал как в плюсах? this->m_Member?

Интересный вопрос, даже не думал о том чтобы делать из него C++. Моей целью было сделать полноценное ООП которое ничем не будет уступать ООП в других языках, в том же C# например. Более того я люблю Си-подобные языки, и терпеть не могу синтаксис типа бейсика, за что собственно не люблю Lua. Синтаксис я старался делать похожим ради того чтобы было просто привычно, и красиво =)

P.S. стрелочку в Lua реализовать не реально, это синтаксическая ошибка. Всё работает через точку, как в C# (хотя и там есть стрелочка).

Link to comment
  • 1 month later...

Может и тупой вопрос, но как быть с ООП в МТА? использовать то что дано в МТА? или же писать свои?

Не давно заглянул в проект Open Dayz Source, правда ничего не понял =)

Так вот, что делать? использовать свои? или то что не давно добавили в 1.4

OFFTOP: Есть идея сделать проект но смотря на все ваши проекты, как-то стало обидно и завидно)

Link to comment
Может и тупой вопрос, но как быть с ООП в МТА? использовать то что дано в МТА? или же писать свои?

Не давно заглянул в проект Open Dayz Source, правда ничего не понял =)

Так вот, что делать? использовать свои? или то что не давно добавили в 1.4

OFFTOP: Есть идея сделать проект но смотря на все ваши проекты, как-то стало обидно и завидно)

Почитай:

viewtopic.php?f=153&t=57987

viewtopic.php?f=153&t=50134

А по поводу делать свои - не понял. :-) От себя советую использовать библиотеку: https://github.com/sbx320/lua_utils/blo ... asslib.lua

Если еще публичная от Kernell'a, но мне эта больше по душе.

Link to comment
А по поводу делать свои - не понял. :-) От себя советую использовать библиотеку: https://github.com/sbx320/lua_utils/blo ... asslib.lua

Если еще публичная от Kernell'a, но мне эта больше по душе.

В ней есть нехороший костыль, который может несколько раз создавать объект. Это как бы не вызовет проблем, но мне например подобные вещи не нравятся.

После того как перепишу серверную часть своего проекта на C#, выложу библиотеку которую я написал для него (там много фишек, например скрытая передача this, вызов методов через точку и т.д.)

Link to comment

Мне Либа от тебя тоже нравится, но в публичной нет очень удобной штуки, как есть у sb320 (правда дописать ее - 10 минут). Вызов методов для userdata, ну пример банальный:

  
local pVehicle = createVehicle( ... ) 
enew( pVehicle, CVehicle, тут можно дописать аргументы в конструктор ) 
pVehicle:SetColor( ... ) 
  

А по поводу this. - это просто дело привычки. self. тоже справляется нормально, тут чисто твой фетиш по поводу С подобных языков. :-)

После того как перепишу серверную часть своего проекта на C#

Через плагин? Скорость не сильно проседает?

Link to comment
Мне Либа от тебя тоже нравится, но в публичной нет очень удобной штуки, как есть у sb320 (правда дописать ее - 10 минут). Вызов методов для userdata

Это есть и в МТАРП (где используется Lua), но это не является частью библиотеки. У меня это в виде отдельного пула который связывает объект класса с нужным элементом.

тут чисто твой фетиш по поводу С подобных языков. :-)

Вырос и воспитан на Сях, терпеть не могу basic-подобные языки =)

Через плагин? Скорость не сильно проседает?

Всё по разному. Вызов функций через плагин в любом случае идёт через Lua. Скорость не сильно проседает. А вот моя библиотека Blowfish на C# работает в 3 раза быстрее чем на Lua.

Link to comment

Вырос и воспитан на Сях, терпеть не могу basic-подобные языки =)

Многими учеными, философами и языковедами, выдвинуто множество концепций связи между языком и мышлением, но всеми ими не оспаривается непосредственная связь между ними.

Языки программирования, как и любые другие языки (как например дорожные знаки - тоже язык, пусть и простой), подчиняются этому принципу. Они серьезно связаны с мышлением (mention) человека.

В случае с вербальными языками, человек, знающий не один язык, а, например, русский и английский, имеет, как билингв, объективное преимущество перед людьми владеющими единственным языком.

Не только мной было замечена твоя "сишность". Без претензий к этому семейству языков, но рассматривать весь многообразный мир программирования с позиции только одного си и его детей, да еще и бравировать этим, по моему мнению, профессинальная стратегическая ошибка. Нужно стать билингвом, мультилингвом, — мир программирования заиграет новыми красками.

Go beyond, bro.

Link to comment

Вырос и воспитан на Сях, терпеть не могу basic-подобные языки =)

Многими учеными, философами и языковедами, выдвинуто множество концепций связи между языком и мышлением, но всеми ими не оспаривается непосредственная связь между ними.

Языки программирования, как и любые другие языки (как например дорожные знаки - тоже язык, пусть и простой), подчиняются этому принципу. Они серьезно связаны с мышлением (mention) человека.

В случае с вербальными языками, человек, знающий не один язык, а, например, русский и английский, имеет, как билингв, объективное преимущество перед людьми владеющими единственным языком.

Не только мной было замечена твоя "сишность". Без претензий к этому семейству языков, но рассматривать весь многообразный мир программирования с позиции только одного си и его детей, да еще и бравировать этим, по моему мнению, профессинальная стратегическая ошибка. Нужно стать билингвом, мультилингвом, — мир программирования заиграет новыми красками.

Go beyond, bro.

Ключевая фраза "по моему мнению". Вот именно, что это твоё мнение, поэтому будь добр, оставь его при себе, а не пиши сообщения в стиле "Смотрите какой я умный". У меня так же есть своё мнение по этому поводу, но я не собираюсь кому-то доказывать что-то, тем более в теме где говорится вообще о других вещах (оффтоп). Чего тебе моя сишность? Следи за собой. Или не к кому докопаться?

"профессинальная стратегическая ошибка" - как ты умудрился вообще связать эти три слова? Профессионал - от слова профессия, а не от "супер-мега специалист".

P.S. В основном заметил, подобные сообщения пишут эдакие диванные эксперты, у которых хватает смелости говорить о профессионализме, но сами они профессионалами в этой области даже близко не являются.

С LuaJIT сравнивалось?

Ещё нет. Лень собирать проект. Как появится ночная версия - постараюсь уделить время.

Link to comment
  • Other Languages Moderators

Вырос и воспитан на Сях, терпеть не могу basic-подобные языки =)

Многими учеными, философами и языковедами, выдвинуто множество концепций связи между языком и мышлением, но всеми ими не оспаривается непосредственная связь между ними.

Языки программирования, как и любые другие языки (как например дорожные знаки - тоже язык, пусть и простой), подчиняются этому принципу. Они серьезно связаны с мышлением (mention) человека.

В случае с вербальными языками, человек, знающий не один язык, а, например, русский и английский, имеет, как билингв, объективное преимущество перед людьми владеющими единственным языком.

Не только мной было замечена твоя "сишность". Без претензий к этому семейству языков, но рассматривать весь многообразный мир программирования с позиции только одного си и его детей, да еще и бравировать этим, по моему мнению, профессинальная стратегическая ошибка. Нужно стать билингвом, мультилингвом, — мир программирования заиграет новыми красками.

Go beyond, bro.

Но не нужно делать из ЯП непонятного монстра. C-like синтаксис очень удобен и привычен. Например, программисту переходя с Си на другой сиподобный ЯП будет очень удобно и он фактически без проблем начнет сразу кодить то, что ему нужно.

Link to comment

кернелл, завязывай из себя корчить самого лучшего во всём, один тут уже слетел с модерации после нескольких таких выпадов. правда тогда был вопрос в отношении к пользователям в стиле "я могу всё, а помогать вам не буду, потому что вы тупые", а у тебя "луа говно, потому что это не си". раздражает читать твои говнопосты.

Link to comment
кернелл, завязывай из себя корчить самого лучшего во всём, один тут уже слетел с модерации после нескольких таких выпадов. правда тогда был вопрос в отношении к пользователям в стиле "я могу всё, а помогать вам не буду, потому что вы тупые", а у тебя "луа говно, потому что это не си". раздражает читать твои говнопосты.

Заметь он слетел с моей помощью, жертвуя своей модеркой, хотя нужно было это больше всего вам и тебе в том числе. Но речь не об этом, а о том "луа говно, потому что это не си" - пару раз сказал об этом, и то не в этой теме.. И что тут такого? Не нравится - не читай, вместо того чтобы писать оффтоп. Я из себя никого не корчу, мне это не нужно в отличии от тебя. Кому надо тот и так знает кто я и на что способен, таких людей конечно же единицы.

Link to comment

цитирую основное: "не читай, если не нравится, я не корчу, я один тут такой способный".

а теперь давай по пунткам:

во-первых: не читай - это как? форум явно не для того, что ты весь такой единичный тут тыкал в то, какой ты умелый и как тебе нравятся сиподобные языки, а для обсуждения луа, мта, гта и всё что с ними связано, и я не собираюсь пропускать твои выпады лишь потому что это написано тобой. найди себе другой форум с аутистами, которые даже читать тебя не будут, потому что ты что-то пишешь и оно не в ходит в рамки их восприятия. могу посоветовать тебе человека даже для такой переписки, всегда вываливает мегабайты текста, но чужие фразы даже не читает: Shaolin. вы одного поля ягодки.

во-вторых: от того, что ты умелый весь такой барин и единичный случай, отношения к людям у тебя явно не стало лучше, только больше понтов, аля мх_мастер, который тоже, многое многое может, а с общением с людьми беда. вы тут все никто, а я ромашка.

в-третих: про то что луа не такой, как тебе нравятся си у тебя написано в каждом посту за последний месяц. не нравится луа - сгруппировался, прыжок прогнувшись и до встреч.

Link to comment
цитирую основное: "не читай, если не нравится, я не корчу, я один тут такой способный".

а теперь давай по пунткам:

во-первых: не читай - это как? форум явно не для того, что ты весь такой единичный тут тыкал в то, какой ты умелый и как тебе нравятся сиподобные языки, а для обсуждения луа, мта, гта и всё что с ними связано, и я не собираюсь пропускать твои выпады лишь потому что это написано тобой. найди себе другой форум с аутистами, которые даже читать тебя не будут, потому что ты что-то пишешь и оно не в ходит в рамки их восприятия. могу посоветовать тебе человека даже для такой переписки, всегда вываливает мегабайты текста, но чужие фразы даже не читает: Shaolin. вы одного поля ягодки.

во-вторых: от того, что ты умелый весь такой барин и единичный случай, отношения к людям у тебя явно не стало лучше, только больше понтов, аля мх_мастер, который тоже, многое многое может, а с общением с людьми беда. вы тут все никто, а я ромашка.

в-третих: про то что луа не такой, как тебе нравятся си у тебя написано в каждом посту за последний месяц. не нравится луа - сгруппировался, прыжок прогнувшись и до встреч.

У кого-то конкретно бомбануло :lol:

Даже я заметил разницу между тем, что было и тем, что имеется сейчас. Раз у меня в каждом сообщении говорится про то, какой не хороший Lua - будь так добр, покажи реальную статистику, иначе получается, Вы у нас п****бол :D

Вообще странное у тебя обо мне мнение сложилось, может быть зависть? Что-то мне подсказывает, что у тебя просто проблемы с самооценкой.

А говоря "не нравится - не читай", я тут скорее имел ввиду, просто пройти мимо. Из всей темы в которой говорится про ООП, и из всего сообщения где обсуждалось ООП, а конкретно библиотека классов, ты из всего контекста выделил только то, что я люблю C++ и превратил этот кусок сообщения в некую ненависить. Сравнивать языки - это нормально. А ты сейчас ведёшь себя как холиварщики "Java vs C#", буд-то тут твою религию затронули :D

Link to comment
У кого-то конкретно бомбануло :lol:

я до последнего терпел. тебя неоднократно греллка унижает по некомпетентности. а то шо я сделал назвается зае**ло.

Даже я заметил разницу между тем, что было и тем, что имеется сейчас. Раз у меня в каждом сообщении говорится про то, какой не хороший Lua - будь так добр, покажи реальную статистику, иначе получается, Вы у нас п****бол :D
А говоря "не нравится - не читай", я тут скорее имел ввиду

Вы у нас п****бол :D

сам себя попустил с небес, сказав одно, поняв иначе, выставив себя дураком, пытаясь тоже самое предъявить мне. увы, мимо кассы, что я хотел сказать было хорошо понято, но обратно под другим соусом подано.

Вообще странное у тебя обо мне мнение сложилось, может быть зависть? Что-то мне подсказывает, что у тебя просто проблемы с самооценкой.

всегда завидую тем, кто много говорит, но всё никак не может закончить свои проекты, которые обещал... хм, год назад? или больше?

Вы

напыщенное высокомерие и попытка казаться важным, а как обычно, оказался в жёлтом влажным.

Сравнивать языки - это нормально. А ты сейчас ведёшь себя как холиварщики "Java vs C#", буд-то тут твою религию затронули :D

опять весь в жёлтом и влажный, я даже не пытаюсь защищать луа или сравнивать его с другими, я даже не пишу, можно сказать. для меня повесить на пикап стандартный шейдер и сделать передачу бабла по команде - абсолютный предел. зато твоё сишное сравнение и самовосхваление тебя же в си глаза замозолило.

удачи дальше разводить холивары луа против си. есть инструмент - пользуйся. руки не подходят - заточи руки, не пеняй на инструмент.

FnE5gQckZuU.jpg

Вы у нас п****бол :D
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...