Выбор метода разработки программного обеспечения
Известны следующие методы разработки программного обеспечения: модульное, объектно-ориентированное программирование, компонентно-ориентированное программирование и параллельное программирование.
Модульная программа такая, в которой любую часть логической структуры можно изменить, не вызывая изменений в остальных частях программы. Одним из наиболее абстрактных понятий, связанных с модульностью, является понятие независимости: в модульной программе каждый модуль не зависит от других, то есть его можно изменить или модифицировать без последствий в других модулях. Достоинства модульных программ следующие:
· Модульные программы легко составлять и отлаживать. Функциональные компоненты такой программы могут быть написаны и отлажены порознь.
· Такую программу легче сопровождать и модифицировать. Функциональные компоненты могут быть изменены, переписаны или заменены без изменений в остальных частях.
Недостатки модульности:
· Модульный подход иногда требует большего времени ЦП. Эта проблема возникает, прежде всего, в тех случаях, когда программа отличается, наличием большого числа подпрограмм, написанных на языках высокого уровня.
· В модульном подходе может потребоваться несколько больший объем памяти. Если каждой подпрограмме отводится отдельная часть рабочей памяти, то всей программе может потребоваться несколько больший объем памяти [3].
· Объектно-ориентированное программирование (ООП) позволяет моделировать объекты определённой предметной области путем программирования их содержания и поведения в пределах класса. Конструкция «класс» обеспечивает механизм инкапсуляции для реализации абстрактных типов данных. Инкапсуляция как бы скрывает и подробности внутренней реализации типов, и внешние операции и функции, допустимые для выполнения над объектами этого типа.
Разработка объектно-ориентированных программ состоит из следующих последовательных работ:
· определение основных объектов, необходимых для решения данной задачи;
· определение закрытых данных (данных состояния) для выбранных объектов;
· определение второстепенных объектов и их закрытых данных;
· определение иерархической системы классов, представляющих выбранные объекты;
· определение ключевых сообщений, которые должны обрабатывать объекты каждого класса;
· разработка последовательности выражений, которые позволяют решить поставленную задачу;
· разработка методов, обрабатывающих каждое сообщение;
· очистка ВКР, то есть устранение всех вспомогательных промежуточных материалов, использовавшихся при проектировании;
· кодирование, отладка, компоновка и тестирование.
Компонентно-ориентированное программирование (КОП) можно описать примерно такой формулой: КОП = ООП+ модульность (включая сокрытие информации и позднее связывание модулей, то есть возможность подгружать необходимые модули в процессе выполнения программы, а не заранее, как в старых системах программирования). В КОП запрещено наследование от типов, реализованных в других модулях; наследовать можно только абстрактным, чисто интерфейсным типам[4].
Важным практическим следствием реализации концепции компонентного подхода для экономики программирования является снижение стоимости проектирования и реализации программного обеспечения. Еще одно очевидное достоинство компонентного программирования – возможность усовершенствования стратегии повторного использования кода. Код с более высоким уровнем абстракции не требует существенной модификации при адаптации к изменившимся условиям задачи или новым типам данных.
Кроме того к преимуществам концепции компонентного программирования следует отнести унификацию обработки объектов различной природы. Абстрактные классы и методы позволяют единообразно оперировать гетерогенными данными, причем для адаптации к новым классам и типам данных не требуется реализации дополнительного программного кода. Важно также отметить, что идеология компонентного программирования основана на строгом математическом фундаменте, что обеспечивает интуитивную прозрачность исходного текста для математически мыслящего программиста, а также верифицируемость программного кода. Концепция компонентного программирования универсальна и в равной степени применима для различных подходов к программированию, включая функциональный и объектно-ориентированный [5].
Всегда существуют «большие» задачи, которые не по силам одному компьютеру. Такие задачи приходится решать на параллельных вычислительных системах.
Параллельное программирование включает в себя все черты более традиционного, последовательного программирования, но в нем есть три дополнительных, четко определенных этапа:
· определение параллелизма: анализ задачи с целью выделить подзадачи, которые могут выполняться одновременно;
· выявление параллелизма, то есть изменение структуры задачи таким образом, чтобы было эффективно выполнять подзадачи. Для этого обычно находят зависимости между подзадачами и организовывают соответствующим образом исходный код;
· реализация параллельного алгоритма в исходном коде с помощью системы обозначений параллельного программирования [6].