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

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

Содержание:

ВВЕДЕНИЕ

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

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

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

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

Задачи исследования:

  1. Узнать, что такое языки программирования и историю их возникновения.
  2. Изучить классификацию языков программирования.
  3. Изучить понятие среды разработки.
  4. Рассмотреть критерии выбора среды и языка разработки программ.

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

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

Глава 1. Языки программирования. История возникновения и классификация

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

Обратимся к истокам развития вычислительной техники. Вспомним самые первые компьютеры и программы для них. Это была эра программирования непосредственно в машинных кодах, а основным носителем информации были перфокарты и перфоленты. Программисты обязаны были знать архитектуру машины досконально. Программы были достаточно простыми, что обуславливалось, во-первых, весьма ограниченными возможностями этих машин, и, во-вторых, большой сложностью разработки и, главное, отладки программ непосредственно на машинном языке. Вместе с тем такой способ разработки давал программисту просто невероятную власть над системой. Становилось возможным использование таких хитроумных алгоритмов и способов организации программ, какие и не снились современным разработчикам. Например, могла применяться такая возможность, как самомодифицирующийся код. Знание двоичного представления команд позволяло иногда не хранить некоторые данные отдельно, а встраивать их в код как команды. Но, все же, эти процедуры были очень трудоемкими, к тому же, программы на машинном языке являлись машинно-зависимыми, т.е. для каждой ЭВМ необходимо было составлять свою программу. Программа получалась громоздкой, труднообозримой, ее трудно было отлаживать, изменять и развивать. Для того чтобы представить, насколько это было сложно, приведу фрагмент (примерно одну десятую часть) программы, которая выводит на экран приветствие «Hello, world!»:

457f464c010100010000000000000000000200030001000003d00800003400000698

00000000000000340020000500280016001300060000003400000034080000000000

00а0000000а0000000050000000400000003000000d4000000d40800000000000013

00000013000000040000000100000001000000000000000008000000000004f500000

4f5000000050000100000000001000004f8000014f808000000000000c4000000c8000

0000600001000000000020000052c0000152c0800000000000090000000900000000

60000000400006c2f62696c2f2d64696c756e2e786f73312e000000110000001100000 0000000000e0000000a000000000000...

В 40-х годах XX века началась разработка языков программирования, которые по своей лексике были бы максимально приближены к естественному языку человека. Язык программирования — это способ записи программ решения различных задач на ЭВМ в понятной для компьютера форме[1]. Такие языки программирования получили название «алгоритмические».

Промежуточным шагом к разработке алгоритмических языков стал язык Assembler. В Ассемблере команды представляются не двоичными числами, а в виде сочетаний символов (мнемоническими кодами), по которым можно воспроизвести смысл команды, что значительно устраняет трудности и недостатки программирования на машинном языке. Программы, составленные на языке Ассемблер, не могут быть непосредственно выполнены на компьютере. Чтобы такая программа заработала, ее текст нужно преобразовать в машинные коды. Для этого существуют специальные программы-переводчики (трансляторы). Различают 2 вида трансляторов: компилятор и интерпретатор. Компилятор транслирует программу сразу целиком, и лишь после этого возможно ее выполнение. Интерпретатор - это более простой транслятор, он последовательно транслирует операторы программы и так же по частям ее выполняет.

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

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

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

Прообразом современных языков высокого уровня является Планкалкюль – язык, созданный в 1945 году талантливым немецким инженером Конрадом Цузе. Однако Планкалкюль так и не был реализован. Часто в связи с разговором о первых языках программирования, упоминают ряд проектов, осуществленных Грейс Хоппер в 1950-е годы. Но первыми по-настоящему распространенными языками стали Фортран, Кобол и Алгол.[3]

В 1954 году в недрах корпорации IBM группой разработчиков во главе с Джоном Бэкусом был создан язык программирования Fortran. Значение этого события трудно переоценить. Это первый язык программирования высокого уровня. Впервые программист мог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, отличающей новый язык от ассемблера, была концепция подпрограмм. Современные компьютеры поддерживают подпрограммы на аппаратном уровне, предоставляя соответствующие команды и структуры данных (стек) прямо на уровне ассемблера, в 1954 же году это было совершенно не так. Поэтому компиляция Фортрана была процессом отнюдь не тривиальным. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки в первую очередь из-за того, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу возможностей для скрытых ошибок. Язык Фортран использовался (и используется по сей день) для научных вычислений. Он страдает от отсутствия многих привычных языковых конструкций и атрибутов, компилятор практически никак не проверяет синтаксически правильную программу с точки зрения семантической корректности (соответствие типов и проч.). В нем нет поддержки современных способов структурирования кода и данных. Это осознавали и сами разработчики. По признанию самого Бэкуса, перед ними стояла задача скорее разработки компилятора, чем языка. Понимание самостоятельного значения языков программирования пришло позже.

