Основные принципы структурной методологии

· Принцип абстракции. Абстракция позволяет разработчику вообразить требуемое решение проблемы без сиюминутного учета множества деталей. Используя принцип абстракции, разработчик может рассматривать программу по уровням. Верхний уровень показывает нам большую абстракцию, упрощает взгляд на проект, в то время как нижний уровень показывает мелкие детали. На принципе абстракции основываются многие структурные методы, например, восходящая и нисходящая стратегии программирования.

· Принцип формальности. Слово «формальность» предполагает строгий методический подход.

Принцип формальности является базой для превращения программирования из импровизации в инженерную дисциплину.

Кроме того, этот принцип дает основания для доказательства правильности программ, так как позволяет изучать программы (алгоритмы) как математические объекты.

Введению формальности в некоторый процесс, технический или не технический, часто сопротивляются на основании того, что она подавляет творчество. Однако структурный подход использует формальность для придания процессу творчества определенной дисциплины и строгости, что позволяет ускорить принятие решения и избегать множества ошибок. Формальность является положительным и мощным способом соединения искусства и инженерных аспектов программирования.

· Принцип «разделяй и властвуй». Этот принцип известен со времен Юлия Цезаря и является методом решения трудных проблем путем разделения проблемы на множество мелких независимых, которые легче понимать и решать.

· Принцип иерархического упорядочения. Этот принцип тесно связан с принципом «разделяй и властвуй». Структура разбиения на части не менее важна, чем сам факт самого разбиения. Принцип иерархической упорядоченности с успехом используется во всех областях человеческой деятельности и помогает решать сложные проблемы в системах, включающих множество частей. В применении к программированию этот принцип выдвигает требование иерархического структурирования связей между модулями программного комплекса, что облегчает достижение рассмотренных выше целей структурного программирования.

Языки программирования, которые поддерживают эту модель, называются структурно-ориенированными или процедурными. Глав­ное внимание в них уделяется построениюпроцедур (подпрог­рамм) и, как следствие, решению следующих вопросов: пере­дача аргументов в процедуры; получение вычисленных зна­чений из процедур; внутренняя организация процедур и т. п. Типичным примером процедурно-ориентированного языка является Фортран – первый и все еще один из наиболее популярных языков программирования. Далее поя­вилось целое поколение языков указанного типа: Алгол-60, Алгол-68, Паскаль, Си и другие. Последовательное использование идеи процедурного структурирования программ привело к созданию обширных библиотек программирования, содержащих множество сравнительно небольших процедур, из которых, как из кирпичиков, можно строить «здание» программы.

Структуризация данных привела к конструкциям типов. По мере прогресса в области вычислительной математики акцент в программировании стал смещаться с процедур в сторону организации данных. Оказалось, что эффективная разработка сложных программ нуждается в действенных способах контроля правильности использования данных. Контроль должен осуществляться как на стадии компиляции, так и при прогоне программ, в противном случае, как показала практика, резко возрастают трудности создания крупных программных проектов. Отчетливое осознание этой проблемы привело к созданию Алгола-60, а позже – Паскаля, Модулы-2, Си и множества других языков программирования, имеющих более или менее развитые структуры типов данных.

Логическим следствием развития этого направления стал модульный подход к разработке программ, характеризующийся стремлением «спрятать» данные и процедуры внутри модуля.

В модульном программировании основные акценты пере­носятся на построение модулей. При этом необходимо опре­делить модули, которые будут использоваться, и разделить программу на модули так, чтобы ее данные были скрыты в этих модулях. В действительности указанная модель перено­сит основные акценты на организацию данных (а не на алго­ритм, по которому обрабатываются эти данные). Модулем (в модульном программировании) называется множество взаимосвязанных процедур (подпрограмм) вместе с данными, которые эти процедуры обрабатывают. Основной целью дан­ного направления является скрытие данных в модулях. Про­анализируем, зачем это делается. Предположим, надо разра­ботать очень большую программу. Такой разработкой будет заниматься коллектив программистов, в котором каждый программист отвечает за определенную часть общей про­граммы. Если коллектив использует процедурное направле­ние в программировании, то надо решить некоторые пробле­мы, например:

- договориться об используемых именах в программе для глобальных переменных, поскольку использование од­ного имени для разных переменных (разными програм­мистами) приводит к ошибке;

- договориться об организации общих данных и способах доступа к этим данным и т. п.

Для большой программы указанные проблемы могут ока­заться очень сложными. Гораздо проще поручить конкретно­му программисту некоторую самостоятельную часть про­граммы. В этом случае он будет отвечать за конструирование всех необходимых процедур и данных для этих процедур. Ес­ли запретить доступ к данным из-за пределов модуля (скрыть данные), то будет предотвращено их случайное изменение, а значит, и нарушение работы программ. Теперь вместо реше­ния перечисленных выше проблем надо только продумать интерфейс (взаимодействие) сконструированных модулей в разрабатываемой общей программе. Доступ к модулю будет осуществляться только через интерфейс, что исключит слу­чайное изменение данных и, как следствие, ошибки в про­грамме.

Непосредственная поддержка модульного программиро­вания воплощена в языке Модула-2.

И, наконец, объединение структур данных и операций над ними (методов) привело к появлению понятия класса, объекта. Начиная с языка Симула-67 в программировании наметился новый подход, который получил название объектно-ориентированного программирования (ООП). Его руководящая идея заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое – объект. Характерной чертой объектов является инкапсуляция (объединение) данных и алгоритмов их обработки, в результате чего и данные, и процедуры во многом теряют самостоятельное значение. Фактически объектно-ориентированное программирование можно рассматривать как модульное программирование нового уровня, когда вместо во многом случайного, механического объединения процедур и данных акцент делается на их смысловую связь.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: