Найти тему

Замена объектно-ориентированного программирования в скриптах на LUA.

Всем привет!

Сегодня хотел бы рассказать о моем подходе избегания объектно-ориентированного программирования (ООП) в своих скриптах. Сразу предупреждаю, что от увиденного у профессиональных программистов кровь из глаз польется.

Вообще, если кратко, что такое ООП? Это подход к программированию, основанный на объектах. Подход примерно такой: есть, например, класс автомобиль. Определено, что у этого объекта есть свойства: цвет, объем двигателя, масса и пр. На основе этого класса можно создавать объекты. Объекты должны содержать свойства, определенные классом. Например, объект, созданный на базе класса автомобиль, имеет свойства цвет – зеленый, объем двигателя – 1,5 литра, масса – 1200 кг. Как-то так.

В своих скриптах я часто работаю с перечнем бумаг. И в этом случае было бы логичным применять ООП. Создать класс – акция, имеющую свойства: Название, код класса, шаг цены, количество лотов которыми работаем и пр. И на основе этого класса создавать объекты для конкретных акций. Но, я так не делаю. Почему – это другой вопрос. Наверное, потому что когда я начинал писать скрипты на LUA, я толком не разбирался в ООП. Возможно, что я считал, что в LUA нет ООП. Кстати, есть ли ООП в LUA для меня остается загадкой. С одной стороны, в книге «Программирование на языке Lua» (автор – Роберту Иерузалимски) есть глава, посвященная ООП. С другой стороны, я перестал читать эту главу на фразе «В Lua нет понятия класса». Собственно, я делаю вывод, что в Lua разными ухищрениями делают что-то похожее на ООП.

Так вот, я поступаю следующим образом:

1. Создаю массив с кодами бумаг.

2. Создаю массивы с наименованиями нужных мне свойств (коды классов, количество лотов и пр.). При этом ключами в этих массивах выступают коды бумаг.

Вот пример моего подхода:

nazv_bum={}--массив с названиями бумаг
kolvo_lotov={}--массив с количеством лотов по каждой бумаге
shag_price={}--массив шага цены по каждой бумаге
razmer_lota={}--массив с размерами лота по каждой бумаге
kody_klassov={}--массив с кодами классов для каждой бумаги: "TQBR" - для акций. "TQOB" - для облигаций.
i = 0
prom="SBER"; nazv_bum[i]=prom; kolvo_lotov[prom]=5; big_obem[prom]=10; kody_klassov[prom]="TQBR"; i=i+1; -- Сбербанк
prom=" SBERP"; nazv_bum[i]=prom; kolvo_lotov[prom]=5; big_obem[prom]=10; kody_klassov[prom]=" TQBR"; i=i+1; --Сбербанк преф.
prom="VTBR"; nazv_bum[i]=prom; kolvo_lotov[prom]=5; big_obem[prom]=10; kody_klassov[prom]=" TQBR"; i=i+1; --ВТБ
prom="MGNT"; nazv_bum[i]=prom; kolvo_lotov[prom]=5; big_obem[prom]=10; kody_klassov[prom]=" TQBR"; i=i+1; --Магнит
prom="ROSN"; nazv_bum[prom00]=prom; kolvo_lotov[prom]=5; big_obem[prom]=10; kody_klassov[prom]=" TQBR"; prom00=prom00+1; --Роснефть

Давайте я прокомментирую этот код.

Переменная i служит типа счетчиком. После инициирования очередной бумаги его значение увеличивается на 1.

Переменная prom служит промежуточным звеном для записи кода ценной бумаги. Эти значения последовательно записываются в массив nazv_bum – названия бумаг.

Массивы kolvo_lotov, big_obem, kody_klassov – являются хранителями свойств бумаг.

Так вот, если к примеру, мы в массиве nazv_bum создадим элемент со значением «SBER», то в массивах kolvo_lotov, big_obem, kody_klassov будут созданы элементы с индексом «SBER». И, к примеру код класса будет храниться тут: kody_klassov[“SBER ”].

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

Вот, как-то так. Это я изложил свой подход к реализации ООП в LUA.

В дальнейшем я буду использовать этот подход в написании торговых скриптов на данном канале.

А на сегодня, пожалуй, всё. Всем счастливо – всем пока.

Пишите в комментариях что не понятно. Подписывайтесь на канал – дальше будет интереснее.

P.S. Изображение к выпуску сгенерировано с помощью нейросети по запросу «Объектно-ориентированное программирование».

=================================

Краткое содержание данного канала.

=================================