Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

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

Содержание:

Введение

Информационные технологии применяются сейчас практически во всех сферах жизни человечества. Эти технологии коренным образом изменили мир. Значительные успехи в телекоммуникациях, энергетике, транспорте, медицине, образовании, космических исследованиях и других областях деятельности человечества достигнуто благодаря использованию информационных технологий. Однако такое расширение сферы их применений имеет и негативную сторону. человечество становится все более зависимым от надежного и правильного функционирования компьютерных систем; ошибки в их работе время ведут к огромным финансовым, но даже человеческим потерям. До сих пор фирмы-разработчики программного обеспечения не дают гарантию на программные продукты, которые они предлагают пользователю. Но такого фактически нет ни в одной другой сфере деятельности. Любой легальный продавец какого-то товара дает гарантии качества и готов нести (вспомним возвращения миллионов автомобилей на заводы производителя в случае обнаружения дефектов) финансовую и юридическую ответственность за поставку недоброкачественного продукта.

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

Задачи курсовой работы:

1.Рассмотреть эволюцию понятия «язык программирования»

2. Изучить классификацию языков программирования

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

Объект исследования: информационные технологии на современном этапе

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

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

Глава 1. Теоретические основы понятия языка программирования

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

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

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

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

Принцип номинативности говорит о необходимости использовать отношение именования для работы с программами и данными.

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

Принцип композиционности был основным в композиционном программировании, предложенном В.Н. Редько. Разным аспектам номинативности (именования) посвятили свои работы Аристотель, Гоббс, Джон Стюарт Милль, Джордж Буль, Пирс, Фреге, Рассел, Крипке и многие другие.

Большой толковый словарь современного русского языка , электронный словарь и другие словари дают следующую трактовку слова «программа».

Этимология от греческого prographein - предварительная запись (pro - перед + graphein - писать). Позже латинское programma: письменное сообщение.

Значения:

• заранее продуманный план какой-либо деятельности, работы и тому подобное;

• план для программирования некоторого механизма (как компьютер)

• последовательность кодов инструкций, можно ввести в механизм (например, компьютер)[2].

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

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

• чертежи или диаграмма,

• метод достижения конечной цели,

• упорядоченная классификация частей проекта или цели,

• подробная программа действий[3].

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

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

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

В этой триаде развития можно говорить об аналогии между введенными понятиями и такими категориями гносеологии, как «субъект - цель (цель) - средство». Иначе говоря, можно говорить о том, что понятие пользователя, проблемы и программы есть программологическими проекциями в соответствии с категориями субъекта, цели и средства.

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

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

Таблица 1-Сходство и различия в языках

Характе- ристика языка

Природный язык

Языки программирования

1

Происхождение

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

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

2

Основные аспекты

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

Основных аспектов немного, но они достаточно точные определения.

3

Точность определения языка

Точных определений нет, есть разные модели. Языка многозначны.

Языки программирования, как правило, точно определены. Язык однозначна.

4

Открытость

Язык постоянно расширяется

Язык фиксированный

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

Язык программирования - это знаковая система для описания алгоритмов программ, ориентированных на конкретных исполнителей (прежде всего ЭВМ).

Знаковая система состоит из трех компонентов:

1) правила, описывающие синтаксис;

2) правила, задающие семантику синтаксически правильных конструкций;

3) правила, формирующие прагматику синтаксически правильных конструкций.

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

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

Семантический аспект

программа -

единство существенных аспектов, синтаксис тесно связан с другими аспектами программ

В теории формальных языков

синтаксический аспект изучается в абстракции от других аспектов

Синтасический аспект

...

...

...

...

Синтаксический аспект

Рисунок 1- Абстрагирования синтаксического аспекта от других аспектов программ

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

Уточнение синтаксического аспекта искусственных языков осуществляется на основе понятия формального языка. Как уже говорилось, это абстрактное понятие, отражающее первые (синтаксические) характеристики речи. Поэтому термин «формальный» понимается не только как «точно заданный», но и как «абстрактный»[5].

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

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

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

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

Отметим, что этот принцип намечает определенное различие между семантикой, которая толкуется в теоретико-функциональном смысле, и синтаксисом, для которого более адекватной является теоретико-множественная формализация[6].

