Компактное программирование |
Введение.
В программировании словом "прототип" чаще называется промежуточный упрощённый вариант программной системы, позволяющий представить заказчику, как будет выглядеть и работать законченная система (другое слово для обозначения того же самого -- макет). Иногда под прототипом понимается изделие, используемое в качестве образца при разработке другого изделия. Здесь же прототипом называется тщательно разработанная и отлаженная заготовка программной системы, предназначенная для использования в качестве основы для создания различных программных систем, архитектура которых относится к одному типу. Прототип программной системы - это, можно сказать, её скелет. В устройстве прототипа фиксируется определённая культура программирования.
В использовании заготовок программных модулей нет ничего нового: во многих коллективах разработчиков это обычная практика. Программные модули почти всегда (а программные системы -- зачастую) разрабатываются не с пустого места, а по образцу: переделкой уже где-то используемого кода. Типовые программные заготовки бывают работающие и неработающие (последние называются шаблонами). Неработающие заготовки становятся работающими только после того, как в них осуществляются изменения в соответствии с конкретными потребностями.
Создание промежуточных упрощённых вариантов программных систем -- это тоже обычная практика. Новизна в методе программирования на основе прототипов состоит в том, что прототипы ...
- тщательно оптимизируются,
- используются многократно,
- разрабатываются семействами,
- предлагаются на продажу.
Если при разработке прототипа-макета стремятся придать ему характерные качества будущей конкретной программной системы, то при разработке универсального прототипа стремятся придать ему качества, свойственные целому классу программных систем.
Прототипы программных систем могут быть таким же предметом продажи, как и сами программные системы. Массовое использование прототипов повысит качество программных продуктов, увеличит их разнообразие, снизит их стоимость. Первые предприятия, перешедшие на новую форму работы, наверняка будут в выигрыше, а отстающие наверняка столкнутся с большими проблемами.
Быстрое развитие систем программирования снижает полезность создания прототипов не очень значительно, потому что по аналогии с прототипом, использовавшимся в некоторой устаревшей системе программирования, можно с меньшими затратами, чем с пустого места, разработать прототип для новой системы программирования.
В программировании надо различать идеи и их реализации. К примеру, многократно выполняемый цикл операций -- это идея, а оформление цикла DO: END в некотором языке программирования -- это её реализация. Обычно успевает смениться несколько поколений реализации идеи до того, как эта идея, возможно, становится ненужной. Таким образом, прототип программной системы -- это в первую очередь комплект идей.
Разработка прототипов не обязательно требует больших дополнительных усилий: она, скорее, требует другого уровня мышления: большей технологической дисциплины, большего стратегического расчёта. Но в то же время создание эффективных прототипов может быть предметом научного исследования и даже предметом автоматизации.
Как минимум можно при разработке некоторой программной системы сначала разработать и отладить прототип, пригодный в качестве основы для похожих программных систем. Это сэкономит не только усилия при разработке других систем, но также усилия при выполнении текущей работы, потому что удобнее постепенно наращивать отлаженную основу программной системы, а не начинать отладку системы после её завершения.
Прототип, разрабатываемый в качестве первого этапа создания программной системы, позволяет проверить реализуемость технических идей, а также продемонстрировать кое-что заказчику: выяснить его мнение и уточнить требования.
Использование прототипов и другие технологии программирования.
Альтернативы использованию прототипов систем:
- использование настраиваемых систем;
- использование настраиваемо-допрограммируемых системы;
- использование систем объектно-ориентированного программирования с готовыми библиотеками объектов.
Использование прототипов является в некотором смысле альтернативой объектно-ориентированному программированию: более простой в концептуальном отношении, более прозрачной, менее сложно реализуемой и дающей компактный код.
В объектно-ориентированном программировании объект -- это работающий прототип функционально целостного фрагмента кода. Преимущество объектно-ориентированного программирования состоит в том в объекто-ориентированной инструментальной системе программист подталкивается к использованию прототипов или даже вообще не в состоянии что-либо сделать без них (но может наращивать прототипы и создавать новые).
Прототипы в рассматриваемом здесь смысле можно использовать и в объектно-ориентированных инструментальных системах: в этом случае архитектура системы задаётся прототипом, архитектура компонентов системы -- типами объектов.
Преимущества использования прототипов.
Использование прототипов делает программный код более компактным благодаря большей продуманности скелета программной системы.
Изучение прототипа программной системы может использоваться как первый этап освоения этой системы программистами, которые назначены её сопровождать.
Ограничения на использование прототипов.
Посредством использования прототипов решаются только типовые задачи программирования, то есть состоящие в разработке систем, попадающих в некоторый класс продуктов со сходной архитектурой.
Соотношение прототипа и программной системы.
При использовании прототипа код программной системы складывается из двух компонентов: 1) скелета, 2) добавлений. Модифицирование компонентов скелета допускается только в исключительных случаях. Возможно удаление неиспользуемых компонентов скелета. Возможно наращивание скелета, т. е. добавление компонентов в ряд аналогичных компонентов.
Разработка прототипов.
Создание прототипов не требует больших изменений в технологии разработки программных систем: можно то, что обычно появляется в качестве промежуточного результата работы, фиксировать в качестве отдельного продукта (и соответственно уделять больше внимания его качеству).
Прототипы могут также разрабатываться на основе удачных программных систем, созданных без использования прототипов: такая работа есть, можно сказать, выявление и фиксация положительного опыта с целью более полного использования его в дальнейшем.
Такие применяемые в диалоговых программных системах механизмы, как листание и прокрутка списков, устройство иерархических списков, трассировка, подсказка, авторизация доступа и пр., вряд ли заслуживают меньшего научного интереса и меньших оптимизационных усилий, чем механизмы сортировки, генерации случайных чисел, хеширования и пр.
Чтобы защитить скелет от модифицирования, можно выделять его, к примеру, шрифтом: представлять скелет большими буквами, добавления -- малыми.
Оформлять данные в прототипе можно тремя способами: 1) абстрактно, 2) конкретно, 3) с указаниями. При абстрактном оформлении различные тексты на экранах, в базах данных, в печатаемых документах имеют, к примеру, следующий вид: XXXXXXXX, YYYYYYYY. При конкретном оформлении используются в урезанном виде тексты реальной программной системы. При оформлении с указаниями на местах требуемых текстов помещаются указания на то, какие тексты должны там присутствовать.
Разумеется, прототип должен тщательно тестироваться.
Совершенствование прототипа может продолжаться параллельно с разработкой программной системы на его основе -- с учётом результатов этой разработки.
Если возможности прототипа не вполне соответствуют потребности (и никакой другой доступный прототип не является более подходящим), на основе этого прототипа разрабатывается ещё один прототип, и уже он становится скелетом программы.
Если прототип создаётся в качестве первого этапа построения системы, очень важным является определение того, какие компоненты системы должны отойти к прототипу и какие -- к добавлениям. В прототип следует включать компоненты, которые свойственны всем существующим и/или предполагаемым представителям класса систем. Чем меньше компонентов в прототипе, тем мощнее класс систем, которые можно строить на его основе, но тем больше добавлений придётся к нему делать.
Прототипы выгоднее разрабатывать семействами. В пределах семейства имеет место одинаковое оформление программного кода и экранов. Некоторые программные модули являются одинаковыми для всего семейства. Представители семейства различаются ...
- сложностью,
- структурой процесса обработки данных,
- используемыми вспомогательными системами (СУБД и пр.).
Устройство прототипов.
В прототипе могут предлагаться варианты реализации некоторых его компонентов (к примеру, варианты устройства меню). Все предлагаемые варианты компонентов должны иметь одинаковый интерфейс с остальной системой.
Разработка программных систем на основе прототипов.
Если предполагается использование прототипа, то при проектировании программной системы важнейшим этапом является определение класса, к которому система будет относиться.
Ненужная часть кода либо удаляется из прототипа, либо консервируется (если предполагается возникновение потребности в этой части кода по мере развития системы).
Прототипы и рынок.
Надо различать внутреннее использование прототипов (в пределах предприятия) и внешнее (продажи). Чем больше предприятие, тем боле выгодным для него является использование прототипов.
Если программная система создавалась на основе специально для неё разработанного прототипа, можно выставлять на продажу не только эту программную систему, но и её прототип.
Продажа прототипов, в отличие от продажи библиотек, технически реализуема по преимуществу в форме открытого кода. Для лучшей защиты интеллектуальной собственности можно продавать прототипы не свободно, а лишь доверенным клиентам.
Для ускорения выхода на рынок прототипы программных систем могут разрабатываться параллельно с системами программирования, для которых они предназначены. Наличие прототипов под инструментальную систему будет таким же дополнительным стимулом для её приобретения, каким является наличие развитой системы библиотек со стандартными компонентами.
Возможные поставщики прототипов:
- разработчики инструментальных систем;
- разработчики прикладных систем, наряду с продажей этих систем продающие и прототипы;
- специализированные разработчики прототипов.
Прототипы, как и программные системы, должны выпускаться версиями.
Александр Бурьяк.