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

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

Содержание:

Введение

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

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

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

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

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

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

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

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

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

Цель данной работы – ознакомится с языками программирования, рассмотреть основные понятия, классификацию и критерии выбора среды и языка разработки программ.

Для достижения поставленной цели были сформулированы следующие задачи:

- изучить понятие компьютерных языков программирования;

- охарактеризовать объектно-ориентированные языки и основы объектно-ориентированного программирования;

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

Методы исследования курсовой работы – научно-исследовательский метод, статистический метод, метод классификации, изучение и анализ литературных источников.

Глава 1. Компьютерные языки программирования

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

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

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

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

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

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

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

•JavaScript;

•ActionScript;

•Perl;

•Python;

•Scala;

•R;

•Ruby;

•PHP.

Программные языки, например C#, C или Pascal используют для создания алгоритмов, процедур, новых данных. Скриптовые предназначены для соединения уже существующих инструментов. За счет этого минимизируется количество кода.

Для того чтобы написать простейшую программу Hello, World! на ассемблер требуется 14 строк кода. C++ заставит написать 8. Почти в два раза меньше, но все равно долго. Придется подключить заголовочный файл, библиотеки, указать функцию, а потом еще и компилировать [3]. То же самое на Python помещается в одну фразу - print Hello, World!. Одинаковый результат за меньшие усилия, при этом никаких компиляторов.

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

Языки описания архитектур (Architecture Description Language) - языки, предоставляющие средства для моделирования концептуальной программной архитектуры. Их также называют языками проектирования "в большом". Основными элементами таких языков, как правило, являются:

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

- соединители, реализующие протоколы взаимодействия компонентов и также поддерживающие определенные интерфейсы (роли);

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

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

- Языки проектирования модулей (языки проектирования "в малом").

- Языки спецификаций.

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

- Языки моделирования данных.

- Языки моделирования знаний.

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

В настоящее время сложилось довольно много классификаций языков программирования. Далее мы приведем самые известные из них.

1.1 Классификация по поддерживаемым методологиям

Классификация языков по поддерживаемым методологиям появилась примерно в 80-х годах XX века. Мы выделили следующие основные группы языков:

1. Языки императивного программирования и две важнейшие подгруппы:

- языки структурного императивного программирования. Эти языки более известны под кратким именем - языки структурного программирования [6];

- языки императивного параллельного программирования. Эти языки также обычно называют кратко - языки параллельного программирования;

2. Языки объектно-ориентированного программирования;

- языки функционального программирования;

- языки логического программирования;

- языки программирования в ограничениях.

1.2 Классификация по принадлежности к семействам

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

- Семейство универсальных языков.

- Семейство уникальных языков.

- Семейство языков параллельного программирования.

- С-семейство языков.

- Pascal-семейство языков.

- Ada-семейство языков.

- Simula-семейство языков.

- Lisp-семейство языков.

- Prolog-семейство языков.

Процедурный С/С++

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

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

Говоря о достоинствах и недостатках этого языка, нельзя делать однозначные выводы. Есть его сторонники, а есть и беспощадные критики. Основой для споров является то, что в этом языке программирования нет ничего своего [2].

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

Независимый и безопасный Java

Этот английский компьютерный язык разработали в компании Sun Microsystems. Благодаря тому, что написанная программа транслируется в особенный байт-код, она способна работать независимо от типа операционной системы или компьютерной архитектуры.

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

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

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

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

Если говорить о простоте языка, то стоит отметить исследования, которые показали, что аналогичные операции пишутся в 1,2-2 раза дольше, чем на языке C++. Также в несколько раз больше ресурсов требуется на выполнение команд. Но команда производителя постоянно выпускает множество обновлений, которые сводят к минимуму все недостатки этого языка программирования.

создаёт проблемы по переносу кода из одной версии в другую.

1.3 Классификация по ориентации на предметные области

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

- Языки форматирования текстов.

- Языки разметки.

- Языки скриптов.

- Промежуточные языки программирования.

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

- Языки создания графики.

- Языки описания аппаратуры.

- Языки описания виртуальной реальности.

- Языки конфигурирования.

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

