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

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

Содержание:

Введение

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

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

Актуальность исследования в данной курсовой работе базируется на двух аспектах:

  1. Изучение компьютерных и интернет-технологий – основополагающая сторона каждого человека, стремящегося к развитию и смотрящего в будущее;
  2. Невозможно программировать, создавать те или иные программы, игры, иной софт без применения определенной среды разработки, его языка.

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

Указанная цель будет достигнута решением следующих задач:

  1. Дать понятие и охарактеризовать структуру языка программирования;
  2. Выполнить классификацию языков программирования;
  3. Охарактеризовать критерии выбора среды и языка разработки.

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

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

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

Структура команды ЭВМ в простейшем случае включает в себя две части: операционную и адресную [7].

Операционная часть содержит код операции (сложить, вычесть, ...).

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

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

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

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

Для автоматизации программирования разрабатывался для каждой ЭВМ свой автокод (или Ассемблер). Этот язык в полной мере повторяет набор команд машинного языка и появился лишь для упрощения программирования на машинном коде [7].

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

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

- машинные языки (computer language) – языки программирования, воспринимаемые аппаратной частью компьютера (машинные коды); ♣ машинно-ориентированные языки (computer-oriented language) – языки программирования, которые отражают структуру конкретного типа компьютера (Ассемблеры);

- алгоритмические языки (algorithmic language) – не зависящие от архитектуры компьютера языки программирования для отражения структуры алгоритма (Паскаль, Фортран, Бейсик и др.);

- процедурно-ориентированные языки (procedure-oriented language) – языки программирования, где имеется возможность описания программы как совокупности процедур (подпрограмм);

- проблемно-ориентированные языки (universal programming language) – языки программирования, предназначенные для решения задач определенного класса (Лисп, РПГ, Симула и др.);

- интегрированные системы программирования [11].

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

- процедурные;

- функциональные;

- логические;

- объектно-ориентированные [4].

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

Некоторые языки программирования в порядке увеличения их уровня

Двоичный язык – в настоящее время программистами не применяется.

Шестнадцатеричный язык – упрощение за счет представления четырех двоичных цифр одной шестнадцатеричной. Используется в качестве дополнения к языкам высокого уровня для программирования критичных к времени выполнения фрагментов алгоритмов.

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

Язык программирования C – разработан в начале 70-х годов. Сочетает достоинства современных высокоуровневых языков (в части структур данных и управляющих структур) и возможность доступа к аппаратным средствам машины на уровне языка Ассемблера.

Fortran (Formula Translator) разработан в 1956 г. Считается «рабочей лошадью» научных работников за счет своей «приспособленности» к ведению сложных вычислений и широко используется до настоящего времени, несмотря на свою ограниченность и «корявость».

Pascal – разработан в 1968 г. профессором Никлаусом Виртом. Язык назван в честь французского учёного Блеза Паскаля, внесшего вклад в развитие средств вычислительной техники.

Modula-2 – создан в 1978 г. Никлаусом Виртом для создания системного программного обеспечения. По существу – развитие Паскаля. Его особенности состоят в высокой модульности программ и наличии средств описания параллельных процессов.

Ada – разработан в 1979 г. по заказу Министерства обороны США для использования во встроенных системах с управляющими ЭВМ, что требует поддержки режима реального времени.

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

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

Примером функционального языка является язык LISP (List Processing – обработка списков). Разработан и реализован в Массачусетском технологическом институте в 1959 г. Рассматривается специалистами как основной язык программирования систем искусственного интеллекта.

Логическое программирование. Логика и программирование долгое время были непересекающимися областями исследований. Только в 1973 впервые было опубликовано описание языка PROLOG (PROgramming in LOGic – программирование в терминах логики).

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

В настоящее время для ПК существует около двух десятков реализации PROLOG’а, некоторые из них оформлены в виде интегрированных сред. Объектно-ориентированное программирование.

Корни объектно-ориентированного программирования уходят в одну из ветвей логики, в которой первичной является не отношение, а объект. Прототипом объектно-ориентированного программирования явился язык SIMULA-67. Этот стиль программирования характеризуется богатыми графическими возможностями и средой программирования, развитой модульной структурой программ. Именно модульность упрощает разработку сложных программных продуктов. Как пример объектно-ориентированного языка можно назвать Visual Basic и Delphi.

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