Фортран – яркий пример прагматического подхода. Строгости и изяществу языка здесь уделялось мало внимания. Основной акцент был сделан на модульности, организации ввода-вывода.[4]

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

Поскольку Фортран оказался столь успешным языком, в Европе возникли опасения, что IBM будет доминировать в компьютерной отрасли. Немецкое общество прикладной математики (Germansocietyofappliedmathematics — GAMM) создало комитет по разработке универсального языка. В то же время AssociationforComputingMachinery (ACM) организовала похожий комитет в США. Несмотря на то, что у европейцев было некоторое беспокойство по поводу господства американцев, оба этих комитета слились в один.

В 1958 году на недельной конференции в ETH (Цюрих, Швейцария) был разработан Algol, как универсальный язык программирования для широкого круга применений, а затем доработан комитетом, созданным Международной федерацией по обработке информации (IFIP). Первоначально этот язык назвали IAL (International Algebraic Language).[5] В комитет вошёл ряд ведущих европейских и американских учёных и инженеров-разработчиков языков. В Алголе появилось представление о программе не как о свободной последовательности команд, а как о блочной структуре, состоящей из чётко описанных и отделённых друг от друга частей. Основной блок программы на Алголе — это сама главная программа. Она содержит свою исполняемую часть, заключённую в блок, ограниченный парой ключевых слов begin и end, а также описания подпрограмм. Каждая подпрограмма — это программа в миниатюре, имеющая собственные, описанные внутри неё данные, однозначно определённый интерфейс в виде имени и списка формальных параметров, и блок кода. При этом в блоке могут выделяться подблоки.

Были выделены структурные управляющие конструкции: ветвления, циклы, последовательные участки, исполняющие условно или многократно вложенные наборы операторов , также ограниченные теми же ключевыми словами begin и end. Современным программистам подобная структура программы кажется очевидной, кое в чём устаревшей и не всегда удобной, но на момент появления Алгола всё это было заметным шагом вперёд. Программы становились регулярными, это давало возможность наращивать их по объёму, сохраняя обозримыми, понятными, доступными анализу и исправлению. Именно на базе Алгола и его языков-потомков были выполнены успешные работы по аналитическому доказательству правильности программ.

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

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

В 1964 году все та же корпорация IBM создала язык PL/1, который был призван заменить Кобол и Фортран в большинстве приложений. Язык обладал исключительным богатством синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма. Надо заметить, что синтаксическая структура языка была крайне сложной. Пробелы уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы. В частности, следующая строка — это вполне нормальный оператор на PL/1: IF ELSE=THEN THEN THEN; ELSE ELSE. В силу таких особенностей разработка компилятора для PL/1 была исключительно сложным делом. Язык так и не стал популярен вне мира IBM.

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

Сразу следом за PL/1, в том же 1964 году профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени был разработан, используемый в узком кругу лиц и сейчас, Basic. Название Basic образовано от словосочетания Beginer's All-purpose Symbolic Instruction Code, т.е. многоцелевой код символических команд для начинающих[8]. Язык изначально создавался для конкретно учебных целей, с помощью этого языка планировалось научить студентов-непрограммистов писать программы самостоятельно для решения своих же задач.

Восемь основных принципов, которые соблюдались при создании Бейсика:

1.быть простым в использовании для начинающих;

2.быть языком программирования общего назначения;

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

4.быть интерактивным;

5.предоставлять ясные сообщения об ошибках;

6.быстро работать на небольших программах;

7.не требовать понимания работы аппаратного обеспечения;

8.защищать пользователя от операционной системы.

Язык был основан частично на Фортране II и частично на Алголе 60, с добавлениями, делающими его удобным для работы в режиме разделения времени и, позднее, обработки текста и матричной арифметики. Первоначально Бейсик был реализован на мейнфрейме GE-265с поддержкой множества терминалов. Вопреки распространённому убеждению, в момент своего появления это был компилируемый язык. Было создано несколько мощных реализаций Бейсик, поддерживающих самые современные концепции программирования (ярчайший пример — Microsoft Visual Basic).

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

Больше, применяемых сегодня, никаких языков программирования период 60-х годов не принес, зато, как только он перешел на период 70-х годов сразу же в1970-м году был разработан Pascal, тот самый, который и сегодня изучается в школьной программе информатики и на котором объясняется консольное программирование.

Язык Паскаль был создан Никлаусом Виртом в 1968—1969 годах после его участия в работе комитета разработки стандарта языка Алгол-68. Язык назван в честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа.

Язык унаследовал от Алгола строгое описание синтаксиса, компактность. Ориентируясь исключительно на простые учебные задачи, Паскаль рассматривал структуру программы как нечто неделимое, целое.[9]

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

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

Отрицательной чертой языка было отсутствие в нем средств для разбиения программы на модули. Вирт осознавал это и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 году появилась Modula-3, в которую были добавлены объектно-ориентированные черты. Логическим продолжением Паскаля и Модулы являются язык Oberon и Oberon-2. Они характеризуются движением в сторону объектно- и компонентно- ориентированности.

