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

10. Процедурные языки программирования, декларативные языки программирования

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

Ada (язык общего назначения)

Basic (версии начиная с Quick Basic до появления Visual Basic)

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

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

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

Наиболее распространённым языком логического программирования является язык Пролог

3) ранние языки-1940е годы. Это линейная последовательность элементарных инструкций низкого уровня

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

11. Функциона́льное программи́рование , Логи́ческое программи́рование , Объе́ктно-ориенти́рованное

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

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

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

Наиболее известными языками функционального программирования являются: [ источник не указан 582 дня ]

  • XQuery
  • Haskell — чистый функциональный. Назван в честь Хаскелла Карри.
  • LISP (Джон МакКарти, 1958, множество его потомков, наиболее современные из которых — Scheme и Common Lisp).
  • ML (Робин Милнер, 1979, из ныне используемых диалектов известны Standard ML и Objective CAML).
  • Miranda (Дэвид Тёрнер, 1985, который впоследствии дал развитие языку Haskell).
  • Объявление классов с полями (данными — членами класса) и методами (функциями — членами класса).
  • Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООП-языков поддерживают только единичное наследование.
  • Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычно это модификаторы доступа к полям и методам, типа public, private, обычно также protected, иногда некоторые другие.
  • Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов.
  • Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООП-языках все методы классов являются виртуальными.

Источник

Процедурные языки программирования

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

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

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

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

Бейсик (от BASIC, сокращение от англ. Beginners Allpurpose Symbolic Instruction Codeуниверсальный код символических инструкций для начинающих; англ. basicосновной, базовый) — семейство высокоуровневых языков программирования.

Был разработан в 1963 году профессорами Дартмутского колледжа Томасом Куртом (Thomas E. Kurtz) и Джоном Кемени (John G. Kemeny).

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

До середины 1960-х компьютеры (ЭВМ) были слишком дорогими машинами, использовавшимися в основном для научно-технических задач, и выполнявшими задачи не в интерактивном режиме (т.н. пакетная обработка), когда общение с машиной осуществлялось через её оператора.

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

Однако, в течение 1960-х цены на компьютеры стали падать так, что даже небольшие компании могли их себе позволить; их быстродействие всё увеличивалась и наступило время, когда стало возможно организовать более эффективную непосредственную работу пользователей с компьютерами в так называемом режиме разделения времени (time-sharing).

Бейсик был придуман в 1963 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Куртцом, и под их руководством был реализован командой студентов колледжа. Со временем, когда стали появляться другие диалекты, этот «изначальный» диалект стали называть Dartmouth BASIC.

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

При проектировании языка использовались следующие восемь принципов: новый язык должен

  • быть простым в использовании для начинающих
  • быть языком программирования общего назначения
  • предоставлять возможность расширения функциональности, доступную опытным программистам
  • быть интерактивным
  • предоставлять ясные сообщения об ошибках
  • быстро работать на небольших программах
  • не требовать понимания работы аппаратного обеспечения
  • защищать пользователя от операционной системы
  • простую языковую базу, из которой вынесены в библиотеки многие существенные возможности, вроде математических функций или функций управления файлами;
  • ориентацию на процедурное программирование, обеспечивающую удобство применения структурного стиля программирования;
  • систему типов, предохраняющую от бессмысленных операций;
  • использование препроцессора для, например, определения макросов и включения файлов с исходным кодом;
  • непосредственный доступ к памяти компьютера через использование указателей;
  • минимальное число ключевых слов;
  • передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке выполняется с помощью указателей);
  • указатели на функции и статические переменные
  • области действия имён;
  • записи — определяемые пользователем собирательные типы данных (структуры), которыми можно манипулировать как одним целым;
  • автоматическое управление памятью;
  • поддержка объектно-ориентированного программирования (при этом первые версии C++ генерировали код программы на языке Си);
  • вложенные функции (существуют компиляторы языка Си реализующие эту функцию, например компилятор GNU);
  • полиморфизм функций и операторов;
  • встроенная поддержка многозадачности и сети
  • функции высшего порядка
  • карринг.
  • применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
  • широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,
  • аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

Источник

Читайте также:  Stm32f103c8t6 программирование через uart
Оцените статью