Технология разработки прикладных программ
Высокая стоимость разработки программ привлекает внимание к изучению технологии процесса программирования и изысканию наиболее эффективных технологий создания программ. Главным показателем технологии являются: содержание отдельных технологических этапов, в частности, способ расчленения всего объема работ на части; принципы распределения отдельных работ между членами коллектива; способ объединения отдельных частей разрабатываемой программы в единое целое и др.
К началу 90-х годов нашего столетия уже сложились следующие виды технологий:
- процедурное программирование,
- модульное программирование,
- программирование "сверху-вниз",
- структурное программирование,
- HIPO - технология,
- R - технология.
Сущность процедурного программирования заключается в первоначальной разработке отдельных частей программы, из которых собирается программа более высокого иерархического уровня. Отсюда ее второе название - "снизу-вверх".
Дальнейшим развитием этой технологии является модульное программирование. Первично разрабатываемыми элементарными частями программы являются модули. Модуль - универсальный элемент ПО, который может применяться самостоятельно, или в пакете программ. Универсальность модуля достигается за счет выполнения ряда требований при конструировании модулей.
Рассмотрим основные характеристики модуля.
Модуль состоит из тела модуля и его паспорта.
Паспорт модуля - совокупность важнейших внутренних и внешних характеристик, который включает следующие понятия:
1) идентификатор модуля (название);
2) язык программирования;
3) Списки аргументов промежуточных величин;
4) описание данных в терминах языка;
5) указатель схем реализации;
6) указатель зависимостей индексов;
7) список вызываемых подмодулей и библиотек;
8) указатель операторов ввода- вывода;
9) машинные ресурсы, необходимые для работы модуля;
10) наиболее существенные параметры, определяющие продолжительность расчетов.
Для реализации положительных возможностей модульной структуры модули должны обладать свойствами структурной замкнутости и функциональной определенности.
Структурная замкнутость заключается в независимости структуры всего пакета от конструкции отдельного модуля. Таким образом, модуль является элементом, внутреннее устройство которого не влияет на устройство прикладной программы в целом.
Функциональная определенность заключается в том, что каждый модуль предназначен для выполнения определенных функций, свойственных только данному модулю, который выполняет некоторый этап решения задачи, имеющий цельный, завершенный физический смысл.
Среди свойств модуля иногда называют и монолитность [6 прик прог], определяющую обязательную степень свободы, которой должен обладать любой модуль, т.е. не должны накладываться какие-либо ограничения на внутреннее устройство модуля.
Однако практика разработки сложных программ показала, что иногда трудно синтезировать эффективную модульную структуру - это привело к разработке технологии "сверху-вниз".
Алгоритм решения задачи с помощью, технологии "сверху-вниз" представляется в виде иерархической системы, элементы которой должны выбираться так, чтобы они по возможности соответствовали структурным единицам предметной области.
Структурное программирование позволяет достигать максимальной выразительности и восприимчивости программ, что значительно облегчает выявление и устранение ошибок и гарантирует более совершенную отладку. Одно из важнейших требований структурного программирования - редактирование текста на алгоритмическом языке высокого уровня, обеспечивающее надлежащую наглядность структуры программы.
Дальнейшее развитие и концептуальную завершенность идеи структурного программирования нашли в HIPO-технологии, которая предполагает сочетание принципов структурного программирования с другими элементами технологии программирования. Эта технология введена фирмой IBM и предполагает, кроме сочетания принципов "сверху-вниз" и структурного программирования, два других обязательных компонента: применения библиотек развития и принципа организации бригад (групп) программистов.
R-технология является сочетанием изложенных выше принципов с технологическим ПО, реализованным в виде специального программного комплекса программиста (RTK-комплекс). В отличие от выше рассмотренных технологий она органически включает использование ЭВМ для достижения целей различных технологических этапов: декомпозиции исходной программы, ее кодирования, отладки и разработки документации. Для описания структуры сложных программ R-технология предполагает использование специализированного R-языка, позволяющего описывать несколько иерархических уровней и имеет практически неограниченные возможности для распараллеливания программ.
Дальнейшее развитие вычислительной техники и вычислительной математики привело к тому, что акцент в программировании стал смещаться с процедур в сторону организации данных. Оказалось, что эффективная разработка сложных программ нуждается в действенных способах контроля правильности использования данных. Контроль должен осуществляться как на стадии компиляции, так и при прогоне программ, в противном случае, как показала практика, резко возрастают трудности создания крупных программных проектов. Отчетливое осознание этой проблемы привело к созданию таких языков программирования как Паскаля, Модулы-2, Си и др., имеющих более или менее развитые структуры данных.
Начиная с языка Симула-67, в программировании наметился новый подход, который получил название объектно-ориентированное программирование (ООП). Его руководящая идея заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое - объект. Характерной чертой объектов является инкапсуляция (объединение) данных и алгоритмов их обработки, в результате чего и данные и процедуры во многом теряют самостоятельное значение. Фактически ООП можно рассматривать как модульное программирование нового уровня, когда вместо во многом случайного, механического объединения процедур и данных акцент делается на их смысловую связь.
Какими мощными средствами располагает ООП наглядно демонстрирует, например, библиотека Turbo Vision для языка Турбо Паскаль.
Следует отметить, что преимущества ООП в полной мере проявляются лишь при разработке достаточно сложных программ. Более того, инкапсуляция придает объектам совершенно особое свойство "самостоятельности", максимальной независимости от остальных частей программы. Правильно сконструированный объект располагает всеми необходимыми данными и процедурами их обработки, чтобы успешно реализовать требуемые от них действия.
Попытки использовать ООП для программирования несложных алгоритмов, связанных например с расчетными вычислениями по готовым формулам, чаще всего выглядят искусственными нагромождениями ненужных языковых конструкций.
Основными принципами ООП являются инкапсуляция, наследование и полиморфизм. Их мы рассмотрим позднее.