ООП. Инкапсуляция, часть 2.

11.12.08

Разработка - Механизмы платформы 1С

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

Второй простой пример инкапсуляции.

Допустим, есть в конфигурации константа ОсновнаяФирма. И повсюду в конфигурации разбросаны вызовы Константа.ОсновнаяФирма. Как инкапсулировать эту константу и зачем (и в каких случаях) это надо делать?

Для начала отвечу на вопрос "как". Очень просто.

класс Константы = __Константы@MD {};  

Функция ОсновнаяФирма() Экспорт
Возврат Константа.ОсновнаяФирма;
КонецФункции

Вы спросите - зачем огород городить? Отвечаю. Мы отделили реализацию от представления. Скрыли реализацию за интерфейсом. Теперь мы можем свободно менять реализацию, оставив старый интерфейс. Кстати, отличный повод для подобного разделения - это несоответствие названия константы реальному состоянию дел. Вместо, или вместе со сменой идентификатора константы можно сразу провести данный рефакторинг. Все равно глобальным поиском трясти.

Примеры, когда нужно вдруг поменять реализацию.

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

класс Константы = __Константы@MD  
{
Справочник ОсновнаяФирма(Дата _Дата = ТекущаяДата());
};

Функция ОсновнаяФирма(_Дата) Экспорт
Возврат Константа.ОсновнаяФирма.Получить(_Дата);
КонецФункции

2. Вдруг провели измерения быстродействия и выяснили, что обращения к таблице констант занимают существенное время в работе конфигурации. Решение - кэшировать значения тех констант, которые в середине дня ну никак не могут поменяться. ОсновнаяФирма - одна из таких констант (обратный пример - это константа ДатаЗапретаРедактирования, ее кэшировать не стоит).

класс Константы = __Константы@MD {};  

Перем КэшОсновнойФирмы;
Процедура Конструктор()
КэшОсновнойФирмы = "";
КонецПроцедуры
Функция ОсновнаяФирма() Экспорт
Если КэшОсновнойФирмы = "" Тогда
КэшОсновнойФирмы = Константа.ОсновнаяФирма;
КонецЕсли;
Возврат КэшОсновнойФирмы;
КонецФункции

3. Мы решили разгрузить таблицу констант от блокировок. И хотим хранить значение основной фирмы в специальном справочнике.

класс Константы = __Константы@MD {};  

Функция ОсновнаяФирма() Экспорт
СпрКонстанты = СоздатьОбъект("Справочник.Константы");
СпрКонстанты.НайтиЗначениеПоКоду("ОсновнаяФирма");
Возврат СпрКонстанты.Константа;
КонецФункции

4. У константы не может быть двух идентификаторов, а вот в классе вполне может оказаться два (и даже больше) метода с разными названиями, но которые делают одно и то же. Зачем это может понадобиться - придумайте сами :)

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Механизмы платформы 1С Программист Бесплатно (free)

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    27066    TitanLuchs    106    

147

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    14945    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    16678    user2122906    9    

60

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    27196    dsdred    77    

143

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

23.06.2024    24956    bayselonarrend    22    

175

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    13714    dsdred    22    

85
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. fez 46 11.12.08 14:03 Сейчас в теме
2. vde69 935 11.12.08 14:30 Сейчас в теме
вот было-бы хорошо если бы расшифровал строку
класс Константы = __Константы@MD {};

а то далеко не все 1с ники понимают, чего это за синтаксис... видимо и шапку надо поменять.

На сколько я понял к 1с (обычной, без надстроек) это не имеет отношение???
3. fez 46 11.12.08 15:56 Сейчас в теме
(2) Естественно, к обычной 1с это не имеет отношения. Поскольку оригинальный язык 1С - не объектно-ориентированный, то об этом не может быть и речи.

Представленный синтаксис - это синтаксис 1С++.
4. fez 46 12.12.08 02:00 Сейчас в теме
5. пользователь 14.12.08 00:05
Сообщение было скрыто модератором.
...
6. fez 46 14.12.08 19:29 Сейчас в теме
(5) Я не помню, в восьмерке в обработке можно хранить какие-нибудь данные, или это чисто хранилище для методов?
8. пользователь 14.12.08 19:44
Сообщение было скрыто модератором.
...
10. fez 46 15.12.08 14:08 Сейчас в теме
(8) Эээ... А как можно без проперти гет/сет хранить данные?
Покажи кусочек кода, думаю, будет нагляднее.
7. fez 46 14.12.08 19:30 Сейчас в теме
Например кэширование, как во втором примере, можно сделать?
9. пользователь 14.12.08 19:49
Сообщение было скрыто модератором.
...
11. пользователь 15.12.08 15:11
Сообщение было скрыто модератором.
...
12. fez 46 15.12.08 15:24 Сейчас в теме
(11) А что тогда, по вашему, property get/set?
13. пользователь 15.12.08 15:42
Сообщение было скрыто модератором.
...
Для отправки сообщения требуется регистрация/авторизация