Основные стили и языки программирования
Все способы описания алгоритмов "грешат" существенным недостатком: записи предписаний не могут непосредственно восприниматься машиной и в дальнейшем выполняться. Поэтому они могут использоваться только для предварительной работы с алгоритмом в расчете на то, что существуют средства описания алгоритмов, используя которые символы алгоритма можно ввести в память ЭВМ и затем выполнить задание предписания для получения искомых результатов.
Средствами такого описания алгоритма являются языки программирования, позволяющие на основе строго определенных правил формировать последовательность предписаний, однозначно отражающих смысл и содержание частей алгоритма с целью их последующего исполнения на ЭВМ.
Язык программирования – набор правил, определяющих систему записей, составляющих программу, синтаксис и семантику используемых грамматических конструкций.
Алгоритм, записанный по правилам языка программирования, является исходной программой на этом языке.
Компьютеры непосредственно выполняет программы на машинном языкепрограммирования данной ЭВМ. При этом программа представляет собой набор отдельных команд компьютера. Эти команды являются достаточно "простыми", например, сложение, умножение, сравнение и пересылка отдельных данных. Каждая команда содержит в себе сведения о том, какая операция должна быть выполнена (код операции), с какими операндами (адреса данных или непосредственно сами данные) выполняются вычисления и куда (адрес) должен быть помещен результат.
Машинные языки были первыми языками программирования. Программирование на них затруднительно ввиду того, что, во-первых, эти языки различны для каждого типа ЭВМ, во-вторых, являются трудоемкими для большинства пользователей по причине необходимости знания особенностей каждой ЭВМ и большого количества реализуемых ею операций (команд). Данные языки обычно используются для разработки системных программ, при этом чаще всего применяются специальные экономичные языки – Ассемблеры, близкие к соответствующим машинным языкам. Их называют языками низкого уровня.
В настоящее время выделяют основные стили программирования:
• функциональное;
• логическое;
• объектно-ориентированное.
Сущность функционального (аппликативного) программирования определена А. П. Ершовым как "... способ составления программ, в которых единственным действием является вызов функции, единственным способом расчленения программы на части является введение имени для функции, а единственным правилом композиции — оператор суперпозиции функции. Никаких ячеек памяти, ни операторов присваивания, ни циклов, ни, тем более, блок-схем, ни передачи управления".
Роль основной конструкции в функциональных языках играет выражение. К нему относятся скалярные константы, структурированные объекты, функции, тела функций и вызовы функций. Функция трактуется как однозначное отображение из Хn в X, где Х — множество выражений.
Аппликативный язык программирования включает следующие элементы:
• классы констант, которыми могут манипулировать функции;
• набор базовых функций, которые программист может использовать без предварительного объявления и описания;
• правила построения новых функций из базовых;
• правила формирования выражений на основе вызовов функций.
Аппликативные языки – языки программирования очень высокого уровня. Первым таким языком был LISP(ЛИСП) (LISt Processing - обработка списков), созданный в 1959 году. Цель его создания состояла в организации удобства обработки символьной информации. Существенная черта этого языка — унификация программных структур и структур данных: все выражения записываются в виде списков. Язык ЛИСП предназначается для обработки строк и рекурсивных данных, выполнения арифметических и логических операций. Он широко применяется в создании ПО интеллектуальных систем обработки информации.
Логическое, или реляционное программирование‚ открыло появление языка РROLOG (Пролог) (PROgramming in LOGic — программирование в терминах логики). Этот язык был создан французским ученым А. Кольмероэ в 1973 году. В настоящее время известны и другие языки, однако наиболее развитым и распространенным языком логического программирования является именно Пролог. Языки логического программирования, в особенности Пролог, широко используются в системах искусственного интеллекта.
Центральным понятием в логическом программировании является отношение.Программа представляет собой совокупность определений отношений между объектами (в терминах условий или ограничений) и цели (запроса). Языки логического программирования характеризуются: высоким уровнем; строгой ориентацией на символьные вычисления; возможностью инверсных вычислений, т. е. переменные в процедурах не делятся на входные и выходные; возможной логической неполнотой, поскольку зачастую невозможно выразить в программе определенные логические соотношения, а также невозможно получить из программы все выводы правильные.
Логические программы, в принципе, имеют небольшое быстродействие, т. к. вычисления осуществляются методом проб и ошибок, поиском с возвратами к предыдущим шагам.
Прототипом объектно-ориентированного программирования послужил ряд средств, входящих в состав языка SIMULА-67. Но в самостоятельный стиль оно оформилось с появлением языка SMALLTALK разработанного А. Кеем в 1972 году и первоначально предназначенного для реализации функций машинной графики.
В основе этого стиля программирования лежит понятие объекта, а суть его выражается формулой: "объект = данные + процедуры". Каждый объект интегрирует в себе некоторую структуру данных и доступные только ему процедуры их обработки, называемые методами. Объединение данных и процедур в одном объекте называется инкапсуляцией и присуще объектно-ориентированному программированию.
Для описания объектов используют класс, который определяет свойства и методы объекта, принадлежащего этому классу. Соответственно любой объект можно определить как элемент класса. Программирование рассматриваемого стиля заключается в выборе имеющихся или создании новых объектов и организации взаимодействия между ними. При создании новых объектов их свойства могут добавляться или наследоваться от объектов-предков. В процессе работы с объектами допускается полиморфизм – возможность использования методов с одинаковыми именами для обработки данных разных типов.
К наиболее современным объектно-ориентированным языкам программирования относятсяС++ и Jаvа. Они являются языками высокого уровня.
Язык программирования С (Си) первоначально был разработан для реализации операционной системы UNIX в начале 70-х годов. В последующем приобрел высокую популярность среди системных и прикладных программистов. Этот язык реализован на большинстве современных ЭВМ. Он является высокоэффективным языком для получения экономных машинных программ с точки зрения быстродействия и объема занимаемой памяти.
В Си сочетаются достоинства современных высокоуровневых языков в части управляющих конструкций и структур данных с возможностями доступа к аппаратным средствам ЭВМ на уровне, который обычно ассоциируется с языком низкого уровня типа языка Ассемблера. Язык Си имеет синтаксис, обеспечивающий краткость программы, а компиляторы способны генерировать эффективный объектный код.
Язык С++ был разработан в начале 80-х годов Б. Cтрауструпом. Им была создана компактная компилирующая система, в которой за основу был взят язык С, дополненный элементами языков ВСРL, Simu1а-67 и А1gо1-68. К 1990 году была выпущена третья версия языка С++, принятая комитетом АNSI в качестве исходного материала для его стандартизации.
В 1990 году Д. Гослинг на основе расширения С++ разработал объектно-ориентированный язык Оаk, основным достоинством которого было обеспечение сетевого взаимодействия различных по типу устройств. Новая интегрируемая в Internet версия языка, получила название Jаvа. Первый браузер, который поддерживал язык Jаvа, получил название NоtJаvа. С января 1995 года Jаvа получает распространение в Intеrnеt.
Согласно официальному определению авторов, Jаvа является простым объектно-ориентированным и архитектурно нейтральным языком интерпретирующего, типа, обеспечивающим надежность, безопасность и переносимость, обладающим высокой производительностью в сочетании с многопоточностью и динамичностью. Jаvа демонстрирует более гибкую и мощную систему инкапсуляции информации. Принципиальной разницей между Jаvа и С++ является то, что первый из них является интерпретируемым, а второй — компилируемым. Синтаксис языков практически полностью совпадает.
В силу своей конструктивности идеи объектно-ориентированного программирования используются во многих универсальных процедурных языках.
Pаsса1 (Паскаль) является одним из наиболее популярных среди прикладных программистов процедурным языком программирования, особенно для ПЭВМ. Он основан на принципах языка АЛГОЛ. Этот язык удобен для организации диалога, обеспечивает создание надежного ПО, позволяет осуществлять манипулирование с нечисловыми данными, дает возможность пользователям вводить и использовать необходимые для них типы данных произвольного характера.
В языке Pascal реализован ряд концепций, рассматриваемых как основа "дисциплинированного" программирования и заимствованных впоследствии разработчиками многих языков. Одним из существенных признаков языка Pascal является последовательная и достаточно полная реализация концепции структурного программирования. Причем это осуществляется не только путем упорядочивания связей между фрагментами программы по управлению, но и за счет структуризации данных. Кроме того, в языке реализована концепция определения новых типов данных на основе уже имеющихся. Этот язык, в отличие от языка С, является строго типизированным. Pascal характеризуется высоким уровнем, широкими возможностями, стройностью, простотой и краткостью, строгостью, способствующей написанию эффективных и надежных программ, высоким коэффициентом реализации на ЭВМ. В настоящее время широко используются такие версии этого языка для ПЭВМ, как Воrland Раsсаl, Тurbо Раsсаl со специальной библиотекой объектно-ориентированного программирования Тurbo Vsion.
Язык АДА, созданный на основе языка ПАСКАЛЬ, является структурированным. Его преимущества проявляются в программировании задач, решенных в реальном масштабе времени.
В последнее время многие программы, в особенности объектно-ориентированные, реализуются каксистемы визуального программирования. Отличительной особенностью таких систем является мощная среда разработки программ из готовых «строительных блоков», позволяющая создать интерфейсную часть программного продукта в диалоговом режиме, практически без кодирования программных операций. К числу объектно-ориентированных систем визуального программирования относятся: Visual Basic, C++ Builder и Visual C++.