Итак, первая над-абстрактная модель языка - это некоторое множество L = {si | iI}. На этом уровне абстракции ничего кроме теоретико-множественных понятий нет, поэтому нет и собственно теории языков (а есть теория множеств). Надо переходить на другой уровень абстракции, который имеет хотя бы некоторые специфические характеристики языков. Этот переход, как известно из диалектической логики, является переходом от целого к частям. Здесь главное - выделить структуру, связывает целое с частями. Чтобы это сделать, надо конкретизировать структуру.

Структура последовательности используется и в естественных языках, например, печать текста на клавиатуре порождает именно последовательность букв. Кроме того, устные разговоры фактически определяют последовательности фонем. Принцип толкования предложений языка как последовательностей: на следующем уровне абстракции предложения рассматриваются как последовательность букв определенного алфавита. Определено, что здесь абстрагируемся от порядка построения цепочек. Например, можно было бы различать цепочки (ab) c и a (bc). Этот уровень рассмотрения будем обозначать как L.SS (Language is a Set of Sequences) .Наведени соображения и постулаты позволяют ввести следующую математическую модель формального языка.

Абстрактная модель формального языка - это некоторое подмножество L A*, где A * - конечные последовательности букв из алфавита A. Это фактически является определенным абстрактным понятием формального языка. Связь моделей задается операцией абстрагирования absL, которая является операцией перевода множества в множество с инкапсуляцией структуры последовательности предложений. .На данном уровне абстракции исследуют теоретико- множественные операции и операции над последовательностями. Вместе с тем такие операции слишком бедны и не раскрывают особенностей синтаксического аспекта. Вызвано это тем, что мы абстрагировались от способа, которым задается речь.

Третья модель наследует свойства первой модели с добавлением новой характеристики - механизма порождения речи. Такой механизм можно называть порождающей дескриптивной системой языка. Дуальный к порождению механизм - восприятие языков. Такое распределение является традиционным для лингвистики, где выделяют говорящего (порождение), и того, кто слушает (восприятия). Такие же механизмы есть и для программ: программисты порождают программы, исполнители (в частности, компьютеры) - их воспринимают. Также, появляется новый элемент понятия формального языка - языковая дескриптивная система. Опять-таки, для определения этой системы будем двигаться от абстрактного к конкретному[7].

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

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

1. Элементы которой множества используются в процессе порождения?

2. Какие элементы являются начальными?

3. Какие элементы являются заключительными?

4. Как именно задаются операции порождения одних элементов от других?

Будем считать, что в процессе порождения происходит создание (преобразования) элементов множества St, начальные элементы задаются опилками I, а заключительные - опилками F с St. Остается вопрос о способах порождения новых элементов. Самым простым (абстрактные) является случай, когда порождение задается бинарным отношением преобразований (переходов, транзиций) tr St St..

Таким образом, получили первую над-абстрактную модель порождающей системы TS, которая задается параметрами (St, I, F, tr). Такая система порождает множество элементов L (TS) следующим образом: берется элемент a с I, далее берется элемент b, такой что (a, b) принадлежит tr, затем этот процесс повторяется, пока не будет получен элемент c F. Этот элемент и входит в L (TS). Здесь фактически описан процесс построения рефлексивного транзитивного замыкания tr * отношение tr и выбора тех пар, первый элемент которых принадлежит I, а второй - F. Это позволяет записать формулу TS) = { c |(a,ctr*, aÎI, cÎF}.}.

Приведенную модель в литературе часто называют транзиционной системой.

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

Абстрактную модель порождающей системы толкуем как порождающий грамматику G = (N, T, P, S) с приведенными выше параметрами, является конкретизацией транзиционной системы TS = (St, I, F, tr) и определяет формальный язык L (G) указанным выше образом.

Четыре построенных модели и их характеристики представлены на рис. 2.

Экзенстенциальные множественные модели

Модель 1. Язык – определенное множество элементов

Дескриптивно-множественные модели

Модель 3. Язык - определенное множество элементов, которая задается транзиционной системой

Модель 2. Язык – определенное множество элементов, которые являются конечными последовательностями