Серверный язык сценариев, предназначенный для динамических веб-сайтов и разработки приложений. Может быть непосредственно встроен в исходный HTML-документ, а не во внешний файл. На PHP построено и работает более 200 миллионов веб-сайтов, включая Digg, Facebook и платформы WordPress, Joomla, Drupal.

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

Благодаря тому, что этот язык программирования создавался разработчиками с открытым кодом, его удалось довести до совершенства, и он набрал бешеную популярность. PHP легко взаимодействует с самыми разными базами данных - от MySQL до Access [9].

Самые популярные сайты Интернета, такие как Facebook или Wikipedia, написаны именно на этом языке.

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

Нельзя обойти стороной и критику языка. Несмотря на то что в рейтингах самых популярных языков 2015 года PHP занял 6-е место, в его адрес нередко высказывается недовольство.

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

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

1.4 Классификация по степени абстракции от аппаратуры

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

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

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

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

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

Эти языки являются машинно-независимыми. Они ориентируются не на команды определенной ЭВМ, а на системы операндов, которые характерны для записи отдельного класса алгоритмов. Программы, записанные на таких языках, занимают много памяти, они выполняются медленнее по времени.

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

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

Языки программирования также делят на разные поколения. К языкам первого поколения относят языки машинно-ориентированные, имеющие ручное управление памяти на ЭВМ первого поколения. Языками второго поколения называют языки с представлением команд мнемоническим, т.е. это автокоды. К языкам третьего поколения относят языки общего назначения, которые используют для того, чтобы создать прикладные программы. Это Си, Паскаль, Кобол и Бейсик. Языками четвертого поколения называют усовершенствованные языки, создающие специальные прикладные программы, управляющие базами данных. Языки пятого поколения являются декларативными языками программирования. К тому же, языки этого поколения объектно-ориентированные и визуальные языки программирования. Это ЛИСП, Пролог, Си++, Delphi, Visual Basic [11].

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

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

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

Некоторые представители: Fortran, Pascal, C.

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

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

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

Функциональное и логическое программирование.

Представители функциональных языков: List, Haskell.

Представитель логических языков: Prolog.

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

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

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

Объектно-ориентированное программирование.

Представители объектно-ориентированных языков: С++, Java, Python.

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

ООП призвано решать более сложные и объемные задачи по сравнению с директивным программированием.

В основе ООП лежат такие понятия как наследование, полиморфизм и инкапсуляция.

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

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

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

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

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

Но не переживайте, мир не стоит на месте. Сегодня можно обучаться, не выходя из дома. Главное - иметь компьютер и Интернет. Есть множество сайтов, которые проводят компьютерное обучение языкам. Самые популярные из них - это Codecademy, Code School и Udacity.

1.6 Скорость обработки

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

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

Экспансия Интернета породила касту «эпизодических программистов». Это веб-мастера, верстальщики и владельцы Интернет-ресурсов, для которых важна доступность. У них нет времени на многолетнее погружение в азы процедурного программирования. Они пишут код от случая к случаю, им нужен простой синтаксис для сценариев на JavaScript и фронтенд-разработки. Для серверного программирования походит как JS, так и скриптовый язык PHP.

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

Python

Популярность этого языка неумолимо набирает обороты. Python – это высокоуровневый серверный скриптовый язык для веб-сайтов и мобильных приложений. Обладает компактным синтаксисом, его удобно читать и легко с ним работать. Скептики утверждают, что пригоден Python только для работы с web, а создавался он в целях оживить статичный HTML. Но это не так.

На Python пишут не только плагины и модули. Его применяют в гейм-разработке. Игры Frets On Fire, MMORPG EVE и Online Sims 4 (продано 1 миллион экземпляров) были созданы на Python. Его используют Instagram, Pinterest, Rdio, Google, Yahoo и даже НАСА. У Python низкий порог вхождения, он быстро усваивается и запоминается. Выучить его можно абсолютно бесплатно на интерактивных площадках Codecademy, сервисах Udacity и Coursera [3].

На сегодняшний день самыми востребованными скриптовыми языками являются JavaScript, Python, PHP. Постепенно завоевывают любовь программистов Ruby, Scala и R.

1.Ruby – сценарный язык, созданный в 1995 году Юкихиро Мацумото. До 2004 года о нем никто не слышал, пока не появился фреймворк Ruby on Rails. Сейчас Ruby уверенно догоняет Python.

