Файл: Анализ методов современного программирования (Понятие технологии программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 27.04.2023

Просмотров: 323

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

If P Then S;

  • Структура типа «выбор – иначе» (рис. 13 б) являются расширенным вариантом структуры типа ЕСЛИ – ТО – ИНАЧЕ. Здесь проверяемое условие Р может принимать не два логических значения, а несколько порядковых значений, например, 1, 2, …, n. Если Р = i, то будет выполняться действие Si.

Если же значение Р будет выходить из диапазона допустимых значений, то выполняется действие S (в укороченном варианте «выбор» никакого действия не производится и управление передается к следующей структуре.

  • Case P Of
  • S1;
  • S2;
  • N: Sn
  • Else S
  • End
  • . Структура типа «цикл с постусловием» (рис. 13 в) – обеспечивает многократное выполнение действия S до тех пор, пока не выполняется условие Р.

В языке Pascal такая структура имеет следующий формат:

  • Repeat
  • S
  • Until P;
  •  Структура типа «цикл с параметром» (рис. 13 г) – обеспечивает заранее определенное многократное выполнение действия S. При этом здесь последовательно выполняются следующие типовые операции:
  1. Задание начального значения используемого параметра цикла (например, если переменной цикла является i, то ей присваивается значение i1, т.е. i:=i1);
  2. выполнение действий S, предусмотренных в теле цикла;
  3. изменение параметра цикла, который обеспечивает вычисление результата с новыми начальными данными (например, если параметр цикла i изменяется с шагом i3, i:=i+ i3);
  4. проверка текущего значения параметра цикла с заданным конечным значением (i)
  5. переход к повторению тела цикла, если параметр цикла не превысил конечного значения, иначе — выполнение следующих действий или вывод результата.[22]

Рис 13. Дополнительные алгоритмические структуры.

Выводы по 2 части.

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

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

Концепция объектно-ориентированного программирования подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями, на которые они должны реагировать при выполнении программы. В этом состоит главное отличие ООП от процедурного программирования, где отдельно определённые структуры данных передаются в процедуры (функции) в качестве параметров. Таким образом, объектно-ориентированная программа состоит из объектов – отдельных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через определённые интерфейсы.[23]

Объектно-ориентированный язык программирования должен обладать следующими свойствами:

  1. абстракции – формальное о качествах или свойствах предмета путем мысленного удаления некоторых частностей или материальных объектов;
  2. инкапсуляции – механизма, связывающего вмести код и данные, которыми он манипулирует, и защищающего их от внешних помех и некорректного использования;
  3. наследования – процесса, с помощью которого один объект приобретает свойства другого, т.е. поддерживается иерархической классификации;
  4. полиморфизма – свойства, позволяющего использовать один и тот же интерфейс для общего класса действий.[25]

Разработка объектно-ориентированных программ состоит из следующих последовательных работ:

  • определение основных объектов, необходимых для решения данной задачи;
  • определение закрытых данных (данных состояния) для выбранных объектов;
  • определение второстепенных объектов и их закрытых данных;
  • определение иерархической системы классов, представляющих выбранные объекты;
  • определение ключевых сообщений, которые должны обрабатывать объекты каждого класса;
  • разработка последовательности выражений, которые позволяют решить поставленную задачу;
  • разработка методов, обрабатывающих каждое сообщение;
  • очистка проекта, то есть устранение всех вспомогательных промежуточных материалов, использовавшихся при проектировании;
  • кодирование, отладка, компоновка и тестирование.

Объектно-ориентированное программирование позволяет программисту моделировать объекты определённой предметной области путем программирования их содержания и поведения в пределах класса. Конструкция «класс» обеспечивает механизм инкапсуляции для реализации абстрактных типов данных. Инкапсуляция как бы скрывает и подробности внутренней реализации типов, и внешние операции и функции, допустимые для выполнения над объектами этого типа.[24]


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

Базовым в объектно-ориентированном программировании является понятие объекта. Объект имеет определённые свойства. Состояние объекта задаётся значениями его признаков. Объект «знает», как решать определённые задачи, то есть располагает методами решения. Программа, написанная с использованием ООП, состоит из объектов, которые могут взаимодействовать между собой.

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

Выводы по 3 части.

Объектно-ориентированное программирование имеет целый ряд преимуществ:

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

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

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

Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами (в терминах условий или ограничений) и цели (запроса). Процесс выполнения программы трактуется как процесс общезначимости логической формулы, построенной из программы по правилам, установленным семантикой используемого языка. Результат вычисления является …побочным продуктом этого процесса. В реляционном программировании нужно только специфицировать факты, на которых алгоритм основывается, а не определять последовательность шагов, которые требуется выполнить. Это свидетельствует о декларативности языка логического программирования. Она метко выражена в формуле Р. Ковальского: «алгоритм = логика + управление».


Языки логического программирования характеризуются:

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

Логические программы, в принципе, имеют небольшое быстродействие, так как вычисления осуществляются методом проб и ошибок, поиском с возвратами к предыдущим шагам.[26]

Языки логического программирования

  • Чистый Пролог

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

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

Существуют разные языки программирования, использующие различные способы выбора. Грубо говоря, они делятся на два класса. Пролог и его расширения основаны на последовательном выполнении. Другие языки, такие, как Parlog, Параллельный Пролог и GHC, основаны на параллельном выполнении. Последовательные языки отличаются от параллельных методом реализации недетерминизма. Отличие Пролога от его версий состоит в методе выбора редуцируемой цели.[29]

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

Другими словами, в Прологе используется стековый метод расписания. В Прологе резольвента используется как стек – для редукции выбирается верхняя цель, производные цели помещаются в стек резольвенты.


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

Сравнение с традиционными языками программирования

Язык программирования характеризуется присущими ему механизмами управления и обработки данных. Пролог как универсальный язык программирования можно рассматривать и с этих точек зрения.

При успешном выполнении вычисления средства управления программ на языке Пролог подобны средствам управления в обычных процедурных языках. Обращение к некоторой цели соответствует вызову процедуры, порядок целей в теле правила соответствует последовательности операторов. Точнее, правило А = В1 ,В2 ,…,Вn можно рассматривать как определение процедуры:

Procedure A

Call B1

Call B2

Call Bn

End

Рекурсивный вызов цели в Прологе в последовательности действий и в реализации подобен тому же вызову в обычных рекурсивных языках. Различие возникает при реализации возврата. В обычных языках, если вычисление не может быть продолжено (например, все ветви в операторе case ложны), возникает ошибка выполнения. В Прологе вычисление просто возвращается к последнему выбору и делается попытка продолжить вычисления по новому пути.[30]

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

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

В логическом программировании обработка данных полностью заключена в алгоритме унификации. В унификации реализованы:

  • однократное присваивание,
  • • передача параметров,
  • • размещение записей,
  • • доступ к полям записей для одновременных чтения/записи.[27]