Модель 4. Язык - определенная множество элементов, которые являются конечными последовательностями, и которая задается порождающей грамматик.

Рисунок 2- Модели языков и грамматик разного уровня абстракции

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

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

1.2. Классификация языков программирования

Современные языки программирования прошли свою историю развития.

Поколение 1. - 1GL (First Generation Languages):

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

2 поколение - 2GL. Конец 1950-х - начало 1960-х гг - разработан символьный асемблер, в котором появилось понятие переменной. Это первая полноценная речь программирования. Программы применяются для создания драйверов оборудования компьютеров.

3 поколения - 3GL

1960-е гг - языки программирования высокого уровня. Их характеристики:

- относительн-ая простота;

- независимость от конкретного компьютера;

- возможность использования мощных синтаксических конструкций[8].

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

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

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

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

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

- специализированные языки (ориентированные на определенные классы задач)

2) по предметной ориентацией:

Языка для решения определенного класса задач, например, языка программирования для решения задач символьной обработки (Lisp, Cobol), языки для обработки флэш-клипов (АctionScript) и т. п.

3) По уровню абстракции:

- языка низкого уровня (машинно-зависимые) - Assembler и т. д.;

- языка высокого уровня (ориентированные на пользователя в определенной мере) - Pascal, C, Fortran и т. д.;

Как отдельное направление следует выделить языка программирования баз данных, предназначены для манипуляции большими централизованными массивами данных и получения из них информации. Многие из этих языков (Access, FoxPro, 4GL и др.) имеют развитые процедурные элементы. Фактическим стандартом стала речь запросов к базам данных SQL

Языки программирования низкого уровня ориентированы на конкретный тип процессора и учитывают его особенности.

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

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

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

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

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

Глава 2. Критерии выбора среды и языка разработки программ

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

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

Процедурное программирование. Концепция процедурного программирования является исторически первой и наиболее близкой к классическому определению программы. Главный акцент процедурном программировании делается на обработке, то есть на алгоритме. В основу программы, построенной по процедурным принципам, лежит прогрессивный принцип-на изменение входных данных, пока не будет получен результат, причем каждая операция расписывается в явном виде. Данные, с которыми оперирует программа, сохраняются в именуемых участках оперативной памяти, которые называются измененными[10].

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

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

Объективно -ориентированное программирование. Данная парадигма является на сегодня наиболее популярной и стремительно развивается. Объектная программа рассматривается как совокупность параллельно существующих объектов, которые взаимодействуют между собой. Каждый объект умеет выполнять определенные операции и характеризуется определенным поведением. Исторически, первым объектным языком считается Smalltalk. Наиболее известными представителями этой парадигмы является C ++, Object Pascal, лежащий в основе системы визуального программирования Delphi, Java.

В машине Тьюринга связаны между собой информация представляется структурой, для которой выделяется блок ленты. Например, если нужно хранить информацию о человеке, первые несколько элементов блока будут содержать имя, несколько следующих элементов - возраст и так далее. Спустя почти столетие лента Тьюринга прежнему неплохо описывает компьютерную память и арифметику указателей языка программирования[11], в которой для доступа к элементам структуры используется адресация база-плюс- смещения. Используя язык C, можно написать:

typedef struct {

char * name;

double age, height;

} person;

person Ivanov = {.name="Іванов", .age=28,

.height=173}

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

В более современных C-подобных языках программирования, таких как C ++, C # и Java, кроме средств процедурного программирования, заимствованных практически без существенных изменений с языка C, также средства объектно-ориентированного программирования на основе классов. Классы в этих языках введены как естественное продолжение и развитие стандартных структур struct языка C, которые являются типами пользователя. Поэтому при объявлении класса создается новый тип данных, который можно использовать подобно встроенного типа. Однако, в отличие от встроенных типов, классы содержат как данные, так и функции. Класс позволяет инкапсулировать все функции и данные, необходимые для управления частными компонентами программы (например, окном на экране; рисунком, построенным с помощью графической программы; устройством, подключенным к компьютеру; задачей, выполняемым операционной системой).

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

