Базис для построения любой структурной программы включает следующие виды структур

Объектно-ориентированное, структурное, обобщённое, функциональное программирование и метапрограммирование. Аспектно-ориентированное программирование, контрактное и логическое программирование. И прочие модели.

Содержание

Императивная парадигма

Императивное программирование — это парадигма программирования, в которой используются операторы, изменяющие состояние программы. Во многом так же, как повелительное наклонение в естественных языках выражает команды, императивная программа состоит из команд, которые должен выполнять компьютер. Императивное программирование фокусируется на описании того, как работает программа.

Объектно-ориентированное программирование

Структурное программирование

Структурное программирование — метод программирования, базирующийся на использовании процедурного стиля программирования и последовательной декомпозиции алгоритма решения задачи сверху вниз.

Основа для массового промышленного программирования была создана с разработкой новых методов построения программ. Одной из первых и наиболее широко применяемых технологий программирования стало структурное программирование. Этот метод до сих пор не потерял своего значения для многих классов задач.

Структурное программирование

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

Основой структурного подхода являются два основополагающих принципа:

  • использование процедурного стиля программирования;
  • последовательная декомпозиция алгоритма решения задачи сверху вниз.

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

Структурное программирование ясно определило значение модульного построения программ (т. е. разбиения монолитных программ на группу отдельных модулей) при разработке больших проектов, но в языках программирования единственным способом структуризации программы оставалось составление ее из подпрограмм и функций.

Обобщённое программирование

Обобщённое программирование — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. В том или ином виде поддерживается разными языками программирования. Возможности обобщённого программирования впервые появились в виде дженериков (обобщённых функций) в 1970-х годах в языках Клу и Ада, затем в виде параметрического полиморфизма в ML и его потомках, а затем во многих объектно-ориентированных языках, таких как C++, Python, Java, Object Pascal, D, Eiffel, языках для платформы .NET и других.

18 Базовые конструкции структурного программирования

Аспектно-ориентированное программирование

Аспектно-ориентированное программирование — парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули.

Декларативная парадигма

Декларативное программирование — парадигма программирования, в которой задаётся спецификация решения задачи, то есть описывается ожидаемый результат, а не способ его получения. В качестве примеров декларативных языков обычно приводят HTML и SQL.

Логическое программирование

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

Программа здесь формулируется в виде набора логических правил, описывающих некую предметную область, а исполнение программы состоит в попытке доказать утверждение. Наиболее известным языком логического программирования можно
считать язык Пролог.

Функциональное программирование

Функциональное программирование — парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).

Читайте также:
Структура программы на делфи

Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния.

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

Переменные в функциональном программировании обычно всё же используются, но своё значение переменная получает при её создании и не меняет его в течение всего срока своей жизни. Чаще всего переменные используются в роли формальных параметров функций: при вызове функции такие переменные получают значения, соответствующие фактическим параметрам, и, что вполне ожидаемо, своих значений не меняют, пока работа функции не завершится — а после этого исчезают, как и все локальные сущности. Кроме того, при программировании на функциональных языках часто применяются локальные переменные, вводимые больше для удобства, чтобы поименовать значение того или иного вычисленного выражения (например, если это значение нужно использовать несколько раз).

Функциональное программирование также является ключом к некоторым языкам, популярным в определенных областях, таких как JavaScript в Интернете, R в статистике, J , K и Q в финансовом анализе, и XQuery / XSLT для XML. Декларативные языки предметной области, такие как SQL и Lex / Yacc.использовать некоторые элементы функционального программирования, такие как запрет на изменение значений. Кроме того, многие другие языки программирования поддерживают программирование в функциональном стиле или имеют реализованные функции функционального программирования, такие как C++11, C#, Kotlin, Perl, PHP, Python, Go, Rust, Raku, Scala и Java (начиная с Java 8).

Метапрограммирование

Под метапрограммированием понимается написание программного кода, результатом выполнения которого будет программный код. Наиболее очевидным вариантом здесь будет написать некую программу, которая сгенерирует и выдаст в свою очередь программу (возможно, на другом языке, а может быть, и на том же самом), и уже эта сгенерированная программа, будучи исполненной, позволит получить результаты, которые изначально были нужны. Так действительно иногда делают, хотя и сравнительно редко; намного чаще генерируется не целая программа, а какая-то её часть, например, отдельный модуль.

При этом подходе код программы не пишется вручную, а создаётся автоматически программой-генератором на основе другой программы.

