Файл: Обзор языков программирования высокого уровня (Программирование).pdf
Добавлен: 30.03.2023
Просмотров: 215
Скачиваний: 1
Введение
С глубокой древности известны попытки создать устройства, ускоряющие и облегчающие процесс вычислений. С момента появления вычислительных машин, различного рода вычислениями стали заниматься компьютерные программы и веб-сервисы, написанные программистами с помощью различный языков программирования.
В связи с большим ростом вычислительных систем растет и число языков программирования, которым и посвящена данная работа.
Целью работы является рассмотрение основных языков программирования высокого уровня.
Задачи:
- рассмотреть классификации языков программирования;
- изучить особенности языков программирования;
- провести сравнительный анализ.
1 Программирование
Программа – это последовательность инструкций (команд), описывающая алгоритм решения с помощью компьютера.
Программирование — процесс создания или модификации программ для ЭВМ.[1]
Язык программирования — формальный язык, предназначенный для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под её управлением.
Для разработки программ используются большое количество языков программирования, выбор языка для разработки программы напрямую зависит от поставленной задачи.
Программа может содержать инструкции, написанные на языках программирования высокого уровня (ЯВУ), которые позволяют записать алгоритмы в удобной для понимания человеком форме, приближенной к естественным языкам (исходный код), или последовательность машинных команд (инструкций, «понятных» компьютеру, на котором данная программа должна выполняться).
1.1 Классификация языков программирования
Существует множество классификаций языков программирования по различным критериям. На рисунке 1.1 приведены некоторые из них.
Рисунок 1.1 - Разбиение языков программирования по части классификаций
1.1.1 Языки высокого и низкого уровня
Язык низкого уровня – это язык программирования, предназначенный для определенного типа компьютера и отражающий его внутренний машинный код; языки низкого уровня часто называют машинно-ориентированными языками. Их сложно конвертировать для использования на компьютерах с разными центральными процессорами, а также довольно сложно изучать, поскольку для этого требуется хорошо знать внутренние принципы работы компьютера. Пример низких языков: Ассемблер.
Язык высокого уровня–это язык программирования, понятия и структура которого удобны для восприятия человеком. Любая программа на языке высокого уровня впоследствии транслируется в машинный код.[7] Языки высокого уровня используют для решения проблем, и поэтому их часто называют проблемно-ориентированными языками. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах. Примеры высоких языков: C++, С#, Visual Basic, Python.
1.1.2 Классификация по поколениям
Языки программирования принято делить на пять поколений.
К первому поколению относят машинные языки — языки программирования на уровне команд процессора конкретной машины. Для программирования не использовался транслятор, команды программы вводились непосредственно в машинном коде переключателями на передней панели машины. Такие языки были хороши для детального понимания функционирования конкретной машины, но сложны для изучения и решения прикладных задач.
Языки второго поколения (2GL) создавались для того, чтобы облегчить тяжёлую работу по программированию, перейдя в выражениях языка от низкоуровневых машинных понятий ближе к тому, как обычно мыслит программист. Эти языки появились в 1950-е годы, в частности, такие языки как Фортран и Алгол.
Под третьим поколением (3GL) первоначально понимались все языки более высокого уровня, чем ассемблер. Главной отличительной чертой языков третьего поколения стала независимость от аппаратного обеспечения, то есть выражение алгоритма в форме, не зависящей от конкретных характеристик машины, на которой он будет исполняться. Код, написанный на языке третьего поколения, перед исполнением транслируется либо непосредственно в машинные команды, либо в код на ассемблере и затем уже ассемблируется. При компиляции, в отличие от предыдущих поколений, уже нет соответствия один-к-одному между инструкциями программы и генерируемым кодом. Примеры языков: C#, Java, C++.
Языки четвертого поколения предназначены для реализации крупных проектов, повышают их надежность и скорость создания, ориентированы на специализированные области применения, и используют не универсальные, а объектно-ориентированные языки, оперирующие конкретными понятиями узкой предметной области. В эти языки встраиваются мощные операторы, позволяющие одной строкой описать такую функциональность, для реализации которой на языках младших поколений потребовались бы тысячи строк исходного кода. Примеры: 1С, SQL.
К пятому поколению относятся также системы автоматического создания прикладных программ с помощью визуальных средств разработки, без знания программирования. Основная идея была заключена в возможности автоматического формирования результирующего текста на универсальных языках программирования (который необходимо откомпилировать). Инструкции же вводятся в компьютер в максимально наглядном виде с помощью методов, наиболее удобных для человека, не знакомого с программированием. Пример: SCADA.
1.1.3 Классификация по способу трансляции
Можно выделить три принципиально разных способа реализации языков программирования: компиляция, интерпретация и встраивание.
Компиляция означает, что исходный код программы сперва преобразуется в целевой (машинный) код специальной программой, называемой компилятором — в результате получается исполнимый модуль, который уже может быть запущен на исполнение как отдельная программа.
Интерпретация же означает, что исходный код выполняется непосредственно, команда за командой (иногда — с минимальной подготовкой, буквально после разбора исходного кода в AST), — так что программа просто не может быть запущена без наличия интерпретатора.
Встраивание языка можно философски рассматривать как «реализацию без трансляции» — в том смысле, что такой язык является синтаксическим и семантическим подмножеством некого другого языка, без которого он не существует.
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем, при каждом изменении текста программы требуется её перекомпиляция, что замедляет процесс разработки.
Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету».
1.1.4 Классификация по парадигме программирования
Парадигма программирования – это система идей и понятий, определяющих стиль написания компьютерных программ. [5]
Эта классификация имеет довольно большое число разных стилей программирования. Ниже описано лишь три из них.
Модульное программирование
Данный тип программирования представляет организацию программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определённым правилам.
Объектно-ориентированное программирование
Объектно-ориентированное программирование (ООП) - метод программирования, в котором главными элементами программ являются объекты.[4]
Важнейшие принципы ООП:
- Инкапсуляция - объединение данных и свойственных им процедур обработки в одном объекте. Фундаментальным понятием является класс - шаблон, на основе которого может быть создан конкретный программный объект. Он описывает свойства и методы, определяющие поведение объектов этого класса. Каждый конкретный объект, имеющий структуру этого класса, называется экземпляром класса.
- Наследование - такая организация классов, которая предусматривает создание новых классов на базе существующих и позволяет классу потомку иметь (наследовать) все свойства класса – родителя.
- Полиморфизм - означает, что рожденные объекты обладают информацией о том, какие методы они должны использовать в зависимости от того, в каком месте цепочки (дерева классов) они находятся. Это концепция, реализующая "множество методов в одном интерфейсе".
Функциональное программирование
Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния.[6]
Так же выделяют императивное программирование, декларативное программирование, структурное программирование, логическое программирование, компонентно-ориентированное программирование, прототипно-ориентированное программирование, агентно-ориентированное программирование и др.
2 Языки программирования высокого уровня
На текущий момент существует большое количество языков программирования высокого уровня. Ниже представлена малая их часть:
- Basic;
- Pascal;
- Delphi;
- Fortran;
- С и С++;
- Java;
- C#;
- Python;
- и т.д.;
Рассмотрим некоторые из них:
2.1 C++
C++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения.
Достоинства:
Высокая совместимость с языком С, позволяющая использовать весь существующий С-код.
Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщенное программирование, метапрограммирование (шаблоны, макросы).
Имеется возможность работы на низком уровне с памятью, адресами, портами.
Возможность создания обобщённых контейнеров и алгоритмов для разных типов данных, их специализация и вычисления на этапе компиляции, используя шаблоны.
Кроссплатформенность. Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем.
Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы.
Недостатки:
Синтаксис, провоцирующий ошибки:
Препроцессор, унаследованный от С, очень примитивен.
Плохая поддержка модульности (по сути, в классическом Си модульность на уровне языка отсутствует, её обеспечение переложено на компоновщик). Подключение интерфейса внешнего модуля через препроцессорную вставку заголовочного файла (#include) серьёзно замедляет компиляцию при подключении большого количества модулей (потому что результирующий файл, который обрабатывается компилятором, оказывается очень велик).
2.2 C#
C# нельзя рассматривать только как язык, это часть большой системы, которая включает в себя ОС Windows, среду разработки Visual Studio (и другие инструменты), ну и, конечно, саму Microsoft, которая обеспечивает поддержку этого языка. C# будет существовать и развиваться, пока существует Microsoft и пока люди пользуются Windows, а это будет ещё очень и очень долго.
Достоинства:
- легкость обучения;
- много синтаксического сахара. Синтаксический сахар — это такие конструкции, которые созданы для облегчения написания и понимания кода.
- возможность использовать его в написании как десктопных программ, так и мобильных приложений, а также сайтов.
Минусы:
- ориентированность, в основном, только на .NET (на Windows платформу);
- бесплатность только для небольших компаний и программистов одиночек.
2.3 Java
Язык Java — полностью объектно-ориентированный язык. Сказанное означает, что для написания даже самой маленькой и самой простой программы придется описать по меньшей мере один класс.[3]