Следом наступает год рождения языка программирования C — отца, используемого и сегодня C++. Язык программирования Си был разработан в лабораториях BellLabs Брайаном Керниганом и Деннисом Ритчи в период с 1969 по 1973 годы. Согласно Ритчи, самый активный период творчества пришёлся на 1972 год.

Язык назвали «Си» (C — третья буква латинского алфавита), потому что многие его особенности берут начало от старого языка «Би» (B — вторая буква латинского алфавита). Существует несколько различных версий происхождения названия языка Би. Кен Томпсон указывает на язык программирования BCPL, однако существует ещё и язык Bon, также созданный им, и названный так в честь его жены Бонни.

При разработке языка Си был принят компромисс между низким уровнем языка ассемблера и высоким уровнем таких языков, как Паскаль, Фортран, Бэйсик, ПЛ/1 и др. Многие и многие операции языка Си (манипулирования строками, ввода-вывода и др.) вынесены за пределы языка и реализованы как подпрограммы, которые могут быть вызваны из Си-программ. Такое решение обеспечило высокую эффективность языка Си (высокое быстродействие и малые затраты памяти)[10].

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

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

Разработка Си стала результатом того, что его будущие авторы любили компьютерную игру, подобную популярной игре Asteroids (Астероиды). Они уже давно играли в неё на главном сервере компании, который был недостаточно мощным и должен был обслуживать около ста пользователей. Томпсон и Ритчи посчитали, что им не хватает контроля над космическим кораблём для того, чтобы избегать столкновений с некоторыми камнями. Поэтому они решили перенести игру на свободный PDP-7,стоящий в офисе. Однако этот компьютер не имел операционной системы, что заставило их её написать. В конце концов, они решили перенести эту операционную систему ещё и на офисный PDP-11,что было очень тяжело, потому что её код был целиком написан на ассемблере. Было вынесено предложение использовать какой-нибудь высокоуровневый портируемый язык, чтобы можно было легко переносить ОС с одного компьютера на другой. Язык Би, который они хотели сначала задействовать для этого, оказался лишён функциональности, способной использовать новые возможности PDP-11.Поэтому они и остановились на разработке языка Си.

В 1978 году Брайан Керниган и Деннис Ритчи опубликовали первую редакцию книги «Язык программирования Си». Эта , известная среди программистов как «K&R», книга служила многие годы неформальной спецификацией языка.

В конце 1970-х годов Си начал вытеснять Бейсик с позиции ведущего языка для программирования микрокомпьютеров. В1980-х годах он был адаптирован для использования в IBM PC, что привело к резкому росту его популярности. В то же время Бьёрн Страуструп и другие в лабораториях BellLabs начали работу по добавлению в Си возможностей объектно-ориентированного программирования. Язык, который они в итоге сделали, C++, оказал большое влияние на разработку ПО, но так и не смог сравняться по популярности с Си, особенно в UNIX-подобных системах.

В1983 году Американский национальный институт стандартов (ANSI) сформировал комитет для разработки стандартной спецификации Си. По окончании этого долгого и сложного процесса в 1989 году он был наконец утверждён как «Язык программирования Си» ANSI X3.159-1989. Эту версию языка принято называть ANSI C или C89.

Период 80-х годов особо ничего не принес в развитие языков программирования, если говорить о применяемых языках сегодня. Было внесено много доработок в созданные раннее языки программирования, такие как Си, Бейсик и Паскаль, однако, самой интересной доработкой для нас является модификация C в C++.

Язык возник в начале 1980-хгодов, когда сотрудник фирмы BellLabs Бьёрн Страуструп придумал ряд усовершенствований к языку Си под собственные нужды. Когда в конце1970-х годов Страуструп начал работать в BellLabs над задачами теории очередей (в приложении к моделированию телефонных вызовов), он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно из-за их ограниченной выразительности. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. C++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая (третья) версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов. У него имеются, однако же, и слабые стороны, вытекающие из требований эффективности.[11]

В 1995 году в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом был создан язык Java. Язык Java произошел от языка программирования Oak (а не от C++, как думают многие). Oak был приспособлен для работы в Internet и затем переименован в Java.

Синтаксис Java близок к синтаксису языка C++. Унаследовав самое лучшее от языка программирования C++, язык Java при этом избавился от некоторых недостатков C++, в результате чего на нем стало проще программировать. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. Огромное преимущество Java заключается в том, что на этом языке можно создавать приложения, способные работать на различных платформах. К сети Internet подключены компьютеры самых разных типов - Pentium PC, Macintosh, рабочие станции Sun и так далее. Даже в рамках компьютеров, созданных на базе процессоров Intel, существует несколько платформ, например, MicrosoftWindows версии 3.1, Windows 95, Windows NT, OS/2, Solaris, различные разновидности операционной системы UNIX с графической оболочкой XWindows. Между тем, создавая сервер Web в сети Internet, хотелось бы, чтобы им могло пользоваться как можно большее число людей. В этом случае выручают приложения Java, предназначенные для работы на различных платформах и не зависящие от конкретного типа процессора и операционной системы.