Такой подход приобретает смысл, если при программировании вырабатываются различные дополнительные правила (более высокоуровневые парадигмы, выполнение требований внешних библиотек, стереотипные методы реализации определённых функций и пр.). При этом часть кода (или данных) теряет содержательный смысл и становится лишь механическим выполнением правил. Когда эта часть становится значительной, возникает мысль задавать вручную лишь содержательную часть, а остальное добавлять автоматически. Это и проделывает генератор.

Различаются два принципиально различных вида кодогенерации:

  1. генератор является физически отдельной бинарной программой, необязательно написанной на целевом языке.
  2. целевой язык является одновременно языком реализации генератора, так что метапрограмма составляет с целевой программой единое целое.

Контрактное программирование

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

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

  • конкретные обязательства, которые любой клиентский модуль должен выполнить перед вызовом метода — предусловия, которые дают преимущество для поставщика — он может не проверять выполнение предусловий;
  • конкретные свойства, которые должны присутствовать после выполнения метода — постусловия, которые входят в обязательства поставщика;
  • обязательства по выполнению конкретных свойств — инвариантов, которые должны выполняться при получении поставщиком сообщения, а также при выходе из метода.
Читайте также:
Куда скачивать программы на Андроид

Многие языки программирования позволяют учитывать такие обязательства. Контрактное программирование подразумевает эти требования критическими для корректности программ, поэтому они должны быть утверждены при проектировании. Таким образом, контрактное программирование предписывает начинать писать код с написания формальных утверждений корректности (assertions).

Условия, облегчающие применение контрактного программирования:

  • наличие наследования и возможность динамического связывания,
  • способность обрабатывать исключения,
  • возможность автоматического документирования ПО.
  1. Голицына О. Л., Партыка Т. Л., Попов И. И. Языки программирования : учебное пособие / О. Л. Голицына, Т. Л. Партыка, И. И. Попов. — 2-е изд., перераб. и доп. — М. : ФОРУМ, 2010. — 400 с.
  2. Свердлов С. 3. Языки программирования и методы трансляции: Учебное пособие. — СПб.: Питер, 2007. — 638 с.
  3. Столяров А. В. Программирование: введение в профессию. — Изд. 2-е, испр. и доп. : в 3 томах / А. В. Столяров. — Москва : МАКС Пресс, 2021. — Том III : Парадигмы. — 704 с.

27.01.2022, 420 просмотров.

Источник: myfilology.ru

Принципы структурного программирования. Модульная разработка программ

Создание больших сложных программ для решения типовых задач требует от программистов значительных трудовых затрат. Для повышения эффективности составления таких программ применяется структурный подход к программированию, что позволяет создавать большие программы практически без ошибок и в запланированные сроки. Цель структурного подхода — так построить программы, чтобы их можно было использовать и изменять без участия авторов. Это способствует уменьшению затрат на создание и дальнейшее использование программ при эксплуатации.

Структурный подход к программированию состоит из трех частей:

  • нисходящей разработки;
  • структурного программирования (кодирования)
  • сквозного контроля (тестирования).
2. Нисходящая разработка

При нисходящей разработке проектирование и программирование ведутся по методу «сверху-вниз». Этот метод предусматривает сначала определение задачи в общих чертах, а затем постепенное уточнение ее структуры путем пошагового внесения мелких деталей. Таким образом, исходная задача разбивается на ряд более простых подзадач.
Каждой подзадаче соответствует свой независимый от любой другой подзадачи программный модуль, который представляет собой функционально-независимую часть программы — набор нескольких операторов программы. При нисходящей разработке осуществляется последовательная детализация проекта от модулей верхнего уровня до модулей нижнего уровня. Для каждого модуля определяют алгоритм решения задачи, области допустимых и возможных исходных значений переменных.
Чаще всего модуль реализует одну функцию, а затем возвращает управление вызвавшему его модулю. Запрещается заканчивать выполнение всей программы в вызванном модуле, выбор о ее выполнении принимается только вызывающим модулем.
Основные требования к программному модулю: наличие только одного входа и одного выхода; ограниченные размеры модуля.

3. Структурное программирование (кодирование)

Структурное программирование – это метод написания хорошо структурированных программ произвольного размера и сложности на основе основных управляющих структур (базовых). К ним относятся следование, ветвление и цикл. Основные управляющие структуры облегчают понимание программы и ее тестирование, поскольку весь поток управления в программе направлен «сверху вниз» от структуры к структуре.

Перечень основных управляющих структур приведен ниже.

