Форум » Консультации по программированию » Как грамотно инкапсулировать стркутуры? » Ответить

Как грамотно инкапсулировать стркутуры?

hoz: Есть несколько структур с хранениями некоторых данных, типа свойства символа, свойства позиции и тд. Логично, что эти данные должны использоваться в единственном экземпляре в различных классах, которые используют члены-элементы соответствующих структур. Например, вот структура свойств позиций: // =================================================_______ СВОЙСТВА ПОЗИЦИИ _______======================================================= struct Position_Properties { datetime gdt_Expiration; // Срок истечения отложенного ордера datetime gdt_OpenTime; // Время открытия выбранной позиции double gd_OpenPrice; // Цена открытия double gd_Lots; // Объём позиции на открытие double gd_CurSL; // Текущий Stop Loss выбранной позиции double gd_NewSL; // Новый Stop Loss выбранной позиции double gd_CurTP; // Текущий Take Profit выбранной позиции double gd_NewTP; // Новый Take Profit выбранной позиции int gi_CurTicket; // Тикет выбранного ордера int gi_Type; // Тип торговой операции int gi_Slippage; // Максимально допустимое отклонение цены для рыночных ордеров int gi_Magic; // Магический номер string gs_Comment; // Комментарий string gs_Symbol; // Наименование фин. инструмента, с которым производится операция ulong gu_Duration; // Длительность позиции в секундах }; Как реализовать проект так, чтоб классы данного проекта использовали единственный экземпляр данной структуры и работали только с ним, и, если модифицировали, то только этот экземпляр? Обязательно использовать синглтоны или можно обойтись без этого? В плане синглтонов я не особо понимаю как они работают, так что, думаю, что возможно иначе как-то...

Ответов - 19, стр: 1 2 All

hoz: Scriptong пишет: Какой именно вариант? Если Вы про объект, объявленный статически, то я по нему уже высказался. А насчет того, что кто-то там предложил такой вариант, нужно смотреть полный текст его предложения, чтобы ответить предметно. Ведь очень часто фразы попросту вырываются из контекста. Именно, про статический объект я и имел ввиду. Больше они ничего предложить не смогли. Scriptong пишет: Вот свежий пример вырывания фразы из контекста. Цитируемое Вами относится к рассуждениям о статическом объекте, а не о механизме инкапсуляции в целом. Нет. Речь как раз-таки идёт о механизме инкупсуляции, а не о статических объектах. Т.к. я опирался на Ваш совет, посмотреть как реализовано у Вас это. Например, проект VPMA. Так я чётко увидел как у Вас реализованы подобные задачи. Так что вопрос этот как появится энтузиазм - разберу. С первого взгляда с большего понятно, но не привычно. Scriptong пишет: К сожалению, поставленные Вами цели для меня до сих пор остаются загадкой. Опишите свою задачу как можно подробнее, без абстракций, на конкретном примере. Конкретно, есть, структура, элементы которой являются, на данный момент обычными переменными простого типа. struct Position_Properties { datetime gdt_Expiration; // Срок истечения отложенного ордера datetime gdt_OpenTime; // Время открытия выбранной позиции double gd_OpenPrice; // Цена открытия double gd_Lots; // Объём позиции на открытие double gd_CurSL; // Текущий Stop Loss выбранной позиции double gd_NewSL; // Новый Stop Loss выбранной позиции double gd_CurTP; // Текущий Take Profit выбранной позиции double gd_NewTP; // Новый Take Profit выбранной позиции int gi_CurTicket; // Тикет выбранного ордера int gi_Type; // Тип торговой операции int gi_Slippage; // Максимально допустимое отклонение цены для рыночных ордеров int gi_Magic; // Магический номер string gs_Comment; // Комментарий string gs_Symbol; // Наименование фин. инструмента, с которым производится операция ulong gu_Duration; // Длительность позиции в секундах } Необходимо, чтоб данные члены-элементы: 1. Не зависели от конкретного экземпляра структуры. 2. Данные члены-элементы были надёжно инкапсулированы. В сервисдеске мне ответили так: " К сожалению, сделать то, что Вам можно только через макросы: #define Swap Symbol_Properties::gd_Swap " Игорь, а Вы что об этом думаете? Дело в том, что по-моему это не вариант. Т.к. подобные дефайны применимы, разве что, в случае, когда члены-элементы структуры будут не массивами. А если иначе, то придётся создавать теоретически огромное количество дефайнов, что, в любом случает, не удобно.

Scriptong: hoz пишет: Конкретно, есть, структура, элементы которой являются, на данный момент обычными переменными простого типа. К сожалению, это не описание. Это попытка решения. Опишите саму задачу. То, что Вы в моих проектах называете инкапсуляцией, является простым разложением задачи на более мелкие задачи. Для каждой такой подзадачи и создается отдельный класс. Больше ни для чего такая инкапсуляция мне и не нужна. Хотя у нее есть несомненный плюс: в будущем, при усложнении задачи, я автоматически избавляюсь от возможных багов в программе, т. к. все подзадачи решаются максимально независимо друг от друга, пересекаясь лишь при помощи специальных интерфейсов между ними.

hoz: Игорь, я видимо сам запутался. Когда задавал вопрос думал иначе, а щяс вижу то, что спрашивал по-другому. Вопрос закрываю на данный момент. В соседнем топике задам новый... Уже конкретный.


Scriptong: hoz пишет: Игорь, я видимо сам запутался. Это часто бывает Так вот сидишь на какой-то задачей - непробиваемо. Затем отвлечешься, забудешь о ней на какое-то время, а потом, возвращаясь к ней, с удивлением обнаруживаешь, что двигался совершенно не в том направлении. Оказывается, решение лежало в другой плоскости.



полная версия страницы