В 1999–2000 годах в корпорации Microsoft был создан язык C#. Он в достаточной степени схож с Java (и задумывался как альтернатива последнему), но имеет и отличительные особенности. Ориентирован, в основном, на разработку многокомпонентных Интернет-приложений.

Язык Ада создан в основном в 1975-1980 гг. в результате грандиозного проекта, предпринятого МО США с целью разработать единый язык программирования для так называемых встроенных систем (то есть систем управления автоматизированными комплексами, работающими в реальном времени). Имелись в виду, прежде всего бортовые системы управления военными объектами (кораблями, самолетами, танками, ракетами, снарядами и т. п.). Поэтому решения, принятые авторами Ады, не следует считать универсальными. Их нужно воспринимать в контексте особенностей выбранной ПО[12].

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

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

В 1957 году была предпринята попытка создания языка для описания математической обработки данных. Язык был назван APL (Application Programming Language). Его отличительной особенностью было использование математических символов (что затрудняло применение на текстовых терминалах; появление графических интерфейсов сняло эту проблему) и очень мощный синтаксис, который позволял производить множество нетривиальных операций прямо над сложными объектами, не прибегая к разбиению их на компоненты. Широкому применению помешало, как уже отмечалось, использование нестандартных символов как элементов синтаксиса.

В 1962 году появился язык Snobol (а в 1974 — его преемник Icon), предназначенный для обработки строк. Синтаксис Icon напоминает Си и Паскаль одновременно. Отличие заключается в наличии мощных встроенных функций работы со строками и связанная с этими функциями особая семантика. Современным аналогом Icon и Snobol является Perl — язык обработки строк и текстов, в который добавлены некоторые объектно-ориентированные возможности. Считается очень практичным языком, однако ему недостает элегантности.

В 1969 году был создан язык SETL — язык для описания операций над множествами. Основной структурой данных в языке является множество, а операции аналогичны математическим операциям над множествами. Полезен при написании программ, имеющих дело со сложными абстрактными объектами.[14]

В 1958 году появился язык Lisp — язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта. Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984). В виде списков удобно представлять алгебраические выражения, графы, элементы конечных групп, множества, правила вывода и многие другие сложные объекты. Списки являются наиболее гибкой формой представления информации в памяти компьютеров. Неудивительно поэтому, что удобный язык, специально предназначенный для обработки списков, быстро завоевал популярность. Многие его черты были унаследованы современными языками функционального программирования.

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

Brendan Eich из компании Netscape Communications изобрел язык JavaScript в качестве языка для описания сложного поведения веб-страниц. Первоначально назывался LiveScript, причиной смены названия были маркетинговые соображения. Интерпретируется браузером во время отображения веб-страницы. По синтаксису схож с Java и (отдаленно) с C/C++. Имеет возможность использовать встроенную в браузер объектную функциональность, однако подлинно объектно-ориентированным языком не является[15]. Впервые новый язык был использован в браузере NetscapeNavigator 2.0. После этого он стал использоваться во всех последующих браузерах от Netscape и во всех браузерах от Microsoft, начиная с InternetExplorer 3.0. Компания Microsoft по-своему развила идею, и дала своей версии языка более короткое название: JScript.

Далее, чтобы обеспечить совместимость версий языка независимых разработчиков, Генеральной Ассамблеей ECMA был создан стандарт. Этот стандарт основан на нескольких базовых технологиях, наиболее известными из которых являются упомянутые уже JavaScript (Netscape) и JScript (Microsoft).

Развитие этого Стандарта началось в ноябре 1996. Первое издание Стандарта ECMA было принято Генеральнаой Ассамблеей ECMA в июне 1997.

Данный ECMA Стандарт был представлен международной комиссии по стандартам ISO/IEC JTC 1 для принятия, и одобрен как международный эталон ISO/IEC 16262 в апреле 1998. Генеральная Ассамблея ECMA в июне 1998 одобрила второе издание ECMA-262,с сохранением всех требований.

В качестве альтернативы JavaScript в корпорации Microsoft был создан язык VBScript. Имеет схожую область применения. Синтаксически схож с языком VisualBasic (и является усеченной версией последнего). Так же, как и JavaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектно-ориентированности.

Язык Perl создавался в помощь системному администратору операционной системы Unix для обработки различного рода текстов и выделения нужной информации. Развился до мощного средства работы с текстами. Является интерпретируемым языком и реализован практически на всех существующих платформах. Применяется при обработке текстов, а также для динамической генерации веб-страниц на веб-серверах.[16]

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

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

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

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

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

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

К языкам программирования высокого уровня относят Фортран, Алгол, Кобол, Паскаль, Бейсик, Пролог (в основе языка лежит аппарат математической логики) и т.д.

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