2.Увеличивается интерес к Scala. Это функциональный язык, использующийся серверами Foursquare и Twitter. На нем можно писать как веб, так и Android-приложения.

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

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

Глава 2. Объектно-ориентированные языки. Основы объектно-ориентированного программирования

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

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

•инкапсуляция;

•наследование;

•полиморфизм.

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

Примеры объектно-ориентированных языков:

1.Pascal. С выходом Delphi 7 на официальном уровне стал называться Delphi. Основная область использования Object Pascal - написание прикладного ПО.

2.C++ широко используется для разработки программного обеспечения, является одним из самых популярных языков. Применяется для создания ОС, прикладных программ, драйверов устройств, приложений, серверов, игр [7].

3.Java - транслируется в байт-код, обрабатывается виртуальной машиной Java. Преимуществом такого способа выполнения является независимость от операционной системой и оборудования. Существующие семейства: Standard Edition, Enterprise Edition, Micro Edition, Card.

4.JavaScript применяется в качестве языка сценариев для web-страниц. Синтаксис во многом напоминает Си и Java. Является реализацией Ecmascript. Сам Ecmascript используется в качестве основы для построения других скриптовых языков, таких как JScript, ActionScript.

5.Objective-C построен на основе языка Си, а сам код Си понятен компилятору Objective-C.

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

7.PHP. Аббревиатура переводится как препроцессор гипертекста. Применяется для разработки веб-приложений, в частности серверной части. С его помощью можно создавать gui-приложения с помощью пакетов PHP-GTK, PHP-Qt, WinBinder.

8.Python - язык общего назначения, ориентирован на повышение производительности разработчика и читаемость кода. Был разработан проект Cython, с помощью которого осуществляется трансляция программ, написанных на Python в код на языке Си.

2.1 Абстрактный тип данных

Любая книга из рода “Объектно-ориентированное программирование для чайников” выделяет один из главных принципов - абстракцию. Идея состоит в разделении деталей или характеристик реализации программы на важные и неважные. Необходима для крупных проектов, позволяет работать на разных уровнях представления системы, не уточняя детали [2].

Абстрактный тип данных представляется как интерфейс или структура. Позволяет не задумываться над уровнем детализации реализации. АТД не зависит от других участков кода.

Известный афоризм Дэвида Уилера гласит: Все проблемы в информатике можно решить на другом уровне абстракции.

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

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

Существует несколько типов наследования:

•простое;

•множественное.

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

Наследование выглядит так:

class Animal {

function draw() {

return "just animal";

}

function eat() {

return "the animal is eating";

}

}

class Cow extends Animal {

function draw() {

Return "something that looks like a cow";

}

}

Видим, что class Cow унаследовал все методы от class Animal. Теперь, если выполнить Cow.eat(), получаем "the animal is eating", соответственно, метод draw() изменен. Cow.draw() вернет “something that looks like a cow”, а Animal.draw() вернет “just animal” [6].

2.2 Инкапсуляция

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

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

class Animal {

private $name;

function __construct($name) {

$this->name = $name;

}

function getName() {

return $this->name;

}

}

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

Полиморфизм

Полиморфизм позволяет использовать одно и то же имя для решения схожих, но технически разных задач.

В Приложении 1 находится таблица. Мы видим class CardDesk и class GraphicalObject. У обоих есть функция под названием draw(). Она выполняет разные действия, хотя имеет одно имя [6].

Ad hoc полиморфизм или специальный полиморфизм использует:

•перегрузку функций, методов;

•приведение типов.

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

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

«Один интерфейс — много реализаций» Бьерн Страуструп.

2.3 Класс

Класс - это такой тип данных, который состоит из единого набора полей и методов.

Имеет внутренние и внешние интерфейсы для управления содержимым. При копировании через присваивание копируется интерфейс, но не данные. Разные виды взаимодействуют между собой посредством:

•наследования;

•ассоциации;

•агрегации.

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

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

В Object Pascal описывается следующим образом:

ClassName = class(SuperClass)

private

{ использование элементов ограничивается только пределами модуля }

{ здесь указываются поля }

strict private

{ спецификатор доступа стал доступным с выходом Delphi 2007, обозначает то же, что и private }

protected

{ элементы могут использоваться внутри ClassName или при наследовании }

public

{ }

published

{ элементы доступны всем, они отображаются в Object Inspector'e }

end;

Здесь SuperClass - предок, от которого происходит наследование.

Для C++ создание выглядит так:

class MyClass: public Parent

{

public:

MyClass(); // конструктор

~MyClass(); // деструктор

protected:

private:

};

В этом примере Parent является предком, если таковой имеется. Спецификаторы private, public, protected обозначают то же самое, что в предыдущем примере на Паскале. Также мы видим конструктор, деструктор, доступные для любой части программы. У C++ все элементы по умолчанию являются private, соответственно, это можно не указывать [8].

2.4 Особенности реализации

В центре объектно-ориентированных языков - объект, он является частью класса. Он состоит из:

•поля;

•метода.

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

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

ООП-методологии

Существуют такие методологии:

•Компонентно-ориентированное программирование;

•Прототипное программирование;

•Классоориентированное программирование.

Компонентно-ориентированное программирование опирается на понятие компонента - такого составляющего программы, которое предназначено для повторного использования. Реализуется как множество конструкций с общим признаком, правилами, ограничениями. Подход используется в объектно-ориентированном языке Java, где компонентная ориентация реализуется посредством “JavaBeans”, написанных по одним правилам [5].

В прототипном программировании нет понятия класса - наследование производится за счет клонирования существующего прототипа. Это основа объектно-ориентированных языков javascript и других диалектов ecmascript, а также lua или lo. Главные особенности:

•потомки не должны сохранять структурное подобие прототипа (в отношении класс - экземпляр это происходит именно так);

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

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

2.5 Объектно-ориентированные языки

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

ООЯ обязательно содержит набор следующих элементов:

•объявление классов с полями, методами;

•расширение за счет наследования функций;

•полиморфное поведение.

Кроме вышеперечисленного списка, могут быть добавлены дополнительные средства:

•конструктор, деструктор, финализаторы;

•свойства;

•индексаторы;

•модификаторы доступа.

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

ЯП поддерживают больше, чем одну парадигму. Например, PHP или JavaScript поддерживают функциональное, процедурное, объектно-ориентированное программирование. Java работает с пятью парадигмами: объектно-ориентированной, обобщенной, процедурной, аспектно-ориентированной, конкурентной. C# считается одним из самых успешных примеров мультипарадигмальности. Он поддерживает те же подходы, что Java, к этому списку добавляется еще рефлексивная парадигма. Такой ЯП, как Oz, разработан для того, чтобы объединить все понятия, традиционно связанные с различными программными парадигмами.

Глава 3 Обоснование выбора языка программирования и критерии

Ни один язык программирования нельзя назвать объективно лучшим по сравнению с другими. Более того, хороший разработчик должен на отлично знать несколько языков и хотя бы поверхностно ориентироваться еще в парочке. Но учить сразу и JavaScript, и HTML, и Ruby – плохая идея. Даже очень плохая. Нужно начинать с чего-то одного.

Даже если дело не дойдет ни до чего серьезного (полноценного заработка на разработке приложений или веб-дизайне, например, или запуска собственного проекта), учить программирование - способ создания консрукций для не очень умных, но очень послушных машин - однозначно стоит. Во-первых, это заставит мозг работать, а это всегда хорошо. Даже президент США говорит о пользе изучения программирования [7].

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

При выборе языка программирования нужно учитывать множество факторов. Например, если при разработке динамической Web-страницы вы в качестве наилучшего варианта выберите JavaServer Pages (JSP)/сервлеты, другие могут предпочесть PHP или аналогичный язык сценариев. Не существует какого-то одного языка, который является наилучшим выбором. Можно отдать предпочтение определенным факторам, таким как производительность и безопасность корпоративных приложений, по сравнению с другими факторами, такими как количество строк кода. Любое решение сопряжено с какими-то компромиссами.

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

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

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

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

  1. Целевая платформа.
  2. Гибкость языка.
  3. Время исполнения проекта.
  4. Производительность.
  5. Поддержка и сообщество.

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

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

•наемным работникам, которые смогут устроиться в корпорации с мировым именем;

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

3.1 Критерии выбора языка программирования

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

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

В веб-разработке нужно выбирать из нескольких сфер ответственности: front-end, back-end, full-stack. Front-end разработчики отвечают за скорость загрузки сайта и правильную работу кода, back-end - написание серверного кода, а full-stack специалисты могут в одиночку выполнить все требования заказчика. Full-stack разработчики сегодня являются самыми востребованными на рынке труда.

Три кита Front-end разработчика – это JavaScript, HTML и CSS. Кроме того, нужно ориентироваться в последних интернет-тенденциях и уметь их применять в повседневной работе. РНР – это базовые знания для back-end специалистов. Это не единственный инструмент, но основа всей back-end разработки. В качестве второго языка нужно учить Ruby или Python. Еще пригодится опыт работы с базами данных, азы JavaScript и SQL. Кроме самих языков программирования нужно изучить все прилагающиеся надстройки.

Для разработки мобильных приложений используются JavaScript для Андроид и Objective-C для iOS. Полезно посетить официальные ресурсы для разработчиков, а в случае работы с iOS еще и познакомиться с интерфейсом и функционалом Xcode – бесплатной среды для создания приложений. Для игр и 3Д-анимации нужен С++.

Тем, кто в перспективе хочет устроиться в одну из высокотехнологичных корпораций и больше не беспокоиться о благополучии завтрашнего дня, хорошо выполняя свои обязанности, нужно исходить из выбора этой самой корпорации. Windows работают с C#, Google и Фейсбук – с Python, а Apple – это Objective-C.

Выбор языка программирования должен основываться на следующих факторах:

1.Востребованность на рынке труда.

2.Легкость изучения.

3.Долгосрочные перспективы.

4.Какие проекты можно разработать на этом языке (выбор языка и среды программирования).

Если с последним пунктом – платформы и подходящие языки программирования кратко перечислены выше – все более или менее понятно, то как быть с остальными пунктами? Indeed.com – ведущий сайт поиска работы в мире – время от времени публикует статистические данные по вакансиям (соотношение предложений и соискателей). Выбор языка программирования хорошо бы делать, основываясь именно на этих данных, но одной только сухой статистикой тоже руководствоваться не стоит [6].

Итак, на одно место разработчика Python, Java, Objective-C или РНР приходится 2,7 специалиста. Если взять данные по JavaScript, то видно, что это определенно рынок продавца – на одно место приходится всего 0,6 программиста. Кроме того, JavaScript развивается куда быстрее, чем любой другой язык, что открывает прекрасные долгосрочные перспективы.

Обоснование выбора языка программирования C ++, С#, Objective-C, РНР или любого другого строится и на легкости изучения. Новичок, особенно тот, который учит язык по книгам или курсам, вряд ли справится со сложными С++ или Java. Сравнительно легко учатся Python, JavaScript или Ruby. Ruby и Python читабельны и отличаются одними из самых активных сообществ.

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

Любой, кто когда-то писал статьи на заказ, наверняка уже сталкивался с HTML, а тем, кто пытался вести свой блог, возможно, знаком и CSS. Да и любой курс основ программирования начинается именно с этих двух элементов, так что знания азов лишними не будут. Учить можно по книгам:

1.Б.Лоурсон, Р.Шарп «Изучаем HTML 5».

2.К.Шмитт «CSS. Рецепты программирования».

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

3.2 Разработка веб-приложений

Выбор языка программирования PHP или JavaScript – это для веб-разработчиков. Чтобы делать интернет-ресурсы красивее, интереснее и функциональнее понадобится JavaScript. С помощью него можно сделать довольно много очень разных вещей в пользовательском интерфейсе [12].

Наилучшее обоснование выбора языка программирования PHP - именно веб-разработка. Если речь идет о серверной части, подойдут PHP, Python, Ruby и тот же JavaScript. Выбор языка программирования С # - тоже хорошая идея. На С# работают в Microsoft, Python похож на Лего, а Ruby– на пластилин.

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

Приложения на "Андроид", как правило, разрабатываются в Java. Работать можно на любой операционной системе – распространенность "Андроид"-смартфонов сделала разработку приложений на них очень популярной. Среду для разработки можно установить и на Windows, и на iOS.

Что касается Apple, так тут разработка куда более требовательна к инструментам. Нужно учить Objective-C, комплект средств разработки и инструкцию разработчика от Apple. Работать можно только с «яблочных» устройств – Mac с версией операционной системы от 10.7 и выше.

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

Начать можно со Scratch. Этот сервис ориентирован на детей от 8 лет и позволит создавать мультфильмы, игры, анимацию. Среда распространяется бесплатно. Скорее всего, ребенку даже не понадобится помощь родителей, разобраться в сервисе довольно просто [13].

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

Самым важным фактором является платформа, на которой программа будет работать. Рассмотрим для примера Java™ и C. Если программа написана на C и должна работать на машинах с Windows® и Linux®, потребуются компиляторы для платформ и два разных исполняемых файла. В случае с Java сгенерированного байт-кода будет достаточно для выполнения программы на любом компьютере, на котором установлена виртуальная Java-машина.

Аналогичный аргумент применим и для Web-сайтов. Они должны выглядеть и работать одинаково во всех браузерах. Использование тегов CSS3 и HTML5 без проверки совместимости с браузерами приведет к разному отображению и поведению сайта в разных браузерах.

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

Можно ли использовать новую функциональность без подключения новой библиотеки?

Если нет, доступна ли эта функциональность в библиотеке языка?

Если эта функциональность не встроена в язык и не доступна в библиотеке, какие усилия нужно приложить для ее создания с нуля?

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

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

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

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

Например, сайт управления контентом на PHP-сценариях можно разработать за несколько дней, в то время как создание кода сервлетов может занять несколько месяцев, при условии, что вы начали изучать оба языка с нуля.

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

Рассмотрим два варианта Web-приложения, написанных на Java и на Python. На основании данных тестирования можно прийти к заключению, что в одинаковой среде приложение, написанное на Java, должно работать быстрее, чем приложение, написанное на Python. А как насчет самой среды? Если средой является одноядерная x86 Ubuntu Intel Q6600, это справедливо, поскольку вычислительная мощность ограничена. А если взять Web-приложение, работающее в облачной среде на Google App Engine? Такое приложение может использовать практически неограниченную процессорную мощность, и обе программы возвратят результаты почти за одно и то же время. Теперь основным фактором выбора будет количество строк кода и удобство обслуживания.

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

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

Заключение

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

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

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

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

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

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

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

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

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

Библиография

Нормативно-правовые документы

1. Конституция Российской Федерации от 12 декабря 1993 г. (с изм. и доп., вступ. в силу с 01.07.2020)

Произведения из многотомного издания

  1. Бьянкуцци Ф., Уорден Ш. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования. СПб., 2010.

2. Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. — Харьков: Фолио, Ростов н/д: Феникс, 2014

3. Вольфенгаген В.Э. Конструкции языков программирования. Приемы описания. М., 2011.

4. Заварыкин В.М., Житомирский В.Г., Лапчик М.П. Основы информатики и вычислительной техники. — М.: Просвещение, 2010

5. Карпов Ю.Г. Теория и технология программирования. Основы построения трансляторов. СПб: БХВ-Петербург, 2013

6. Керниган Б., Ритчи Д. Язык программирования Си: Пер. с англ. — М.: Финансы и статистика, 2015

7. Культин Н.Б. Программирование в Turbo Pascal и Delphi.— СПб.: BHV — Санкт-Петербург, 2017

8. Малявко А.А. Теория формальных языков: Учеб. Пособие. – Новосибирск: Изд-во НГТУ, 2016

9. Миков А. И. Информатика. Введение в компьютерные науки. — Пермь: Изд-во ПГУ, 2010

10. Могилев А. В., Пак Н.И., Хеннер Е.К. Информатика: Учеб. пособие для студ. пед. вузов / Под ред. Е. К. Хеннера. — М.: Изд. центр «Академия», 2011

11. Молчанов А.Ю. Системное программное обеспечение: Учебник для вузов. СПб: Питер, 2013

12. Опалёва Д.А., Самойленко В.П. Языки программирования и методы трансляции. СПб: БХВ-Петербург, 2019

13. ПаронджановВ.Д. Как улучшить работу ума. Алгоритмы без программистов—это очень просто!М., 2016.

14. Пратт Т., Зелковиц М. Языки программирования: реализация и разработка. – СПб.: Питер, 2011

15. Себеста Р.У. Основные концепции языков программирования = Concepts of Programming Languages /Пер. с англ.; 5-е изд. М., 2018.

Приложение 1