Например, на лямбда-образном псевдокоде приведена ранее информация о человеке может быть представлена ​​в форме следующего списка:

(Ivanov ( 

(Name "Иванов")

 (Age 28)

 (Height 173)

))

Haskell, F # и другие LISP-образные языка базируются на лямбда-исчислении, так что именуемые списки являются естественным средством реализации структур. Чтобы расширить список, нужно просто добавить в него новые элементы. Как следствие, функциональные языки программирования имеют эффективные структуры данных высокого уровня и простые, но эффективные средства функционального и объектно-ориентированного программирования[12].

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

Скриптовые языки программирования. Современные скриптовые языки программирования, такие как JavaScript и PHP, впитали в себя наиболее полезные возможности как императивных, так и функциональных языков программирования. Базовой структурой данных скриптового языка программирования JavaScript является объект.

Любое значение, не является строкой, числом, true, false, null или undefined, является объектом. Подобно функциональным языкам программирования, объект – это ассоциативный список, который сопоставляет имена свойств объекта их значением. Имена свойств являются строками, поэтому можно говорить, что объекты отражают строки в значение. Информация о человеке, который приводилась в качестве примера ранее при описании императивных и функциональных языков программирования, на языке JavaScript может представляться объектом - ассоциативным списком:

var Ivanov = {

 name: "Иванов",

 age: 28

 height: 173

};

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

Если игнорировать значения свойств, объекты также могут быть использованы для представления множеств.

Базовая структура JavaScript, представляющая собой ассоциативный список, является основой всех возможностей объектно-ориентированного программирования языка JavaScript. JavaScript использует модель прототипного наследования, которое, конечно, отличается от наследования классов в императивных объектно-ориентированных языках программирования, таких как C ++ или Java. В JavaScript, благодаря тому, что ассоциативные списки, которые представляют объекты, легко связываются друг с другом, вместо классов используются прототипы объектов. Новые объекты автоматически наследуют методы и атрибуты своего родительского объекта через цепочку прототипов. прототип объекта можно менять в любой момент, что делает JavaScript очень гибкой, динамичной языке.

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

Создание программы на JavaScript так же просто, как редактирование текстового файла и открытие его в браузере. Здесь нет сложных сред разработки, которые нужно загружать и устанавливать и не нужно изучать сложные IDE. Кроме того, язык JavaScript проста в освоении. Базовый синтаксис сразу знаком любому программисту, который уже имел дело хотя бы с одной языком семейства C. Ни одна другая речь не может похвастаться таким низким барьером вхождения, как JavaScript.

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

• Если рассматривать компьютеры, то обращение по заданном смещению относительно некоторого адреса все еще одной из самых быстрых операций, машина может выполнять. Компилятор C даже помогает в этом, транслируя метки в смещении во время компиляции. И наоборот, для нахождения чего-то в список нужен поиск: если задана метка "age", элемент списка ей отвечает и где ее данные в памяти? Каждая система имеет свои технические приемы, чтобы сделать поиск таким быстрым, насколько это возможно, но поиск всегда будет требовать больше работы, чем простое обращение база-плюс-смещение.

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

• Компилятор C может обнаружить во время компиляции, метка hieght является печатной ошибкой, потому что он может посмотреть в определение структуры и увидеть, что нет никакого элемента с таким именем. Поскольку список является свободно расширяемым, нельзя узнать, что в нем

Нет элементов hieght, пока программа не заработает и не обнаружит это, просматривая список.

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

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

Языки программирования C ++, Java, Objective-C, C # и несколько других языков с традиционными средствами объектно-ориентированного программирования имеют средства для создания нового типа, расширяет имеющийся тип и следует все элементы старого типа.[13]

При этом скорость обращений база-плюс-смещение и выявления синтаксических ошибок (контролируемость) во время компиляции остаются такими же как и для языка C, хотя использование этих как требует от программиста применения большого количества синтаксических конструкций; там, где речь C для объявления структур обходится одним ключевым словом struct и ее очень простыми правилам видимости, в языке Java, например, для создания нового типа используются конструкции implements, extends, final, instanceo class, this, interface, private, public и protected.

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

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

