]> Реализация ООП в 1С++

Реализация ООП в 1С++

1C++ :: </a> </em> </td> <td style="text-align: right;"> <!-- Во второй ячейке пропишем ссылки на следующий/предыдущий топики и оставим возможность в каждом топике добавить свои линки, разместив их в otherlinks. По умолчанию otherlinks отсутствует. --> <subst nodes="chminfo/otherlinks/node()"/> | Ранее: <a href="prev" title="Перейти к предыдущей статье"><title to="prev"/></a> | Далее: <a href="next" title="Перейти к следующей статье"><title to="next"/></a> </td> </tr> <tr> <!-- Вторая строка таблицы будет заголовок топика. Чтобы каждый топик мог при необходимости изменить правило составления заголовка, сделаем здесь subst, а само правило пропишем ниже. Будем брать его из <topictitle> --> <td colspan="2" style="font-size:11pt;font-weight:bold"> <subst nodes="chminfo/topictitle/node()"/> </td> </tr> </table> <!-- А сюда собственно, вставим топик --> <topic/> </decoration> <!-- Основной стиль формирования ссылок на вынесенные топики --> <href> <a href="self"><title to="self"/></a> </href> <!-- Основной принцип объединения ссылок на вынесенные топики --> <hrefcombine> <ul> <foreach> <li><item/></li> </foreach> </ul> </hrefcombine> <!-- Содержимое данного тега подставляется в основной decoration через subst в каждом топике, для формирования заголовка топика. Его можно переопредеделить в топике, для задания другого правила составления заголовка. По умолчанию просто вставляется текст заголовка топика, а сам заголовок удаляется --> <topictitle> <title to="selfremove"/> </topictitle> </maininfo> <!-- Основная разметка для секций "Свойства", "Методы", "События" Задаем другие правила формирования ссылок на вынесенные топики, и объединения ссылок, а также формирования заголовка в дочерних секциях. --> <propsmethods> <!-- Ссылки на вынесенные топики объединим в таблицу --> <hrefcombine> <table border="1" cellspacing="0" cellpadding="3"> <foreach> <tr><item/></tr> </foreach> </table> </hrefcombine> <!-- Зададим разметку потомков, чтобы не писать ее в каждом топике --> <childs> <!-- Формирование ссылки на себя в родительском топике. Сформируем строку таблицы, где первая ячейка - ссылка на топик, а вторая - копия абзаца, в котором есть жирное слово "Описание", но без самого слова "Описание" --> <href> <td style="vertical-align:top"><a class="toc-backref" href="self"><title to="self"/></a></td> <td><subst nodes=".//p[strong='Описание:'][1]/node()[not(name()='strong' and .='Описание:')]"/></td> </href> <!-- Зададим другое правило составления заголовка. Пусть будет "Ссылка на описание объекта::ИмяМетода/Свойства" --> <topictitle> <a class="toc-backref" href="parent[1]" title="Перейти к описанию объекта"><title to="parent[1]"/></a> :: <title to="selfremove"/> </topictitle> <!-- Зададим другой способ задания <html><title> в формируемом файле. Он будет появлятся как имя топика во всех "founded topics" --> <chmtitle> <title to="parent[1]"/>::<title to="self"/> </chmtitle> <!-- Заставим дочерние секции добавлять слова из заголовка в индекс --> <autokw mode="2"/> <!-- На случай, если в описания метода есть еще подсекции, восстановим для них старые правила. --> <insert nodes="//common/maininfo/*[name()='hrefcombine']"/> <childs> <insert nodes="//common/maininfo/*[name()='href']"/> <insert nodes="//common/maininfo/*[name()='topictitle']"/> <chmtitle/> <autokw/> </childs> </childs> </propsmethods> </common></xml><chminfo> <insert nodes="//common/maininfo/*"/> <alinks>_1cpp_oop_</alinks> </chminfo> <div class="contents topic" id="id2"> <p class="topic-title first"><a name="id2">Содержание</a></p> <ul class="simple"> <li><a class="reference" href="#id3" id="id4" name="id4">Введение</a></li> </ul> </div> <div class="section" id="id3"> <h1><a name="id3">Введение</a></h1> <p>ООП - объектно-ориентированное программирование, является на сегодняшний день одной из самых популярных технологий создания программных средств. Данная разработка направлена на устранение недостатка отсутствия ООП в языке 1С. Как известно, ООП базируется на трех основных принципах: полиморфизм, наследование и инкапсуляция; в данной разработке для возможной технической реализации принципов, были добавлены некоторые языковые средства. Также добавлена возможность строгой проверки типов для параметров методов классов, определяемых пользователем <em>(КОП)</em> и некоторые другие классы для расширения парадигмы ООП.</p> <p>Наследование - это обобщение объектов за счет выведения общего поведения в логически связанных сущностях проекта. Возможность повторно использовать код и отделить интерфейс объекта от его реализации с целью повышения взаимозаменяемости и расширения частей системы без перепрограммирования и дополнительного тестирования множества модулей. Наследование позволяет представить на логическим уровне модель проектирования учетной системы более приближенно к проектируемой области. Наследование необходимо реализовать для достижения следующих целей:</p> <ul class="simple"> <li>уменьшение зависимостей не связанных между собой логически частей учетной системы;</li> <li>уменьшение написания и тестирования кода для связанных между собой логически понятий объектов системы</li> <li>возможность расширения существующего функционала</li> <li>концентрирование кода алгоритма в одном программном модуле с четко определенным интерфейсом его использования, что позволит вносить изменения в алгоритм и осуществлять его исправление без необходимости проверки и исправления всего зависящего от него кода</li> <li>для разделения функционала на три логических уровня: уровень интерфейс пользователя, уровень бизнес-логики, уровень сохранения/получения (персистентность) результатов и объектов, другими словами - уровень взаимодействия с БД</li> <li>повторяемость кода или наследуемость кода базового класса его наследниками</li> </ul> <p>В реализации наследования в ВК (внешней компоненте 1С:Предприятия) 1С++ необходимо определить следующий функционал:</p> <ul class="simple"> <li>Возможность наследования классов от встроенных типов, таких как: "Справочник", "Документ" и т.д.</li> <li>Возможность наследования от типов, определяемых пользователем (классов 1С++)</li> <li>Возможность вызова переопределенных функций производными классами из функций базового класса</li> <li>Возможность переопределения функций базовых классов в классах наследниках</li> <li>Возможность вызова базовых функций из переопределенных функций наследуемого класса</li> </ul> <p>Полиморфизм - заключается в переопределении поведения объекта с помощью специализации обобщенного класса, т.е. переопределение методов интерфейсов базового класса (общий класс) его наследником (более специализированным классом). Полиморфизм позволит:</p> <ul class="simple"> <li>писать обобщенные алгоритмы для "родственных" объектов, находящихся в одной иерархии</li> <li>добавлять новые классы в семейство логически связанных классов, уточняя и переопределяя поведение, заявленное в более абстрактных базовых классах, без внесения изменения в код, который использует интерфейс базового класса для взаимодействия с объектами одной иерархии</li> <li>избавиться от кода, жестко завязанного на конкретные типы родственных объектов, которые возможно расположить в единую иерархию наследования</li> </ul> <p>Инкапсуляция - сокрытие деталей реализации классов за четко определенным интерфейсом. Это позволит разрабатывать компоненты и настраивать их взаимодействие с меньшими зависимостями между ними, что в свою очередь, уменьшит время тестирования и вероятность появления ошибок в алгоритмах программы.</p> <p>Файлы реализации классов могут быть как в текстовом формате, так и в формате отчетов с расширением *.ert. Имена файлов и привязки файлов реализации к классам задаются в файле определения Defcls.prm.</p> </div> </div> </body> </html>