Основу каждой системы программирования составляет транслятор. Это программа, приводящая текст на языке программирования в форму, пригодную для исполнения. Такой формой обычно являются машинные команды, которые могут непосредственно исполняться компьютером[17]. Существует три вида транслятора:

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

Языки программирования также можно разделять на поколения:

  1. языки первого поколения: машинно-ориентированные с ручным управлением памяти на компьютерах первого поколения,
  2. языки второго поколения: с мнемоническим представлением команд, так называемые автокоды и Ассемблер,
  3. языки третьего поколения: общего назначения, используемые для создания прикладных программ любого типа. Например, Бейсик, Кобол, Си и Паскаль,
  4. языки четвертого поколения: усовершенствованные, разработанные для создания специальных прикладных программ, для управления базами данных,
  5. языки программирования пятого поколения: языки декларативные, объектно-ориентированные и визуальные. Например, Пролог, ЛИСП (используется для построения программ с использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi.

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

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

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

Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ada, PL/1. Среди операционных известны Фортран, Бейсик, Фокал.

Непроцедурное (декларативное) программирование появилось в начале 70-х годов XX века, К непроцедурному программированию относятся функциональные и логические языки.

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

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

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

Первый объектно-ориентированный язык программирования Simula был создан в 1960-х годах Нигаардом и Далом.

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

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

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

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

  1. научные вычисления (языки С++, FORTRAN, Java);
  2. системное программирование (языки С++, Java);
  3. обработка информации (языки С++, COBOL, Java);
  4. искусственный интеллект (LISP, Prolog);
  5. издательская деятельность (Postscript, TeX);
  6. удаленная обработка информации (Perl, PHP, Java, С++);
  7. описание документов (HTML, XML).

С течением времени одни языки развивались, приобретали новые черты и остались востребованными, другие утратили свою актуальность и сегодня представляют в лучшем случае чисто теоретический интерес (Focal, PL/1 и др.). В значительной степени это связано с такими факторами:

  1. наличие среды программирования, поддерживающей разработку приложений на конкретном языке программирования;
  2. удобство сопровождения и тестирования программ;
  3. стоимость разработки с применением конкретного языка программирования;
  4. четкость и ортогональность конструкций языка;
  5. применение объектно-ориентированного подхода.

Среда разработки программного обеспечения (ПО) — совокупность программных средств, используемая программистами для разработки программного обеспечения. Простая среда разработки включает в себя редактор текста, компилятор и/или интерпретатор, средства автоматизации сборки и отладчик. Когда эти компоненты собраны в единый программный комплекс, говорят об интегрированной среде разработки (Integrated development environment- IDE). Такая среда представлена одной программой, не выходя из которой можно производить весь цикл разработки. В состав комплекса кроме перечисленных выше компонент могут входить средства управления проектами, система управления версиями, разнообразные инструменты для упрощения разработки интерфейса пользователя, стандартные заготовки («мастера»), упрощающие разработку стандартных задач, и др. Современные среды разработки, поддерживающие объектно-ориентированную разработку ПО, также включают браузер классов, инспектор объектов и диаграмму иерархии классов. Хотя существуют среды разработки, предназначенные для нескольких языков — такие как Eclipse или Microsoft Visual Studio, обычно среда разработки предназначается для одного определённого языка программирования.

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

Иногда достаточно использовать только одну интегрированную среду разработки, но для больших проектов в среду разработки включаются разнородные продукты разных фирм, разных версий. Пример такого набора: файловый менеджер, набор вспомогательных утилит и пакетных файлов, С++Builder – как IDE, PLSQL Developer – для работы с СУБД Oracle, Cristal Reports – для создания отчетов , StarTeam – для ведения версий и поддержки коллективной работы.

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

История развития операционных сред непосредственно связана с историей развития вычислительной техники и базового программного обеспечение – операционных систем. Вся история вычислительной насчитывает немногим более 60 лет. 4 декабря 2008 годы было отмечено 60 лет отечественной информатики. Что касается истории программных технологий, то ей всего 25 лет. Именно 1984 года был взят за точку отчета в статье Кристофера Эберта. Сам термин «программная инженерия» стал широко использоваться 20 лет назад.

Кардинальные изменения в сфере технологий были связаны с использованием алфавитно-цифровых, а затем и графических дисплеев, разработкой операционной IBM OS/360, изобретением микропроцессоров, появлению персональных ЭВМ, распространением Интернета.

Изменялся способ общения программиста с ЭВМ. Первые компьютеры вообще не имели базового программного обеспечения. Программа могла вводиться вручную с пульта, а впоследствии с помощью перфолент и перфокарт. Первые терминалы с электронно-лучевыми трубками (дисплеями) были предназначены не для программистов, а для операторов ЭВМ. Программисты работали с ЭВМ опосредовано, сдавая на вычислительный центр колоды перфокарт. Их основным языком описания технологических процессов был язык управления заданиями (в ОС EC – это JCL, Job Control Language).

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

Начало 70-х годов – время массового перехода на языки программирования, появление операционных систем первого поколения. По мере возрастания мощности ЭВМ стал возможным коллективный доступ к ее ресурсам, и дисплей стал инструментом программиста.

Несмотря на развитие способов общения с ЭВМ для программиста неизменным оставался основной цикл разработки и отладки программ: редактирование программы – компиляция – сборка – выполнение программы – анализ ошибок – редактирование. Этот цикл всегда надо иметь в виду при оценке эффективности операционной среды.

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

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

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

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

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

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

Рассмотрим следующие четыре среды разработки: JDK (Java Development Kit), Блэкбокс, MS Visual Studio, Eclipse. Кратко их можно охарактеризовать так:

  1. JDK – простая, многоплатформенная, широко распространенная;
  2. Блэкбокс – простая, удобная для обучения;
  3. Microsoft Visual Studio – сложная, многоязыковая, широко распространенная;
  4. Eclipse – многоплатформенная, многоязыковая, перспективная.

JDK имеет простую модель среды разработки. Нет собственной IDE. Используется любой текстовый редактор. Имеются два основных исполняемых файла: компилятор javac.exe и исполнитель оттранслированных классов java.exe (собственно Java-машина). Исходные файлы имеют расширение java, оттранслированные – class. На уровне языка определяются иерархии пакетов, каждый из которых включает один или несколько классов. Иерархия пакетов естественным образом при трансляции отражается в файловую структуру. При трансляции файл с объявленным пакетом package s1.p1 создается подкаталог s1, в нем подкаталог p1, в который размещаются файлы с кодами классов. Каждому классу соответствует один файл, имя которого совпадает с именем класса.

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

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

На базе JDK функционирую более развитые платформы, такие как IDEA, NetBeans, Eclipse.

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

Блэкбокс (BlackBox Component Builder) — это бесплатная и открытая система программирования для языка программирования Компонентный Паскаль, являющаяся вариантом языка Оберон и обладающая следующей комбинацией свойств:

  1. очень простая (описание языка всего около 30 страниц);
  2. очень быстрая (быстро компилирует даже на i386);
  3. очень компактная (20 MB на диске в максимальной конфигурации)
  4. но при всем этом очень мощная (в том числе за счет лучшей в промышленности поддержки технологий компонентно-ориентированного программирования);
  5. бесплатная для некоммерческого использования (с конца 2004 г. система доступна с открытыми исходными кодами).

Блэкбокс имеет очень простую модель операционной среды. Разработчики системы следовали минималистскому принципу так же, как и при разработке языка системы. Например, в языке отсутствует вложенность модулей и классов и как следствие упрощается архитектурная модель. В отличие от языка Java, один модуль транслируется в один файл. Имеется два вида компонентов — модули и подсистемы. При успешной компиляции модуля образуются символьный и кодовый файлы, которые автоматически размещаются в подкаталогах Sym и Code соответственно. При этом эти каталоги размещаются в подкаталоге Блэкбоксе с названием подсистемы. Имя подсистемы – префикс имени модуля. Сами исходные файлы хранится в подкаталоге Mod. Символьный файл содержит всю информацию о внешних связях модуля по экспорту-импорту. Кодовый файл — это двоичный файл с машинными командами. Он загружается в память для непосредственного выполнения при первом вызове какой-либо процедуры из этого модуля.

Поскольку сам Блэкбоксе написан на Компонентном Паскале, любой скомпилированный модуль становится частью системы в том смысле, что как файл с машинным кодом, так и соответствующий символьный файл немедленно становятся доступными для импорта из других модулей, вызова процедур из меню Блэкбокса и т.п. Поэтому приложение может иметь такой же интерфейс, как и сама среда. Интерфейс представлен обычным многоуровневым меню и возможностью назначения горячих клавиш. Само меню хранится в файле Menus.odc и доступно для редактирования с помощью функций модуля Text. По команде «обновить меню» меню обновляется. Меню динамически формируется при запуске системы. Каждая подключаемая подсистема может иметь собственное подменю, которая динамически вставляется в основное меню, если в нем есть пункт, отмеченный символом «*». При такой технологии подключение подсистемы заключается в простом копировании файлов, входящим в подсистему. Если пользователь одновременно разрабатывает несколько приложений, каждое из которой располагается в своей папке, среда запускается с параметром, определяющим путь к этой папке. Подсистемы, находящиеся в основном каталоге, используются совместно. Такой подход значительно упрощает развертывание новой подсистемы в уже разработанном приложении.

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

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

Операционная среда разработки MS Visual Studio на сегодняшний день является предпочтительным выбором многих разработчиков, работающих на платформе Windows. Среда позволяет эффективно создавать сложные приложения в течение короткого периода времени. В отличие от рассмотренных выше операционных сред модель данной среды существенно богаче и использует такие понятия как решение (solution), проект, пространство имен (namespace) и сборка (assembly). Понятие проекта присутствует во многих средах, например, в среде Delphi. Файл проекта содержит перечисление исходных файлов и прочих ресурсов, из которых система будет строить приложение. В решение среды Visual Studio входят несколько проектов, которые могут быть зависимыми или независимыми друг от друга. Выделяется стартовый проект. Понятие сборки исходит из общеязыковой исполнительной среды CLR (Common Language Runtime). Среда CLR является наиболее революционным изобретением, с появлением которого процесс написания и выполнения приложений становиться принципиально другим.

Компилятор преобразует файлы с исходными кодами в коды на промежуточном языке MSIL (Microsoft Intermediate Language). Вместе с метаданными эти коды записываются PE-файлы (Portal Executable), имеющие расширение exe или dll в зависимости от типа проекта. Также может быть получен модуль с расширением netmodule, который не содержит метаданных.

Всего имеется 12 типов проектов. При загрузке PE-файлы «на лету» транслируются в команды реального процессора.

Каркас Framework.NET, обеспечивающий выполнение программ, не входит в Visual Studio, а является настройкой над операционной системой. Это аналог виртуальной Java-машины.

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

На уровне языка C# пространства имен, аналогично пакетам в Java, служат для структурирования проекта. Пространство имен включает один или несколько классов. В одном исходном файле может определяться несколько пространств имен и в тоже время одно пространство имен может определяться в нескольких файлах. И даже класс может располагаться в нескольких файлах (partial classes) .

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

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

В обзоре экосистема Eclipse относится к консолидированным технологиям, годом широкого распространения которой является 2007 год.

Система реализована на языке Java и изначально представляла собой полноценную интегрированную среду для языка Java. В дальнейшем стали поддерживаться и другие языки. Первые версии были неудобны в том, что целевой продукт вынуждено включал лишнюю функциональность. Начиная с третьей версии, была переработана архитектура всей системы с целью максимального разделения модулей и взаимосвязи между ними. При этом модули Eclipse, образованные из согласованных наборов классов, давали функциональность целых подсистем, таких как подсистемы помощи, обновления продукта, обучения, презентации, многоязыковой поддержки и множество других. Разрабатывая приложение теперь можно постепенно наращивать функциональность, подключая уже готовые бесплатные компоненты. В терминологии Eclipse эти компоненты называются «подключаемыми модулями» или «плагинами» (Plugins). Такая технология становится типичной для развитых операционных сред. Платформа на основе этой технологии получила название RCP (Reach Client Platform), а приложения, соответственно, RCP-приложениями.

Графический интерфейс Eclipse построен с использованием графической библиотеки SWT, которая опирается на графику используемой операционной системы. Предусмотрена возможность создания настраиваемых стилей, которые позволяют произвольно менять как внешний вид приложения, так и поведение составляющих его компонентов. Многооконный интерфейс MDI, реализованный в ОС Windows еще в версии 3.1, заменен на альтернативный интерфейс, основанный на закладках. Этот интерфейс похож на интерфейс MS Visual Studio, но имеет и отличия. Режимы работы могут объединяться в одну панель, либо размещаться каждый в отдельной панели. Имеется встроенный механизм чередования панелей или механизм «быстрых» панелей, когда они не занимают место на экране, а вызываются кнопками по необходимости.

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

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

Такая, сложная на первый взгляд, организация интерфейса, оказывается удобной именно благодаря использованию проекций. Проекцию можно рассматривать как набор визуальных компонент для выполнения конкретно поставленных задач. Например, проекция "Java" содержит необходимый набор для разработки java-приложений, а проекция "CVS" предназначена для оперирования удаленным репозитарием проектов при коллективной разработке. Каждая проекция имеет свой набор меню и панелей инструментов, состав которых можно настраивать и сохранять. Начальный макет проекции определяется разработчиком, но его можно изменять, открывая и закрывая панели и встраивая их в различные места окна Рабочей среды.

Основные визуальные компоненты рабочей среды – панели и редакторы.

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

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

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

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

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

ЗАКЛЮЧЕНИЕ

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

  1. увеличение абстракции,
  2. кросс-платформенность,
  3. простота использования,
  4. интерактивность,
  5. расширение функционала и т.д.

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Семакин И.Г. Шестаков А.П. Основы программирования: Учебник / И.Г. Семакин, А.П. Шестаков. – М.: Мастерство, 2002. – 432 с.
  2. Макарова Н.В. Основы программирования. Учебник с практикумом (для СПО): учебник / Н.В. Макарова. — М.: КНОРУС, 2016. — 454 с.
  3. Синицын С.В. Программирование на языке высокого уровня: учебник для студентов ВУЗ / С.В. Синицын, А.С. Михайлов, О.И. Хлытчиев. – М.: Издательский центр «Академия», 2010. – 400 с.
  4. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования: учебное пособие. – 3-е изд., испр. и доп. / О.Л. Голицына, И.И. Попов. – М.: ФОРУМ, 2008. – 432 с.
  5. Колдаев В.Д. Основы алгоритмизации и программирования: учебное пособие / под ред. проф. Л.Г. Гагариной. – М.: ИД «ФОРУМ»: ИНФРА-М, 2006. – 416 с.
  6. Давыдов В.Г. Программирование и основы алгоритмизации: Учебное пособие / В.Г. Давыдов. — М.: Высш. шк., 2003. — 447 с.
  7. Кауфман В. Ш. Языки программирования. Концепции и принципы / В.Ш. Кауфман. - М.: ДМК Пресс, 2010. - 464 с.
  8. Опалева Э.А., Самойленко В.Л. Языки программирования и методы трансляции / Э.А. Опалева, В.Л. Самойленко. – СПб.: БВХ-Петербург, 2005. – 480 с.
  9. Орлов С.А. Теория и практика языков программирования: учебник для вузов. Стандарт 3-го поколения / С.А. Орлов. – СПб.: Питер, 2014. – 688 с.
  10. Свердлов С.З. Языки программирования и методы трансляции: учебное пособие / С.З. Свердлов. – СПб.: Питер, 2007. – 638 с.
  1. Семакин И.Г., Шестаков А.П. Основы программирования: Учебник / И.Г.Семакин А.П.Шестаков. – М.: Мастерство, 2002. – С. 22

  2. ) Колдаев В.Д. Основы алгоритмизации и программирования: учебное пособие / под ред. проф. Л.Г. Гагариной. – М.: ИД «ФОРУМ»: ИНФРА-М, 2006. – С. 36-37

  3. Свердлов С.З. Языки программирования и методы трансляции: учебное пособие / С.З. Свердлов. – СПб.: Питер, 2007. – С. 26

  4. Орлов С.А. Теория и практика языков программирования: учебник для вузов. Стандарт 3-го поколения / С.А. Орлов. – СПб.: Питер, 2014. – С. 23

  5. Свердлов С.З. Языки программирования и методы трансляции: учебное пособие / С.З. Свердлов. – СПб.: Питер, 2007. – С. 34

  6. Семакин И.Г. Шестаков А.П. Основы программирования: Учебник / И.Г. Семакин, А.П. Шестаков. – М.: Мастерство, 2002. – С. 23

  7. Свердлов С.З. Языки программирования и методы трансляции: учебное пособие / С.З. Свердлов. – СПб.: Питер, 2007. – С. 44

  8. Макарова Н.В. Основы программирования. Учебник с практикумом (для СПО): учебник / Н.В. Макарова. — М.: КНОРУС, 2016. — С. 25

  9. Синицын С.В. Программирование на языке высокого уровня: учебник для студентов ВУЗ / С.В. Синицын, А.С. Михайлов, О.И. Хлытчиев. – М.: Издательский центр «Академия», 2010. – С. 9

  10. Давыдов В.Г. Программирование и основы алгоритмизации: Учебное пособие / В.Г. Давыдов. — М.: Высш. шк., 2003. — С. 16

  11. Колдаев В.Д. Основы алгоритмизации и программирования: учебное пособие / под ред. проф. Л.Г. Гагариной. – М.: ИД «ФОРУМ»: ИНФРА-М, 2006. – С. 40

  12. Кауфман В. Ш. Языки программирования. Концепции и принципы / В.Ш. Кауфман. - М.: ДМК Пресс, 2010. – С. 44

  13. Колдаев В.Д. Основы алгоритмизации и программирования: учебное пособие / под ред. проф. Л.Г. Гагариной. – М.: ИД «ФОРУМ»: ИНФРА-М, 2006. – С. 40

  14. Колдаев В.Д. Основы алгоритмизации и программирования: учебное пособие / под ред. проф. Л.Г. Гагариной. – М.: ИД «ФОРУМ»: ИНФРА-М, 2006. – С. 41

  15. Колдаев В.Д. Основы алгоритмизации и программирования: учебное пособие / под ред. проф. Л.Г. Гагариной. – М.: ИД «ФОРУМ»: ИНФРА-М, 2006. – С. 42

  16. Колдаев В.Д. Основы алгоритмизации и программирования: учебное пособие / под ред. проф. Л.Г. Гагариной. – М.: ИД «ФОРУМ»: ИНФРА-М, 2006. – С. 42

  17. Свердлов С.З. Языки программирования и методы трансляции: учебное пособие / С.З. Свердлов. – СПб.: Питер, 2007. – С. 18

  18. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования: учебное пособие. – 3-е изд., испр. и доп. / О.Л. Голицына, И.И. Попов. – М.: ФОРУМ, 2008. – С. 38

  19. Опалева Э.А., Самойленко В.Л. Языки программирования и методы трансляции / Э.А. Опалева, В.Л. Самойленко. – СПб.: БВХ-Петербург, 2005. – С. 19

  20. Орлов С.А. Теория и практика языков программирования: учебник для вузов. Стандарт 3-го поколения / С.А. Орлов. – СПб.: Питер, 2014. – С. 27