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

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

Любой язык программирования имеет свой:

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

Критерии классификации языков программирования (яп)

Язык программирования можно классифицировать:

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

    Опишем использованные здесь термины.

    Модель вычисления — это множество допустимых операций, используемых для вычисления.

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

    Модель OSI | 7 уровней за 7 минут

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

    Транслятор – это программа, которая преобразует программный код(исходный) в машинный код(объектный) для последующего непосредственного исполнения.

    3)Классификация яп по разным критериям

    Проклассифицируем языки программирования по разным критериям

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

    1. модели Тьюринга,
    2. Лямбда-исчислению,
    3. комбинаторной логике и т.д.

    Машина Тьюринга

    (для ознакомления)

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

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

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

    Python. Команды print() input()

    Программа на машине Тьюринга задаётся в виде таблицы переходов: если символ А — то сдвиг влево, если Б — сдвиг вправо, если С — записать в ячейку D и сдвинуться влево, если E — то остановить работу (и так далее, пока символы не кончатся).

    Одно из главных определений, задаваемых машиной Тьюринга — это контекст исполнения:

    Контекст выполнения программы — совокупность всех данных, определяющих её поведение.

    Как видно по примеру машины Тьюринга, ЯП манипулируют не данными, а процессом преобразования данных. Но сами правила для обработки данных как-то надо определять и представлять.

    На данный момент найдено два способа задания правил для обработки — это

    формы записи правил.

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

    Машинно-зависимые ЯП (Ассемблер, псевдокод)

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

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

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

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

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

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

    Объектно-ориентированное программирование – это парадигма, в основе которой лежит понятие объекта — некоторого процесса, явления или субъекта, которое объединяет в себе данные об объекте, его свойства и выполняемые объектом действия.

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

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

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

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

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

    Whitespace (англ. пробел) — эзотерический язык программирования, созданный Э. Брэди и К. Моррисом. Он был выпущен в свет 1 апреля 2003 года.

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

    Интересным следствием этого факта является то, что текст программы на языке Whitespace можно «скрыть» внутри исходных кодов другой программы.

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

    Остальные символы игнорируются интерпретатором и могут быть использованы в качестве комментариев.

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

    Необходимо грамотно выбирать средства для решения каждой конкретной проблемы!

    с) По типу используемого транслятора ЯП делятся на интерпретируемые и компилируемые.

    Компилятор переводит исходный текст программы с языка программирования высокого уровня в двоичные коды инструкций процессора.

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

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

    Читайте также:
    3 вольтеровская формула надо возделывать свой сад в контексте дидактической программы просвещения

    Разделение на компилируемые и интерпретируемые языки является условным.

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

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

    Преимущества компилятора и интерпретатора

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

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

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

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

    Часто такие среды называют визуальными средами программирования.

    Визуальное программирование — способ создания программы для ЭВМ путём манипулирования графическими объектами вместо написания её текста (Delphi, VisualBasic).

    Компилятор или интерпретатор языка программирования выступает как составная часть среды проектирования. Сама программа наряду с конструкциями, предусмотренными стандартом, как правило, использует библиотечные функции и классы, предоставляемые средой проектирования. Так, интегрированная среда разработки VisualStudio.NET содержит библиотеку классов MFC (Microsoft Foundation Classes), значительно упрощающую процесс разработки приложений, использующих оконный интерфейс.

    Интегрированная среда проектирования VisualStudio.NET позволяет создавать и компилировать приложения на языках C++, C#, Visual Basic и VisualJ.

    Для разработки приложений на языке С++ предназначается также среда CBuilder.

    Для проектирования приложений на языке Object Pascal используется интегрированная среда проектирования Delphi.

    Наиболее удобной средой разработки программ на языке Java является интегрированная среда проектирования JBuilder.

    d) По уровню абстракции ЯП делятся на низкоуровневые и высокоуровневые.

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

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

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

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

    е) По способу выполнения процессов ЯП делятся на языки поддерживающие последовательные и параллельные процессы вычислений.

    Традиционной считается последовательная модель программирования.

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

    Последовательная модель универсальна. Ее основными чертами являются применение стандартных языков программирования (для решения вычислительных задач это, обычно, Fortran и С/С++), хорошая переносимость программ, но невысокая производительность.

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

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

    Параллельные процессы вычисления

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

    Java ООП, императивный, кросплатформенный,

    НОРМА — декларативный язык предназначен для записи численных методов решения задач математической физики разностными методами.

    Разработчик: Российская академия наук, 90-х годах (http://parallel.ru/tech/norma/ )

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

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

    Modula-3 — универсальный язык программирования, дальнейшее развитие языков Pascal и Modula-2. Включает в себя возможности разработки многопоточных приложений.

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

    Он включает в себя большинство концепций популярных парадигм программирования, в том числе логического, функционального, императивного, объектно-ориентированного, программирования с ограничениями, распределённого и параллельного программирования. 1991 г. Автор(ы): Gert Smolka, Бельгия

    Диаграмма развития некоторых языков программирования

    Источник: studfile.net

    Парадигмы программирования: определение, виды и их особенности

    Lorem ipsum dolor

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

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

    Основные парадигмы программирования

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

    Парадигма объектно-ориентированного программирования

    • абстракция,
    • инкапсуляция,
    • наследование,
    • полиморфизм.

    Парадигма функционального программирования

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

    Программисты, которые отдельно используют ООП или ФП, часто спорят о том, какая из этих двух парадиг м лучше. Но невозможно выделить лучшую, потому что выбор парадигмы зависит от требований к программе и языка, на котором она будет писаться. Язык, который был разработан для функционального программирования , — Haskel l . Однак о н еплохо с этой парадигмой справляется Python.

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

    Программы, написанные по такой модели, обычно легче тестировать и читать, если сравнивать с ООП.

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

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

    Читайте также:
    Как изменить размер видео на компьютере быстро без программ

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

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

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

    К примеру, если написать программу в такой парадигме, которая будет вычислять из большого массива чисел все числа, которые больше 5, но меньше 500 , тогда программисту нужно будет только написать что-то подобное: «Вычислить из «myArray» числа, которые больше 5, но меньше 500». При это м программисту не нужно будет описывать инструкции, каким образом программа должна найти эти числа , т о ест ь о н просто описывает результат.

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

    Логическое программировани е является подвидом декларативного. Это достаточно редкая парадигма. В ее основе лежит использование математической логики и математических принципов , т о ест ь и нформация в программе выводится на основе заданных фактов, расчетов и набора математических правил. Если упростить понимание этой парадигмы до минимума, тогда можно сказать так: программа строится по принципу «вопрос-ответ».

    Такой вид программирования используется языками Prolog и Planner.

    Заключение

    • структурное программирование,
    • компонентно-ориентированное,
    • прототипно-ориентированное,
    • агентно-ориентированное,
    • аппликативное,
    • обобщенное,
    • доказательное,
    • порождающее программирование,
    • и др.

    Современные языки программирования (Парадигмы и модели программирования)

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

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

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

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

    Создатели языков по–разному толкуют понятие язык программирования. К наиболее распространенным утверждениям, признаваемым большинством разработчиков, относятся следующие:

    – Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными процессами.

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

    – Исполнение: язык программирования может использовать специальные конструкции для определения и манипуляции структурами данных и управления процессом вычислений.[1]

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

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

    1. Современные языки программирования

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

    Но тщеславие программистов не единственная причина возникновения новых языков программирования. Время не стоит на месте, развивается и наука и технологии, то, что ещё вчера казалось пределом научно–технического прогресса, сегодня уже вчерашний день.

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

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

    Не смотря на огромное множество языков программирования, лишь немногие из них получили широкую известность и признание программистов. Для того, что бы определить самые популярные языки программирования воспользуемся данными голландской компании «TIOBE Software BV» в первую очередь известной своим регулярно рассчитываемым рейтингом популярности языков программирования. Несмотря на многолетние споры, относительно качества и достоверности рейтинга, других источников позволяющих хоть как-то оценить тенденции в развитии языков программирования на сегодняшний день нет.

    По данным компании «TIOBE Software BV» десять самых популярных языков программирования на декабрь 2010 года представлены в таблице 1.

    Таблица 1 Рейтинг языков программирования [2]

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

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

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

    Рассмотрим эти языки программирования с нескольких основных позиций:

    Какие парадигмы программирования наиболее популярны в современных языках.

    Какие виды трансляторов применяются.

    Какие виды типизации используются.

    2. Парадигмы программирования

    Парадигма (от греч. παράδειγμα, «пример, модель, образец») – набор теорий, стандартов и методов, которые совместно представляют собой способ организации научного знания.

    Парадигма программирования – это совокупность идей и понятий, определяющая стиль написания программ.

    Парадигма программирования – модель или подход к решению проблемы.

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

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

    На сегодняшний день самые известные модели программирования:

    Рассмотрим эти модели подробнее.

    2.1 Императивная модель

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

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

    Читайте также:
    Как называется международная программа по оценке качества обучения школьников

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

    2.2 Декларативная модель

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

    Есть несколько подходов реализующих декларативную модель программирования:

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

    На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных.[3]

    Логическое программирование – основанное на автоматическом доказательстве теорем, с использованием механизмов логического вывода информации с использованием заданных фактов и правил вывода, основанных на формальных исчислениях. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций.[4]

    2.3 Структурная модель

    Структурное программирование – это парадигма программирования, в основе которой лежит представление программы в виде иерархической структуры блоков. В соответствии с данной парадигмой:

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

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

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

    Есть несколько подходов реализующих структурную модель программирования:

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

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

    Класс – это тип, описывающий устройство объектов. Это в чистом виде абстрактный тип данных, создаваемый программистом.

    Объект – сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса.

    Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления.[5]

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

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

    Есть несколько подходов реализующих модель метапрограммирования:

    Генерация кода – при этом подходе код программы не пишется вручную, а создается автоматически программой-генератором на основе другой, более простой программы. Реализуется двумя основными методами:

    Шаблоны. Решают задачу, если соблюдение «правил» сводится к вставке в программу повторяющихся (или почти повторяющихся) кусков кода. Помимо этого, обладают еще рядом достоинств: например, помогают повторному использованию.

    Внешне-языковые средства. Применяются в случаях, если простых средств вроде шаблонов недостаточно. Язык генератора составляется так, чтобы автоматически или с минимальными усилиями со стороны программиста реализовывать правила парадигмы или необходимые специальные функции. Фактически, это – более высокоуровневый язык программирования, а генератор – не что иное, как транслятор. Генераторы пишутся, как правило, для создания специализированных программ, в которых очень значительная часть стереотипна, либо для реализации сложных парадигм.[6]

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

    Таблица 2 Парадигмы и подходы языков программирования [2]

    Основные подходы программирования

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

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

    3. Трансляторы

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

    Транслятор – обслуживающая программа, преобразующая исходную программу, предоставленную на входном языке программирования, в рабочую программу, представленную на объектном языке.

    В настоящее время трансляторы разделяются на две основные группы: компиляторы и интерпретаторы.

    3.1 Компилятор

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

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

    3.2 Интерпретатор

    Интерпретатор – программа или устройство, осуществляющее пооператорную трансляцию и выполнение исходной программы. Интерпретатор не порождает на выходе программу на машинном языке. Распознав команду исходного языка, он тут же выполняет ее.

    Простой интерпретатор – анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления исходного кода на вход интерпретатора. Достоинством такого подхода является мгновенная реакция. Недостаток – такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой. Интерпретатор компилирующего типа – это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является бо́льшее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки – большее требование к ресурсам и требование на корректность исходного кода.[7]

    – Большая переносимость интерпретируемых программ – программа будет работать на любой платформе, на которой есть соответствующий интерпретатор. Как правило, более совершенные и наглядные средства диагностики ошибок в исходных кодах.

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

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

    – Интерпретируемая программа не может выполняться отдельно без программы–интерпретатора. Сам интерпретатор при этом может быть не очень компактным.

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

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

    Виды трансляторов современных языков программирования представлены в таблице 3.

    Таблица 3 Трансляторы современных языков программирования [2]

    компиляция в байт-код интерпретатор

    Источник: www.evkova.org

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