Что касается языка программирования JavaScript, то благодаря оперативной компиляции (just-in-time compiling), которая применяется в современных браузерах, большинство кода JavaScript - это откомпилированный, хорошо оптимизирован и исполняемый как машинный код, и поэтому скорость выполнения близка к программ, написанных на C или C ++. Конечно, есть еще накладные расходы, связанные с доступом к свойств объектов, с уборкой мусора и динамичным связыванием, так что, естественно, можно делать некоторые вещи быстрее; однако, разница, как правило, не стоит того, чтобы с ней бороться до тех пор, пока не оптимизирован другое. С Node.js(высокопроизводительное, управляемое событиями JavaScript среда на стороне сервера, построенное на базе высоко оптимизированного движка V8 JavaScript от Google) приложения JavaScript становятся управляемыми событиями но не блокирующими, что, как правило, нивелирует разницу в скорости выполнения кода JavaScript и программ, написанных на менее динамических языках программирования.

2.2. Выбор языка программирования

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

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

Транслятор - это программа, предназначенная для перевода текста программы с одного языка программирования на другой. Процесс перекладывания называется трансляцией.

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

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

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

Интерпретатор - это программа, которая предназначена для показательных трансляций и выполнения исходной программы. Такой процесс называется интерпретацией.

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

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

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

Интегрированная среда программирования - это система программирования, сочетающая редактор для удобного ввода и редактирования программы, транслятор и отладчик ошибок[15].

Рассмотрим основные этапы обработки компилятором программы на языке Pascal.

1) Компилятор анализирует, какие внешние библиотеки нужно подключить, разбирает текст программы на составляющие элементы, проверяет синтаксические ошибки и в случае их отсутствия формирует объектный код (в Windows - файл с расширением .obj, в Linux - файл с расширением .o). Полученный на этом этапе двоичный файл (объектный код) не включает в себя объектные коды библиотек подключаются.

2) На втором этапе компоновщик подключает объектного кода программы объектные коды библиотек и генерирует исполняемый код программы. Этот этап называется компоновкой или составлением программы. полученный на этом этапе исполняемый код программы можно запускать на выполнение.

Язык программирования Free Pascal берет свое начало от классического языка Pascal, которая была разработана в конце 60-х годов XX века Никлаус Вертом. Н. Вирт разрабатывал этот язык как учебный для своих студентов. С тех пор Pascal, сохранив простоту и структуру языка, превратился в мощное средство программирования. С помощью современного языка Pascal можно выполнять простые расчеты, разрабатывать программы для проведения сложных инженерных и экономических вычислений.

На сегодняшний день существует множество компиляторов языка Pascal, среди которых можно выделить Borland Pascal, Delphi, а также свободно распространяемый кроссплатформенный компилятор языка - Free Pascal ( «свободный аналог» Turbo Pascal) и среда визуального

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

// Раздел описаний и согласований

[Program имя программы;]

[{$ ...}] // Описание глобальных директив компилятора

[Uses модуль1 ..., модульN;] // Подключение модулей и библиотек

[Label митка1 ..., миткаN;] // Раздел описания меток

[Const имья1 = знач1 ...; имьяM = значM;] // Раздел описания постоянных

[Type имья_типу = описание типа;] {Раздел описания типов пользователя}

[Var переменная: тип, ] // раздел описания переменных

// Раздел текстов процедур и функций

[Procedure описание процедуры;]

[Function описание функции;]

// Основной блок программы begin

// текст программы end. // точка обязательно

То есть самая возможная программа, которая однако ничего не выполняет, но компилируется, такова:

begin

end.

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

Каждый язык и технология существует для определенных задач и целей. Например, одни языки предназначены только для разработки сайтов, другие - только для разработки программ под Windows, а некоторые могут сочетать в себе обе функции. Отдельно существуют языки для программирования на Android и iOS.

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

Веб-разработка. Направление разработки сайтов и различных сервисов быстро набирает обороты, становясь все более популярным, и в этом его преимущество. Чтобы реализовать все свои идеи, тебе понадобится изучить основы: язык разметки HTML и каскадные таблицы стилей CSS. Если нужен сайт, который будет отвечать современным реалиям и имел более чем одну страницу, то понадобится речь, например PHP. Сайт может не только показывать какую-то информацию, но и взаимодействовать с пользователями. Поэтому понадобится JavaScript и базы данных SQL. Необходимо обратить внимание на технологию jQuery, а также формат хранения и передачи данных JSON.

