- •Модели жизненного цикла по Водопадная (каскадная, последовательная) модель
- •Итерационная модель
- •Спиральная модель
- •22. Классические технологии разработки программного обеспечения.
- •23. Нисходящее и восходящее проектирование.
- •24. Структурное программирование. Модульное программирование
- •25. Абстракция и абстрагирование. Фундаментальные свойства и принципы объектно-ориентированного представления программных систем.
- •Принципы объектно-ориентированного представления программных систем
23. Нисходящее и восходящее проектирование.
Нисходящим - называют проектирование, в котором решение задач высоких иерархических уровней предшествует решению задач более низких иерархических уровней. Система разрабатывается, в условиях, когда ее элементы неопределены и, следовательно, сведения об их возможных свойствах носят предположительный характер.
Восходящее - проектирование, в котором элементы проектируются раньше системы, и, следовательно, предположительный характер имеют требования к элементам.
На практике обычно сочетают восходящее и нисходящее проектирование.
При восходящем проектировании разработка идет снизу вверх. На первом этапе разрабатываются модули самого низкого уровня. На следующем этапе к ним подключаются модули более высокого уровня и проверяется их работоспособность. На завершающем этапе проектирования разрабатывается головной модуль, отвечающий за логику работы всего программного комплекса. Методы нисходящего и восходящего программирования имеют свои преимущества и недостатки. Недостатки нисходящего проектирования: * Необходимость заглушек. * До самого последнего этапа проектирования неясен размер программного комплекса и его эксплутационные характеристики, за которые, как правило, отвечают модули самого низкого уровня. Преимущество нисходящего проектирования – на самом начальном этапе проектирования отлаживается головной модуль (логика программы). Преимущество восходящего программирования – не нужно писать заглушки. Недостаток восходящего программирования – головной модуль разрабатывается на завершающем этапе проектирования, что порой приводит к необходимости дорабатывать модули более низких уровней. На практике применяются оба метода. Метод нисходящего проектирования чаще всего применяется при разработке нового программного комплекса, а метод восходящего проектирования – при модификации уже существующего комплекса.
24. Структурное программирование. Модульное программирование
Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом В соответствии с данной методологией
-
Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
-
последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
-
ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
-
цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
-
Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
-
Разработка программы ведётся пошагово, методом «сверху вниз».
Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста. Теорема о структурном программировании:
Основная статья: Теорема Бома-Якопини
Любую схему алгоритма можно представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и может быть дополнительных логических переменных (флагов). Эта теорема была сформулирована итальянскими математиками К.Бомом и Дж.Якопини в 1966 году и говорит нам о том, как можно избежать использование оператора перехода goto.
Модульное программирование. Достаточно независимые фрагменты задачи оформляются как модули. Создаются библиотеки модулей, разрабатывается механизм включения модулей в разрабатываемую программу. Модуль должен иметь строго определенный интерфейс и скрытую часть, одну точку входа и одну точку выхода. Очередной этап развития принципа декомпозиции задачи и абстрагирования.
Программный код часто разбивается на несколько файлов, каждый из которых компилируетсяотдельно от остальных. Такая модульность программного кода позволяет значительно уменьшить время перекомпиляции при изменениях, вносимых лишь в небольшое количество исходных файлов, и упрощает групповую разработку. Также это возможность замены отдельных компонент (таких как jar-файлы, so или dll библиотеки) конечного программного продукта, не требующая пересборки всего проекта (например, разработка плагинов к уже готовой программе).
Стандартом написания модульных программ является объектно-ориентированное программирование. ООП обеспечивает наиболее высокую степень модульности по сравнению с остальными парадигмами благодаря таким свойствам, как инкапсуляция,полиморфизм и позднее связывание.