60-е годы были эпохой становления операционных систем и языков программирования высокого уровня. Язык с самого начала создавался так, чтобы на нём можно было писать системные задачи. Разработчики языка – Кеннет Томсон и Деннис Ричи. Но поскольку в языке не хватало высокоуровневых средств (абстрактных типов данных и объектов, обработки исключений) в начале 80-х годов Бьерн Страуструп стал разрабатывать расширение языка С под условным названием «C с классами».

Первый коммерческий транслятор «С++» появился в 1983 году. Одна из главных целей создания С++ – увеличить процент повторного использования уже написанного кода. Когда появился язык Java, на него обратили очень пристальное внимание, так как он был близок по синтаксису C++ и показался знакомым многим программистам. Однако он не стал, как опасались некоторые, «убийцей С++». Рисунок

Язык Паскаль, названный в честь французского математика и философа Блеза Паскаля (1623– 1662), был создан как учебный язык программирования в 1968–1971 годах Никлаусом Виртом в Высшей технической школе (ETH) в Цюрихе. Этот язык быстро превратился из средства для обучения студентов программированию в инструмент для создания новых программных проектов. Одно из достоинств языка – лаконичность. Язык был создан в то время, когда языков высокого уровня было не много, к тому же все они, в отличие от языка Pascal, были созданы для решения конкретных задач.

Целью работы Н. Вирта было создание языка, который:

- строился бы на небольшом количестве базовых понятий,

- имел бы простой синтаксис,

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

Basic. Это одни из самых старых языков программирования. Его создатели – Джон Кемени и Том Куртц, работавшие в Дортмундском колледже в 1964 году. Свой язык они назвали по первым буквам слов «Beginner’s All Purpose Symbolic Instructions Code». Интерпретатор Basic был первым программным продуктом фирмы Microsoft, основанной Полом Аленом и Уильямом Гейтсом в 1975 году. В дальнейшем он не только поставлялся как программа, но и зашивался в ПЗУ компьютеров.

В середине 80-х годов фирма Microsoft разработала QuickBASIC. Это был уже компилятор, а не интерпретатор. Вообще языков Basic несколько сотен. После появления Windows и визуальных средств разработки программ был создан Visual Basic.

FORTRAN. Это старейший язык программирования. В начале 50-х годов он был разработан исследовательской группой под руководством Джона Бэкуса. Его название происходит от 2 слов: FORMULA TRANSLATION.

Первая версия системы FORTRAN для компьютера IBM была выпущена в начале 1957 г. Характерной чертой языка была специфическая форма записи программ. Текст программы записывался строками фиксированной длины по 80 знаков, что соответствует размеру перфокарты.

Очень важную роль играют в языке метки. Язык постепенно избавлялся от недостатков. Так появился FORTRAN IV, затем в 1977 г. – FORTRAN 77, в 1991 г. – очередной стандарт FORTRAN 91.

ADA. По сложности этот язык сравнивают с С++. Назван в честь леди Ады Августы Лавлейс (дочери Байрона), работавшей вместе с Чарльзом Бэббиджем и разрабатывавшей программы для его «аналитической машины». Она по праву считается первым в мире программистом.

Разработан язык в 1979 г. группой под руководством Жана Ишбиа в рамках конкурса, объявленного Министерством Обороны США, поскольку разработки в этом ведомстве велись до этого на многих языках и ни один из них не удовлетворял всем задачам.

ADA – универсальный высокоуровневый язык программирования. Он – модульный и даже объектный, но не объектно-ориентированный. Как и все языки, он развивался. Мода на объектно-ориентированное программирование привела к созданию принципиально новой его версии ADA95.

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

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

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

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

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

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

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

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

Таким образом, различные языки предоставляют программисту одинаковые возможности (при различном внешнем виде программ). Сравнивая между собой конструкции современных языков программирования и выделив их общую составляющую, можно описать (не создать, а именно описать уже существующий de facto!) «универсальный» язык программирования (правда, только на семантическом уровне). Существующая ныне система стандартизации языков программирования не способствует выполнению этой задачи. Главная проблема состоит в том, что при описании стандарта семантическая составляющая не отделена от синтаксиса и лексики. Кроме того, при модернизации стандартов комитеты ISO/ANSI предпочитают скорее добавлять в язык новые возможности, чем исключать редко используемые, что приводит к неоправданному синтаксическому расширению языков.

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