1. Процесс, следование (рисунок 1)

Программирование. Управляющие структуры. Процесс

Рисунок 1. Геометрическое обозначение процесса

2. Разветвление, решение (рисунок 2). Если выполняется условие (Condition), то выполняется оператор 1 (Statement 1). Иначе выполняется оператор 2 (Statement 2).

Программирование. Разветвление. Геометрическое обозначение

Рисунок 2. Геометрическое обозначение разветвления

3. Цикл

Программирование. Управляющая структура цикл. Геометрическое обозначение

Рисунок 3. Геометрическое обозначение цикла (циклического процесса)

4. Тестирование

Тестирование (сквозной контроль) — это процесс поиска ошибок в программе, который планируется до начала программирования. Целесообразно проводить тестирование по методу «сверху-вниз», пытаясь достичь минимального числа контрольных примеров.
Сначала определяют цели тестирования. Ими могут быть всякого рода проверки: реакция программы на недопустимые входные данные, взаимодействие между модулями, работа программы при минимальных и максимальных входных данных.
Тестирование считается законченным, когда осуществлены все необходимые проверки на соответствие программы целям ее разработки и все найденные ошибки обезврежены на этапе отладки с использованием специальных приложений — отладчиков.

Читайте также:
Программа установка мелодий на контакт для Андроид

В современных системах визуальной разработки приложений спроектированы мощные средства для отладки программ. Например, в системе Lazarus для пошагового отладки программы отведено отдельный подраздел из меню Run (рисунок 4).

Команды отладки в системе Lazarus

Рисунок 4. Команды отладки в системе Lazarus: «Step Into», «Step Over», «Step Out», «Step over to Cursor»

В системе разработки программ Delphi меню команд отладки выглядит примерно так, как показано на рисунке 5.

Команды отладки системы Delphi

Рисунок 5. Команды отладки системы Delphi: «Step Over», «Trace Into», «Trace To Next Source Line», «Run To Cursor»

Связанные темы

  • Разработка программ на ПК. Этапы подготовки программы на ПК. Компиляторы, интерпретаторы
  • Понятие алгоритма. Способы записи алгоритмов. Классификация алгоритмов по структуре. Свойства алгоритмов

Источник: www.bestprog.net

Базис для построения любой структурной программы включает следующие виды структур

Кроме классов для создания своих типов данных можно использовать структуры , которые унаследованы языком С++ от языка Си. Структура в C++ представляет собой производный тип данных, который представляет какую-то определенную сущность, также как и класс. Нередко структуры применителько к С++ также называют классами. И в реальности различия между ними не такие большие.

Структура также может определять переменные, функции, конструкторы, деструкторы. Однако обычно структуры служат для хранения каких-то общедоступных данных в виде публичных переменных. Для остальных сценариев используются классы.

Для определения структуры применяется ключевое слово struct , а сам формат определения выглядит следующим образом:

struct имя_структуры < компоненты_структуры >;

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

Например, определим простейшую структуру:

#include struct person < unsigned age; std::string name; >; int main()

Здесь определена структура person , которая имеет две переменных: name (представляет тип string) и age (представляет тип unsigned).

После определения структуры мы можем ее использовать. Для начала мы можем определить объект структуры — по сути обычную переменную, которая будет представлять выше созданный тип. Также после создания переменной структуры можно обращаться к ее элементам — получать их значения или, наоборот, присваивать им новые значения. Для обращения к элементам структуры используется операция «точка»:

имя_переменной_структуры.имя_элемента

По сути структура похожа на класс, то есть с помощью структур также можно определять сущности для использования в программе. В то же время все члены структуры, для которых не используется спецификатор доступа (public, private), по умолчанию являются открытыми (public). Тогда как в классе все его члены, для которых не указан спецификатор доступа, являются закрытыми (private).

Кроме того мы можем инициализировать структуру, присвоив ее переменным значения с помощью синтаксиса инициализации:

person tom< 34, «Tom» >;

Инициализация структур аналогична инициализации массивов: в фигурных скобках передаются значения для элементов структуры по порядку. Так как в структуре person первым определено свойство, которое представляет тип unsigned — число, то в фигурных скобках вначале идет число. И так далее для всех элементов структуры по порядку.

При этом любой класс мы можем представить в виде структуры и наоборот. Возьмем, к примеру, следующий класс:

#include class Person < public: Person(std::string name, unsigned age): name, age < >void print() < std::cout private: std::string name; unsigned age; >; int main() < Person bob; bob.print(); >

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru