1.2.Основные идеи и принципы структурной методологии
Структурные методы создавались и использовались с целью борьбы с «проклятием размерности», или сложности, разрабатываемых систем или решаемых проблем. Их создание направлено на обеспечение дисциплины с помощью введения стандартов, определяющих как процесс разработки, так и форму создаваемого продукта. В программотехнике структурные методы предназначены для улучшения управления разработкой программного продукта, улучшения процесса разработки и улучшения качества самого продукта. Основные средства достижения этого — применение хорошо выверенных процедур, средств, методов разработки, а также установление строгих механизмов контроля за их использованием.
Основными принципами структурной методологии являются:
3. Принцип «разделяй и властвуй» (побеждай).
4. Принцип иерархического упорядочения.
Принцип абстракции. В основу названного метода положено выделение некоторых важных свойств исследуемого объекта и игнорирование несущественных (для данного этапа). Абстракция позволяет нам представить рассматриваемую проблему, исключая из анализа второстепенные детали, окружающие существо проблемы. Используя этот принцип, разработчик может рассматривать программу на разных уровнях детализации. Первый, самый верхний уровень, показывает самый упрощенный общий взгляд на выполняемые программой функции, нижний — самый детальный. Абстракция — мощное средство разработки программ. Алгоритм является абстракцией программы, и запись алгоритма с разной степенью детальности соответствует абстракции разного уровня. Примером использования этого принципа служит метод структурного проектирования программных изделий с использованием пошаговой детализации (или функциональной декомпозиции) программы.
Каждый уровень абстракции характеризуется группой функций, логически связанных между собой, и соответствующей абстракцией структур данных (файл, запись, поля записи). Между функциями разных уровней существуют связи, которые подчиняются, по крайней мере, двум правилам.
1. Функции более низкого уровня не имеют доступа к более высоким уровням, т.е. не имеют о них информации. Функции более высокого уровня могут вызывать функции более низкого уровня.
2. Каждый уровень имеет свои собственные данные, которые принадлежат исключительно функциям указанного уровня и не могут быть доступны функциям другого уровня. Информация явно передается с одного уровня на другой. (Одновременно могут существовать и данные, общие для всех уровней.)
Принцип абстракции лежит в основе стратегии нисходящего и восходящего программирования.
Принцип формальности. Этот принцип требует соблюдения норм и правил, т.е. следования строгим формальным правилам и строгому методическому подходу к решению проблемы. Формальные алгоритмические языки, базируясь на принципах формальности, построены исходя из совокупности формальных правил, позволяющих передавать идеи и инструкции в форме, пригодной для обработки на ЭВМ. Формальное доказательство правильности программ также базируется на этом принципе. Формальность в создании программного изделия означает четко регламентированный пошаговый процесс разработки. Примером применения принципа формальности выступает модель жизненного цикла программного изделия, определяющая четкую последовательность и содержание этапов его разработки.
Таким образом, принцип формальности в структурной методологии регламентирует процессы разработки и управления разработкой, способствуя стандартизации этих процессов, повышению производительности труда разработчиков и качества программной продукции.
Принцип «разделяй и властвуй» лежит в основе решения большинства трудных проблем, которые целесообразно разделять на более мелкие, более простые и понятные независимые подпробле-мы. Это мощное и эффективное средство борьбы со сложностью, позволяющее разработчику работать над одной частью проблемы, не заботясь о множестве деталей всей проблемы.
В программировании названный принцип означает разделение сложной программы на небольшие модули, которые просты для понимания и допускают независимые тестирование и отладку; программа приобретает модульную структуру. Относительно процесса разработки программного изделия этот принцип означает разделение всегэ процесса на отдельные шаги, что упрощает управление каждым этапом разработки и работы в целом.
Принцип иерархического упорядочения определяет структуру организации и взаимодействия компонент (модулей) сложного программного продукта в виде многоуровневой иерархической системы. Этот принцип тесно связан с предыдущим и также базируется на функциональной декомпозиции исходной проблемы. Он находит широкое применение в разных областях жизни при создании многочисленных иерархических классификаций, а также при проектировании сложных объектов и систем.
В программировании принцип иерархического упорядочения позволяет проектировать программу уровень за уровнем, каждый раз добавляя более подробные детали. Он лежит в основе таких структурных методологий, как нисходящее и модульное программирование, а также используется при описании сложных структур данных. Построение иерархически упорядоченных структур подчиняется определенным правилам, выполнение которых повышает качество иерархической схемы.
Принципы структурного программирования.
Структурное программирование: три базовые конструкции.
Работа Бома и Джакопини показала, что все программы могут быть написаны с использованием всего трёх управляющих структур, названных структура следования, структура выбора и структура повторения.
Любая программа представляет собой иерархическую структуру, построенную из трёх типов базовых конструкций:
- структура следования — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
- структура выбора — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
- структура повторения — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие.
Структура следования встроена в C++. Пока не указано иное, компьютер выполняет операторы C++ один за другим в той последовательности, в которой они записаны.
C++ обеспечивает три типа структур выбора альтернатив:
- Структура выбора if выполняет некоторое действие, если проверяемое условие истинно, или пропускает его, если условие ложно. Она также называется структура с единственным выбором, поскольку она выбирает или игнорирует единственное действие.
- Структура выбора if/else выполняет одно действие, если условие истинно, и выполняет другое действие, если оно ложно. Она также называется структура с двойным выбором, поскольку осуществляет выбор между двумя различными действиями.
- Структура выбора switch выполняет одно из множества действий в зависимости от значения проверяемого выражения. Она также называется структура с множественным выбором, поскольку осуществляет выбор среди множества различных действий.
C++ обеспечивает три типа структур повторения, называемых:
- Структура повторения do/while похожа на структуру повторения while. Сперва выполняется действие, а затем проверяется условие. Действия выполняется до тех пор, пока условие истинно.
И это всё. C++ имеет только семь управляющих структур: следование, три типа выбора и три типа повторения. Любая программа на C++ формируется из такого количества комбинаций каждого типа управляющих структур, которое нужно для осуществления соответствующего алгоритма.
Основные операторы.
Ссылки – особый тип данных, являющийся скрытой формой указателя, который при использовании автоматически разименовывается. Ссылка может быть объявлена как другим именем, так и как псевдоним переменной, на которую ссылается.
// структура объявления ссылок
При объявлении ссылки перед её именем ставится символ амперсанда «&«, сама же ссылка должна быть проинициализирована именем переменной, на которую она ссылается. Тип данных, на который указывает ссылка, может быть любым, но должен совпадать с объектом, на который ссылается, то есть с типом данных ссылочной переменной. Для удобства, будем называть переменную, на которую ссылается ссылка «ссылочной переменной». Любое изменение значения содержащегося в ссылке повлечёт за собой изменение этого значения в переменной, на которую ссылается ссылка. Разработаем программу, в которой объявим ссылку на объект типа int.
// №1.cpp: определяет точку входа для консольного приложения.
int main(int argc, char* argv[])
int &reference = value; // объявление и инициализация ссылки значением переменной value
cout cout reference+=15; // изменяем значение переменной value посредством изменения значения в ссылке
В строке 10 объявлена ссылка reference типа int на переменную value. В строке 13 суммируется значение переменной value с числом 15, черезссылку reference. Результат работы программы (см. Рисунок 1).
Просмотрев результат работы программы можно сказать, что через ссылку меняется значение ссылочной переменной. Таким образом, сама ссылка не имеет как таковой копии значения взятой у переменной при инициализации ссылки, а всего лишь ссылка ссылается на ссылочную переменную посредством её адреса.
Ссылки, как правило, в большинстве случаев используют в функциях как ссылки-параметры или ссылки-аргументы. Напомню, что в языке программирования С++ в функции передаются данные по значению и по ссылке. Так вот, когда происходит передача по значению, те данные, которые необходимо передать, нужно сначала скопировать, а когда передаётся большой объём данных, то только на передачу затрачивается большое количество времени и ресурсов. В таком случае необходимо использовать передачу по ссылке, в этом случае данные копировать нет необходимости, так как к ним обеспечен прямой доступ, но нарушают безопасность данных, хранимых в ссылочных переменных, так как открывают прямой доступ к этим данным. Хотя далее мы рассмотрим, как обеспечить целостность данных и скорость их передачи. Для этого, разработаем программу, в которой создадим три функции, аргументы в которых будут передаваться по значению и по ссылке. Вдобавок ко всему этому ещё и передачу через указатель осуществим. Частенько возникает путаница между указателями и ссылками, на первый взгляд и ссылки и указатели работают одинаково, но разница все, же есть и весьма значительная.