Создание входного языка для многоязыкового компилятора можно произвести двумя различными способами:

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

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

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

Последнее время высока популярность WWWпрограммирования. Языки WWW-программирования обладают рядом свойств, которые позволяют использовать их на платформе, специализированной для работы в качестве сервера. Чаще всего это интерпретаторы (такие, как Perl, PHP), позволяющие использовать их на стороне сервера, или языки, поддерживаемые клиентом (браузеры) – HTML, XML, Java, JavaScript, или специальные модули (plug-in), расширяющие клиента – Flash. Унификация языков программирования и создание общепринятой семантической базы – необходимые условия продолжения прогресса в этой области программного обеспечения, и, в конечном итоге, всей компьютерной индустрии [5].

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

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

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

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

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

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

  • Целевая платформа.
  • Гибкость языка.
  • Время исполнения проекта.
  • Производительность.
  • Поддержка и сообщество [8].

Целевая платформа

Самым важным фактором является платформа, на которой программа будет работать. Рассмотрим для примера 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? Такое приложение может использовать практически неограниченную процессорную мощность, и обе программы возвратят результаты почти за одно и то же время. Теперь основным фактором выбора будет количество строк кода и удобство обслуживания.

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

Поддержка и сообщество

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

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

Хороший пример значения сообщества дает язык Perl. Архив Comprehensive Perl Archive Network (CPAN) поддерживается усилиями сообщества. Главная цель CPAN – помочь программистам в поиске модулей и программ, не включенных в стандартный дистрибутив Perl. По своей структуре он децентрализован; авторы обслуживают и улучшают свои собственные модули. Обычной практикой является создание ответвлений и конкурирующих модулей для одной и той же задачи или цели.

Сценарии

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

  • REST-сервис для операции сложения.
  • Простая программа чтения фидов.
  • Корпоративные приложения.
  • Исследовательские проекты [2].

REST-сервис для операции сложения

В этом сценарии рассматривается REST-сервис, выполняющий сложение. Сервис вызывается по URL, http://<url>?num1=number1&num2=number2, а результат должен содержать сумму двух чисел, переданных сервису. Эту программу можно написать на разных языках. В нашем примере используются JSP (см. листинг 1) и PHP (см. листинг 2). JSP-программа написана в Eclipse IDE.

Листинг 1. REST-сервис, использующий JSP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Sum</title>

</head>

<body>

    <% if (request.getParameter("num1") == null ||

    request.getParameter("num2") == null) { %>

        <p>

            <b>Wrong URL!!!</b>

        </p>

        <p>

            <b>Enter URL in this format: </b>

            <i>

            http://&lt;url&gt;?num1=number1&amp;num2=number2</i>

        </p>

   <% } else { %>

       <b>Number 1:</b>

       <i><%= request.getParameter("num1") %></i>

       <br>

       <b>Number 2:</b>

       <i><%= request.getParameter("num2") %></i>

       <br>

       <b>Sum:</b>

       <i><%= Integer.parseInt(request.getParameter("num1")) +

       Integer.parseInt(request.getParameter("num2")) %></i>

       <br>

   <% } %>

</body>

</html>

В листинге 2 приведена та же программа, написанная на PHP.

Листинг 2. REST-сервис, использующий PHP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Sum</title>

</head>

<body>

    <?php if ($_GET["num1"] == NULL || $_GET["num2"] == NULL) { ?>

    <p><b>Wrong URL!!!</b></p>

    <p>

        <b>Enter URL in this format: </b>

        <i>http://&lt;url&gt;?num1=number1&amp;num2=number2</i>

    </p>

    <?php } else { ?>

        <b>Number 1:</b>

        <i><?= $_GET["num1"] ?></i>

        <br>

        <b>Number 2:</b>

        <i><?= $_GET["num2"] ?></i>

        <br>

        <b>Sum:</b>

        <i><?= $_GET["num1"] + $_GET["num2"] ?></i>

        <br>

    <?php } ?>

</body>

</html>

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

Возможности JSP позволяют использовать его преимущественно на корпоративном уровне. Например, в случае использования JSP программа при самом первом вызове загружается в память как сервлет. При каждом последующем запросе вызывается программа, находящаяся в памяти, что улучшает время ее реакции. Она также идеальна для среды Java. В случае использования PHP программа загружается в память при каждом вызове, что может увеличить время реакции для критических приложений.

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

Простая программа чтения фидов

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

Фрагмент кода, приведенный в листинге 3, взят из O'Reilly и написан на Java.

Листинг 3. Программа чтения фидов, использующая Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import java.io.InputStream;

import java.net.URL;

import java.net.URLConnection;

import org.apache.commons.io.IOUtils;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import net.sf.json.JSONSerializer;

public class JsonParser {

    public static void main(String[] args) throws Exception {

        String urlString =

"http://pipes.yahoo.com/pipes/pipe.run?_id=df36e60df711191549cf529e1df96884&

_render=json&

textinput1=and&urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex";

        URL url = new URL(urlString);

        URLConnection urlCon = url.openConnection();

        InputStream is = urlCon.getInputStream();

        String jsonTxt = IOUtils.toString(is);

        JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonTxt);

        JSONObject value = json.getJSONObject("value");

        JSONArray items = value.getJSONArray("items");

        String title;

        for (Object item : items) {

            title=((JSONObject)item).getString("title");

            System.out.println("\n" + title);

        }

    }

}

В листинге 4 приведена программа, написанная на Python.

Листинг 4. Программа чтения фидов, использующая Python

1

2

3

4

5

6

7

8

9

#!/usr/bin/python

import urllib.request

url = "http://pipes.yahoo.com/pipes/pipe.run?

   _id=df36e60df711191549cf529e1df96884&_render=json&

   textinput1=and&urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex"

HTTPdata = urllib.request.urlopen(url)

json_data = eval(HTTPdata.read())

for item in json_data['value']['items']:

    print (item['title'])

Python-программу можно сократить еще больше – всего до трех строк. Оставьте в листинге 4 первые две строки и замените остальной код строкой из листинга 5.

Листинг 5. Сокращенная третья строка

1

2

3

4

for item in eval((urllib.request.urlopen("http://pipes.yahoo.com/pipes/pipe.run?

   _id=df36e60df711191549cf529e1df96884&_render=json&textinput1=and&

   urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex"))

   .read()))['value']['items']:print (item['title'])

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

Корпоративные приложения

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

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

Представьте себе, что предприятие, использующее свои реализованные на Java-коде Web-сервисы, хочет в качестве надежной платформы добавить WebSphere® MQ. Нет никакого смысла использовать для написания приложения C-интерфейсы системы WebSphere MQ; следует выбрать Java.

Исследовательские проекты

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

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

В такой ситуации на помощь могут прийти такие языки, как MATLAB и LISP. Если вы начнете создавать прототип на C, то погрузитесь в дебри переменных и указателей и не получите реальных результатов исследования. MATLAB интегрируется с C/C++ и Fortran, что позволяет вызывать C-код из MATLAB и наоборот.

Заключение

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

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

Список использованной литературы

  1. Андреев, А. Эволюция современных языков программирования / А. Андреев // Мир ПК. – 2011. – № 3.
  2. Гедранович, В.В. Основы информатики и вычислительной техники: учеб.-метод. комплекс: в 2 ч. – Минск: Изд-во МИУ, 2006. – Ч. 2. – 162 с.
  3. Информатика: учебник / под ред. проф. Н.В. Макаровой. – М.: Ось-89, 2017. – 768 с.
  4. Информатика / Под ред. А.П. Курносова. – М.: КолосС, 2015. – 272 с.
  5. Кауфман, В. Языки программирования. Концепции и принципы. / В. Кауфман. – М.: Центр-пресс, 2014. – 231 c.
  6. Коцюбинский, А.О. Хрестоматия работы на компьютере: практ. пособ. – М.: ТРИУМФ, 2016. – 640 с.
  7. Малышев Р.А. Локальные вычислительные сети: Учебное пособие. – Рыбинск: РГАТА, 2015. – 83 с.
  8. Островский В.А. Информатика: учеб. для вузов. - М.: Высшая школа, 2018. — 511 с.
  9. Семакин И.А., Информатика: Базовый курс /Семакин И.А., Залогова Л., Русаков С., Шестакова Л. – М.: БИНОМ, 2015. – 105с.
  10. Симонович С.В.Информатика. Базовый курс. — СПб.: Питер, 2013. — 640 с.
  11. C ++,TurboPasckal,QBasik:Эволюция языков программирования http://langprog.far.ru/historylangprog.html. - 27.05.10.