Разработка для Windows осуществляется как правило на: C #, C ++ и Java.

Также стоит упомянуть Python: это довольно хорошая и понятная речь. Чем-то напоминает Java, но задача у нее немного другие. Как правило, используется в решении задач машинного обучения и анализа данных.

Мобильная разработка. Разработка под Android и iOS имеет четкое разделение. Для iOS есть два основных языка: Objective-C и Swift.

Что касается Android, то с ним несколько проще, ведь стандартом считается Java. Однако у того же C # недавно тоже появилась возможность разработки для Android с помощью пакета инструментов от Xamarin, и это дает ряд преимуществ.

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

Заключение

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

-язык программирования C и C ++ как наиболее эффективные по скорости выполнения программ используются для разработки системных программ и программного обеспечения рабочих станций и контроллеров систем управления, работающих в режиме реального измерения времени;

-объектно-ориентированный язык программирования C # и язык разметки визуальных интерфейсов XAML - для разработки настольных и мобильных приложений для платформы .NET операционной системы Windows;

- объектно-ориентированный язык программирования Objective-C и язык разметки XML (для хранения и настройка визуальных интерфейсов) - для разработки мобильных приложений на базе операционной системы iOS;

-объектно- ориентированный язык программирования Java и речь разметки на базе XML - для разработки приложений для операционной системы Android ;

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

Список литературы

1. Александреску, А. Язык программирования D / А. Александреску. — М.: Символ, 2013. — 536 c.

2. Александреску, А. Язык программирования D / А. Александреску. — СПб.: Символ-плюс, 2014. — 544 c.

3. Ашарина, И.В. Основы программирования на языках С и С++: Курс лекций для высших учебных заведений / И.В. Ашарина. — М.: Гор. линия-Телеком, 2012. — 208 c.

4. Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2012. — 368 c.

5. Белоусова, С.Н. Основные принципы и концепции программирования на языке VBA в Excel: Учебное пособие / С.Н. Белоусова, И.А. Бессонова. — М.: БИНОМ. ЛЗ, 2010. — 200 c.

6. Бьянкуцци, Ф. Пионеры программирования: Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден; Пер. с англ. С. Маккавеев. — СПб.: Символ-Плюс, 2011. — 608 c.

7. Бьянкуцци, Ф. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден. — М.: Символ, 2011. — 608 c.

8. Бьянкуцци, Ф. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден. — СПб.: Символ-плюс, 2011. — 608 c.

9. Гавриков, М.М. Теоретические основы разработки и реализации языков программирования: Учебное пособие / М.М. Гавриков, А.Н. Иванченко, Д.В. Гринченков. — М.: КноРус, 2010. — 184 c.

10. Гергель, В.П. Современные языки и технологии паралелльного программирования: Учебник / В.П. Гергель. — М.: МГУ, 2012. — 408 c.

11. Гергель, В.П. Современные языки и технологии параллельного программирования: Учебник/ предисл.: В.А. Садовничий. / В.П. Гергель. — М.: Изд. МГУ, 2012. — 408 c.

12. Голицына, О.Л. Языки программирования: Учебное пособие / О.Л. Голицына, Т.Л. Партыка, И.И. Попов. — М.: Форум, НИЦ ИНФРА-М, 2013. — 400 c.

13. Головин, И.Г. Языки и методы программирования: Учебник для студентов учреждений высшего профессионального образования / И.Г. Головин, И.А. Волкова. — М.: ИЦ Академия, 2012. — 304 c.

14. Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. — М.: ДМК, 2016. — 134 c.

15. Дорогов, В.Г. Основы программирования на языке С: Учебное пособие / В.Г. Дорогов, Е.Г. Дорогова; Под общ. ред. проф. Л.Г. Гагарина. — М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2013. — 224 c.

16. Касторнова, В.А. Структуры данных и алгоритмы их обработки на языке программирования Паскаль: Учебное пособие / В.А. Касторнова. — СПб.: BHV, 2016. — 304 c.

