Ролевое информационное моделирование в программировании

Ролевое информационное моделирование в программировании

Итак, определим для начала, что такое ролевое информационное моделирование. Под ролевым информационным моделированием (РИМ) будем понимать такое информационное моделирование, при котором постановка задачи на разработку модели и/или ее последующий анализ осуществляется с точек зрения людей, выступающих в различных социальных ролях. Такая методология требует от разработчиков умения определять проблемы и ставить задачи, выделять главные и второстепенные свойства объектов, необходимые для построения моделей, уметь решать поставленные задачи с использованием различных инструментов, в том числе и программных средств, прогнозировать и оценивать результаты своей работы.

Источник проблемы

При программировании мы зачастую выступаем в одной роли — разработчик, и процесс изучения любого языка программирования строится исходя из этой позиции. При таком подходе некоторые конструкции языка (например, комментарии) на первый взгляд кажутся избыточными и не требующими должного внимания. Методика РИМ позволяет по-новому раскрыть назначение отдельных инструментов языка программирования, подчеркнуть их важность для грамотного решения поставленной задачи. Выдающийся голландский учёный Эдсгер В. Дейкстра отметил: «Глубоко ошибается тот, кто думает, что изделиями программистов являются программы, которые они пишут. Программист обязан создавать заслуживающие доверия решения и представлять их в форме убедительных доводов, а текст написанной программы является лишь сопроводительным материалом, к которому эти доказательства применимы». Проиллюстрируем вышесказанное примером. Пусть необходимо написать программу вычисления двойного факториала для нечётного числа n, используя рекурсию. Напомним, что двойной факториал является произведением всех натуральных чисел той же чётности, что и n, до n включительно. Одним из вариантов решения этой задачи будет следующая программа на языке Pascal (естественно, я знаю, что программа не будет работать для n > 21, однако, не нарушая общности, её можно использовать в качестве примера):

Диагностика

С точки зрения разработчика данная программа полностью решает поставленную задачу, однако, если мы проанализируем решение с позиции пользователя, то предложенный вариант будет нуждаться в доработке. Действительно, если мы откомпилируем программу и запустим её на выполнение, то для пользователя процесс работы с ней будет похож на общение с «чёрным ящиком»: программа на входе считывает числа до тех пор, пока не будет введено нечётное и на выходе выдаёт вычисленный ответ. Естественно, что ввод и вывод программы должны содержать инструкции для пользователя:

Таким образом, роль пользователя помогает нам акцентировать внимание на грамотном оформлении ввода и вывода данных, что не всегда бывает очевидно.

Нет предела совершенству

Теперь рассмотрим третью роль — сторонний разработчик. Необходимость такой роли вызвана тем, что крупные проекты требуют координированных действий большого числа разработчиков. Для стороннего разработчика важнейшим требованием к программе является её понятность, достичь которую можно соблюдением нескольких стилей программирования, неочевидных для молодых программистов. Концепция одного стиля заключается в использовании понятных имён переменных. Согласно венгерской нотации, например, в имени переменной должна содержаться информация о ней, прежде всего о ее типе: имя переменной pszLicFileContents говорит о том, что она указатель (p), на строку фиксированного размера (sz), в названии переменной pbContent закодирован ее тип LPBYTE, переменная bVerified имеет тип bool. Однако строгая типизация не всегда может быть эффективно заменена искусственными средствами, и поддержание этих искусственных средств не всегда оправдывает затраченные усилия. Современные подходы предлагают называть переменные исключительно по смыслу: SelectedIndexInTable, OpenedFileName. Оформление исходного кода программы также позволяет повысить её ясность. Язык программирования Pascal допускает перечисление операторов программы в одну строчку с разделителями «;» и «.», однако очевидно, что такая запись непонятна и сложна для восприятия. В указанных нами примерах блоки определения переменных, циклы, операторы ввода и вывода оформлены отступами. Существуют языки программирования, например, Python, которые не допускают запуска программы без правильного оформления кода. Кроме того, значительно повысить ясность кода помогают комментарии. Рекомендуется подробно комментировать каждый объект и все публичные методы объекта программы или модуля, а также переменные, если таковые есть, плюс обязательны комментарии для внутренних методов и переменных, а также внутри функций необходимо комментировать особо сложные и важные моменты. Существует подход, предлагающий прежде чем писать функцию, описывать ее поведение подробно в комментарии:

Необходимо отметить, что у сторонников комментирования исходного кода есть противники, утверждающие, что комментарии подспудно подталкивают разработчика писать непонятный код (ведь в комментариях есть разъяснение). Это утверждение представляется достаточно разумным, однако, поскольку уровень подготовки разработчиков различен, оптимальным выходом из сложившейся дилеммы будет симбиоз понятного кода и комментариев для наиболее сложных участков программы. Следуя перечисленным выше подходам, текст программы из предложенного нами примера должен быть модифицирован следующим образом: Таким образом, использование ролевого информационного моделирования при обучении программированию позволяет выявить возможные проблемы уже на этапе разработки модели решения задачи, шире взглянуть на возможности конструкций языка программирования, акцентировать внимание разработчиков на грамотном оформлении кода программы и заботе о пользователе.

📎📎📎📎📎📎📎📎📎📎