17. Кауфман, В.Ш. Языки программирования. Концепции и принципы / В.Ш. Кауфман. — М.: ДМК, 2011. — 464 c.

18. Керниган, Б. Язык программирования C. 2-е изд. / Б. Керниган, Д.М. Ритчи. — М.: Вильямс, 2016. — 288 c.

19. Керниган, Б.У. Язык программирования С / Б.У. Керниган, Д.М. Ритчи; Пер. с англ. В.Л. Бродовой. — М.: Вильямс, 2013. — 304 c.

20. Маслов, В.В. Основы программирования на языке Perl / В.В. Маслов. — М.: Радио и связь, 2000. — 144 c.

21. Монахов, В.В. Язык программирования Java и среда NetBeans. 3-е изд., пер. и доп. + DVD / В.В. Монахов. — СПб.: BHV, 2012. — 704 c.

22. Новичков, В.С. Начала программирования на языке QBASIC. Учебное пособие / В.С. Новичков, А.Н. Пылькин. — М.: ГЛТ, 2007. — 268 c.

23. Страуструп, Б. Язык программирования C++: Специальное издание / Б. Страуструп; Пер. с англ. Н.Н. Мартынов. — М.: БИНОМ, 2012. — 1136 c.

24. Страуступ, Б. Язык программирования С++. Специальное издание / Б. Страуступ. — М.: Бином, 2015. — 1136 c.

25. Троелсен, Э. Язык программирования С# 5.0 и платформа .NET 4.5 / Э. Троелсен; Пер. с англ. Ю.Н. Артеменко. — М.: Вильямс, 2013. — 1312 c.

26. Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. — М.: Гор. линия-Телеком, 2012. — 234 c.

27. Хейлсберг, А. Язык программирования C#. Классика Computers Science / А. Хейлсберг, М. Торгерсен, С. Вилтамут. — СПб.: Питер, 2012. — 784 c.

  1. Александреску, А. Язык программирования D / А. Александреску. — СПб.: Символ-плюс, 2014. — С.54

  2. Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2012-С.77

  3. Бьянкуцци, Ф. Пионеры программирования: Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден; Пер. с англ. С. Маккавеев. — СПб.: Символ-Плюс, 2011.-С.12

  4. Гергель, В.П. Современные языки и технологии параллельного программирования: Учебник/ предисл.: В.А. Садовничий. / В.П. Гергель. — М.: Изд. МГУ, 2012-С.11

  5. - Голицына, О.Л. Языки программирования: Учебное пособие / О.Л. Голицына, Т.Л. Партыка, И.И. Попов. — М.: Форум, НИЦ ИНФРА-М, 2013-С.65

  6. Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. — М.: ДМК, 2016-С.60

  7. Касторнова, В.А. Структуры данных и алгоритмы их обработки на языке программирования Паскаль: Учебное пособие / В.А. Касторнова. — СПб.: BHV, 2016-С.45

  8. Кауфман, В.Ш. Языки программирования. Концепции и принципы / В.Ш. Кауфман. — М.: ДМК, 2011-С.23

  9. Керниган, Б. Язык программирования C. 2-е изд. / Б. Керниган, Д.М. Ритчи. — М.: Вильямс, 2016. — С.28

  10. Керниган, Б.У. Язык программирования С / Б.У. Керниган, Д.М. Ритчи; Пер. с англ. В.Л. Бродовой. — М.: Вильямс, 2013-С.66

  11. Александреску, А. Язык программирования D / А. Александреску. — М.: Символ, 2013-С.53

  12. Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2012-С.44

  13. Страуступ, Б. Язык программирования С++. Специальное издание / Б. Страуступ. — М.: Бином, 2015.

  14. Хейлсберг, А. Язык программирования C#. Классика Computers Science / А. Хейлсберг, М. Торгерсен, С. Вилтамут. — СПб.: Питер, 2012.-С.89

  15. Касторнова, В.А. Структуры данных и алгоритмы их обработки на языке программирования Паскаль: Учебное пособие / В.А. Касторнова. — СПб.: BHV, 2016. –С.22